{"version":3,"sources":["webpack:///./wwwroot/scripts/neo-mastersOfEclipse.min.js","webpack:///webpack/bootstrap 8fe29e5705dd8e914b87","webpack:///./Engine/Game/GameApp.ts","webpack:///external \"NeoCommon\"","webpack:///external \"NeoGames\"","webpack:///./Engine/Common/Strings.ts","webpack:///./Engine/Common/AppContext.ts","webpack:///./Engine/Game/Components/StageController.ts","webpack:///./Engine/Game/AnimationFrame/Pool.ts","webpack:///./Engine/Game/Utils/Scaling.ts","webpack:///./Engine/Game/Utils/FrameTimer.ts","webpack:///./Engine/Game/AnimationFrame/AnimationFrame.ts","webpack:///./Engine/Game/AnimationFrame/Types.ts","webpack:///./Engine/Game/Components/Elements/Graphics/BaseElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ShapeElement.ts","webpack:///./Engine/Game/Components/ComponentTypes.ts","webpack:///./Engine/Game/Components/Effects/Tweens.ts","webpack:///./Engine/Game/Components/Effects/GsapEffects.ts","webpack:///./~/gsap/src/uncompressed/TweenMax.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./Engine/Game/Components/Effects/CustomEase.ts","webpack:///./Engine/Game/Components/Managers/StyleManager.ts","webpack:///./Engine/Game/Utils/Attributes.ts","webpack:///./Engine/Game/Utils/FrameTimerPool.ts","webpack:///./Engine/Game/Channels/Common/Bonuses/Jackpot.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotCounter.ts","webpack:///./Engine/Game/Utils/Languages.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotHistoryDialog.ts","webpack:///./Engine/Game/Channels/Common/Datas/JackpotData.ts","webpack:///./Engine/Game/Channels/Common/Datas/GameData.ts","webpack:///./Engine/Game/Managers/DataManager.ts","webpack:///./Engine/Game/Managers/GameManager.ts","webpack:///./Engine/Game/Managers/BetManager.ts","webpack:///./Engine/Game/Managers/ModuleManager.ts","webpack:///./Engine/Game/Managers/BalanceManager.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/CashierDialog.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/Dialog.ts","webpack:///./Engine/Game/Channels/Common/Bonuses/FreeRoundBonusExtended.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.ts","webpack:///./Engine/Game/Channels/Common/Bonuses/FreeRoundBonus.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusIcon.ts","webpack:///./Engine/Game/Components/Sounds/PlayList.ts","webpack:///./Engine/Game/Components/Managers/SoundManager.ts","webpack:///./Engine/Game/Utils/RetentionPanel.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/BetHigherThanMinDialog.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/ResponsibleDialog1.ts","webpack:///./Engine/Game/Managers/MessageManager.ts","webpack:///./Engine/Game/GameComponents/Base/BaseModel.ts","webpack:///./Engine/Game/Channels/Common/Actions/BaseActions.ts","webpack:///./Engine/Game/HTMLComponents/HtmlController.ts","webpack:///./Engine/Game/HTMLComponents/UserAction.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/QuickspinDialog.ts","webpack:///./Engine/Game/CustomComponents/PageVisibilityHandler.ts","webpack:///./Engine/Game/Channels/Common/Paytable/Paytable.ts","webpack:///./Engine/Game/Components/Configuration.ts","webpack:///./Engine/Game/Channels/Common/SimilarGames/SimilarGames.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/LimitDialog.ts","webpack:///./Engine/Game/Managers/NotificationManager.ts","webpack:///./Engine/Game/Utils/WebSocketClient.ts","webpack:///./Engine/Game/Utils/WebSocketClientHub.ts","webpack:///./Engine/Game/Channels/Common/Platforms/Playtech/SessionTimer.ts","webpack:///./Engine/Game/CustomComponents/SplashScreen.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsModel.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotGame.ts","webpack:///./Engine/Game/Utils/AmbientBackground.ts","webpack:///./Engine/Game/Utils/Focus.ts","webpack:///./Engine/Game/Components/Managers/PreloaderProvider.ts","webpack:///./Engine/Game/Components/Resources/XmlResource.ts","webpack:///./Engine/Game/Components/Resources/Resource.ts","webpack:///./Engine/Game/Components/Managers/CanvasManager.ts","webpack:///./Engine/Game/Components/ActionSet.ts","webpack:///./Engine/Game/Components/Managers/ConfigurationManager.ts","webpack:///./Engine/Game/Components/Managers/HtmlManager.ts","webpack:///./Engine/Game/Channels/Common/UserControls/GambleUserControls.ts","webpack:///./Engine/Game/Channels/Common/UserControls/UserControls.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlElement.ts","webpack:///./Engine/Game/Channels/Common/Actions/ActionSet.ts","webpack:///./Engine/Game/Channels/Common/Actions/GambleActions.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleController.ts","webpack:///./Engine/Game/GameComponents/Controller.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleModel.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleView.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ContainerElement.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopBaseUserControls.ts","webpack:///./Engine/Game/Channels/Common/Actions/GameActions.ts","webpack:///./Engine/Game/GameComponents/Base/BaseController.ts","webpack:///./Engine/Game/GameComponents/Base/BaseView.ts","webpack:///./Engine/Game/GameComponents/WinAnimator.ts","webpack:///./Engine/Game/GameComponents/Payline.ts","webpack:///./Engine/Game/Components/Elements/Graphics/SwitchElement.ts","webpack:///./Engine/Game/Components/Elements/Styles/SwitchStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/Style.ts","webpack:///./Engine/Game/Components/Elements/Graphics/AnimationElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/TextElement.ts","webpack:///./Engine/Game/Utils/CustomUtils.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ImageElement.ts","webpack:///./Engine/Game/Components/Elements/Styles/ParticleStyle.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ProtonElement.ts","webpack:///./Engine/Game/CustomComponents/RopeElement.ts","webpack:///./Engine/Game/GameComponents/PaylinesDefinitions.ts","webpack:///./Engine/Game/GameComponents/Symbol.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/TimelineElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts","webpack:///./Engine/Game/Components/Sounds/Song.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleAnimationElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutContainerElement.ts","webpack:///./Engine/Game/Managers/LayoutManager.ts","webpack:///./Engine/Game/GameComponents/Machine.ts","webpack:///./Engine/Game/GameComponents/Reel.ts","webpack:///./Engine/Game/CustomComponents/Reel2.ts","webpack:///./Engine/Game/CustomComponents/WinAnimator2.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsView.ts","webpack:///./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopFreespinsUserControls.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsController.ts","webpack:///./Engine/Game/Channels/Common/Actions/FreespinsActions.ts","webpack:///./Engine/Game/Channels/Mobile/MobileFreespinsUserControls.ts","webpack:///./Engine/Game/Components/Managers/ActionManager.ts","webpack:///./Engine/Game/ClientHost/ClientHostConsumer.ts","webpack:///./Engine/Common/GameDefinition.ts","webpack:///./Engine/Common/GameConfiguration.ts","webpack:///./Engine/Game/Managers/PlatformsManager.ts","webpack:///./Engine/Game/Components/Elements/Graphics/BaseElementParticle.ts","webpack:///./Engine/Game/Components/Elements/Graphics/BGParticleElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/LinkedElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/VibrationElement.ts","webpack:///./Engine/Game/Utils/Vibration.ts","webpack:///./Engine/Game/Components/Elements/Styles/AnimationStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/BGParticleStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ContainerStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ProtonStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ShapeStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/TimelineStyle.ts","webpack:///./Engine/Game/Components/Resources/SndResource.ts","webpack:///./Engine/Game/CustomComponents/HtmlSplashScreen.ts","webpack:///./Engine/Game/CustomComponents/HtmlSvgElement.ts","webpack:///./Engine/Game/CustomComponents/ImageTextElementAdaptive.ts","webpack:///./Engine/Game/CustomComponents/JavascriptElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutImageElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutShapeElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutSwitchElement.ts","webpack:///./Engine/Game/CustomComponents/PortraitLayout.ts","webpack:///./Engine/Game/CustomComponents/SceneHolderElement.ts","webpack:///./Engine/Game/CustomComponents/SoundElement.ts","webpack:///./Engine/Game/GameComponents/Paylines.ts","webpack:///./Engine/Game/GameComponents/PaylinesSelector.ts","webpack:///./Engine/Game/GameComponents/Symbols.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement2.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlDenomContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlHideButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlLanguageContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlSoundContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayItemButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayDialogContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCanvasElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCheckboxElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCustomContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlDataSliderElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlLabelElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlText.ts","webpack:///./Engine/Game/HTMLComponents/Styles/HtmlContainerStyle.ts","webpack:///./Engine/Game/HTMLComponents/Styles/HtmlStyle.ts","webpack:///./Engine/Game/PixiSettings.ts"],"names":["e","a","i","this","modules","installedModules","__webpack_require__","moduleId","exports","module","id","loaded","call","m","c","p","Object","prototype","hasOwnProperty","_m","args","slice","fn","b","apply","concat","__extends","d","__","constructor","create","neo_common_1","libraryInitialize","gameApp","neo_common_2","neo_games_1","Strings_1","StageController_1","PreloaderProvider_1","Languages_1","ClientHostConsumer_1","GameDefinition_1","GameConfiguration_1","AppContext_1","GameData_1","HtmlController_1","GameManager_1","DataManager_1","PlatformsManager_1","FreeRoundBonusExtended_1","Scaling_1","RetentionPanel_1","SplashScreen_1","GameApp","_super","arguments","main","urlInfo","UriHelper","parseUrl","window","location","href","language","RetentionPanel","initialize","load","defineProperty","get","_gameClient","enumerable","configurable","exit","Platforms","gameClosing","AppContext","gameConfiguration","ExitUrl","userAction","url","history","closeRealityCheck","createGameClient","options","gameClient","Communication","Game","GameClient","key","FreeRoundBonusExtended","pauseAnimations","StageController","resumeAnimations","createPreloaderProvider","PreloaderProvider","createGameDefinition","definition","GameDefinition","createGameConfiguration","configuration","GameConfiguration","createAppContext","gameDefinition","createClientHostConsumer","GameClientHostConsumer","requireStrings","createStage","quality","size","color","width","height","initClientHost","PlatformsManager","Promise","resolve","parseLoadResult","loadResult","result","status","GameEngine","Types","AppLoadStatus","Failure","error","message","stack","finalizeLoad","loadingSucceed","current","volume","getVolume","Utils","isNullOrUndefined","CurrentStepNo","HtmlController","setSound","Scaling","resizeRoot","versionBuild","DataManager","updateGameDataFromModule","GameData","DataBuildVersion","configureGameData","canPlay","GameManager","startGame","gameReady","loadingScreen","document","getElementById","element","classList","add","innerHTML","Strings","Languages","getRid","sendPlayerLogError","_loadResult","SplashScreen","showError","gameFailed","onblur","onfocus","PIXI","sound","muteAll","openGameRoundHistory","isGUI","StringUtils","isNullOrEmpty","GUIHistoryUrl","openGameRoundHistoryHome","toLowerCase","RCIHistoryUrl","gotoHistory","target","handleOpenHistoryPage","open","gameKey","getGameKey","timeZoneOffset","Date","getTimezoneOffset","serverUrl","token","substring","lang","historyUrl","openGameRoundHistoryFromUrl","HistoryUrl","beforeExit","leaveGame","handleStringsLoadCompleted","RidElements","length","updateText","languageElements","querySelectorAll","setAttribute","GameAppBase","json","ArgValidator","ensureIsNotNullOrUndefined","_json","getWithValues","tmpl","_i","value","regexFormat","matchCnt","exec","idx","replace","match","val","equals","NumberUtils","valueToNumber","UseCoins","ShowDecimalPlaces","GameApp_1","_current","clientHost","setHideAmounts","hideAmounts","updateSharedSetting","toString","getHideAmounts","HideAmountsEnabled","getSharedSetting","parseBoolean","AppContextBase","Pool_1","ModuleManager_1","Focus_1","PageVisibilityHandler_1","Renderer","textureManager","updateTexture","texture","_noWebGL","getTextureByResourceId","utils","TextureCache","resourcePath","PreloaderInfo","instance","getResourcePathById","Logger","errorGroup","handleLostWebGLContext","_contextLost","Autoplay","PageVisibilityHandler","Enabled","pauseAll","dispatchActionAllowed","GameModules","ModuleManager","disableChannelModule","showDialog","special","canvasId","Width","Height","canvas","loading","rendererOptions","view","roundPixels","backgroundColor","autoDetectRenderer","CanvasRenderer","settings","GC_MODE","GC_MODES","AUTO","body","appendChild","Stage","Container","scale","Focus","focus","handle","style","display","addEventListener","redrawStage","addChild","_pauseAnimations","AnimationFramePool","draw","render","requestAnimationFrame","UpdatedTextures","FPS","baseStage","freespinStage","registerFrame","frame","pool","framesPool","frame_uid","push","unregisterFrame","splice","frame_draw","FrameTimer_1","Jackpot_1","EventEmitter","Root","Screen","IsIOs","test","navigator","platform","IsIOsTablet","IsIOsWebview","indexedDB","IOsResizeTimer","CreateFrameTimer","on","FrameTimerEvents","Complete","bind","Emitter","onresize","onResizeRoot","isSafari","isIosChrome","setupIOs","event","ClientHostType","diff","timeStamp","lastTouch","preventDefault","stopPropagation","evt","MouseEvent","dispatchEvent","setTimeout","delayed","preventEmitEvent","inIframe","stop","start","IOsResizeDelay","overflow","Plugins","StatusBar","updateHeight","sab","parseInt","getComputedStyle","documentElement","getPropertyValue","innerHeight","StatusBarHeight","innerWidth","StatusBarWidth","ratioWidth","LeftPanelWidth","ratioHeight","Jackpot","top","left","transform","enabledPortrait","UsePortraitMode","remove","portraitRatio","PortraitRatio","PortraitMobileRatio","contains","scrollTop","emit","EventResize","isPortrait","preventPropagation","preventMovePropagation","parentElement","ua","userAgent","vendor","self","onLoadComplete","log","s","AnimationFrame_1","FrameTimerPool_1","Progress","FrameTimer","timerName","_useFrames","_playing","_paused","valueOrDefault","generateUuid","_timerName","_uid","_timerCounter","_finalTimerCounter","frame_onFrame","conclude","super2","duration","_this","FrameTimerPool","frame_stop","count","_startTime","getTime","_timer","paused","pause","clearTimeout","currentTime","isPlaying","unpause","frame_start","AnimationFrameEventEmitter","Types_1","AnimationFrameClass","Superclass","sc","AnimationFrame","_frame_stopped","_frame_starting","_frame_stopping","_frame_uid","Error","frame_name","frame_log","msg","isError","EventEmmiterClass","AnimationFrameBaseElement","BaseElementClass","BaseElement_1","EventEmmiterDescendant","BaseElementDescendant","BaseElement","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","ShapeElement_1","ComponentTypes_1","Tweens_1","Attributes_1","_cloned","__destroyed","componentName","getDebugInfo","_tweenEngine","set","engine","__componentName__","destroy","assertDestroyed","_destroyOptions","internalDestroy","children","Tweens","removeTweens","clone","removeAndDestroyChildren","_removeAndDestroyChildren","destroyOptions","removeChildren","method","markAsCloned","_markAsCloned","node","createByNode","updateByNode","name","nodeName","alpha","Attributes","assignFloatAttribute","BaseElementAttributes","ALPHA","hasAttribute","ROTATION","rotation","degrees2radians","parseFloat","getAttribute","START_ROTATION","Math","floor","random","x","SCALE_X","y","SCALE_Y","SCALE","position","assignIntAttribute","X","Y","pivot","PIVOT_X","PIVOT_Y","visible","assignBooleanAttribute","VISIBLE","MASK","maskGraphics","ShapeElement","shapeNode","createElement","MASK_DRAW","MASK_X","MASK_Y","MASK_WIDTH","MASK_HEIGHT","MASK_PATH","mask","BITMAP_MASK","image","maskSprite","Sprite","BITMAP_MASK_X","BITMAP_MASK_Y","BITMAP_MASK_SHOW","TWEEN_ENGINE","runAlphaTween","runPositionTween","runRotationTween","runScaleTween","runTween","logError","ALPHA_TWEEN","alphaTween","alphaTweenPosition","assignStringAttribute","ALPHA_TWEEN_POSITION","ALPHA_TWEEN_POSITION_VALUE","RELATIVE","ArrayUtils","numberArray","map","SMOOTH","alphas","tweenEase","ALPHA_TWEEN_EASE","tweenDuration","ALPHA_TWEEN_DURATION","tweenDelay","ALPHA_TWEEN_DELAY","tweenLoop","ALPHA_TWEEN_LOOP","POSITION_TWEEN_X","POSITION_TWEEN_Y","positionTweenX","positionTweenY","positionTweenPosition","POSITION_TWEEN_POSITION","POSITION_TWEEN_POSITION_VALUE","tweenX","tweenY","POSITION_TWEEN_EASE","POSITION_TWEEN_DURATION","POSITION_TWEEN_DELAY","POSITION_TWEEN_LOOP","positionTween","ROTATION_TWEEN","rotationTween","degrees","ROTATION_TWEEN_EASE","ROTATION_TWEEN_DURATION","ROTATION_TWEEN_DELAY","ROTATION_TWEEN_LOOP","scaleTweenX","scaleTweenY","scaleTween","tweenValues","SCALE_TWEEN_X","SCALE_TWEEN_Y","SCALE_TWEEN","_getPointsFromPointsAttribute","scaleXValue","scaleYValue","SCALE_TWEEN_EASE","SCALE_TWEEN_DURATION","SCALE_TWEEN_DELAY","SCALE_TWEEN_LOOP","TweensAttributes","TWEEN","tweens","stringArray","TWEEN_VALUES","tween","formatTweenValues","TWEEN_DURATION","TWEEN_EASE","TWEEN_DELAY","TWEEN_LOOP","customTween","values","property","split","radians2degrees","getGlobalPosition","pointsString","valuesPair","PI","radians","maskEnabled","enable","removeChild","engineComponent","ComponentTypes","DisplayObject","ABSOLUTE","DEBUG","ROTATION_TWEEN_DEGREES","StyleManager_1","_color","_draw","_nodeDefinition","ShapeElementAttributes","STYLE","StyleManager","Styles","COLOR","_fillAlpha","FILL_ALPHA","_lineWidth","LINE_WIDTH","_lineColor","LINE_COLOR","WIDTH","_width","HEIGHT","_height","RADIUS","_radius","DRAW","clear","beginFill","lineStyle","endFill","drawRect","objectType","drawCircle","drawEllipse","path","points","point","Point","drawPolygon","multiple","arraysNumbers","drawRoundedRect","next","firstElementChild","shapeElement","nextElementSibling","tint","blendMode","Graphics","Element","HtmlElement","PlayList","Song","Style","HtmlStyle","Controller","LinkedElement","ActionSet","GsapEffects_1","registerTween","uid","tweenArray","getRegisteredTweens","keys","removeTweenFromRegistry","restartTweens","restart","object","undefined","customProperty","RemoveAllTweensExclude","indexOf","kill","_a","skew","shift","GsapEffects","alphaTween_Tweenlite","alphaTween_TimelineLite","objectName","Array","positionTween_Tweenlite","positionTween_TimelineLite","rotationTween_Tweenlite","rotationTween_TimelineLite","scaleTween_Tweenlite","scaleTween_TimelineLite","prepareTweenData","tween_Tweenlite","tween_TimelineLite","data","stringValueToFormatedArray","numberValueToFormatedArray","TickTime","partDuration","defaultValue","isArray","gsap_1","CustomEase_1","isNaN","tweenDurationPerPart","getEaseing","tweenPaused","alphaTimeline","TimelineLite","useFrames","UseFrames","delay","forEach","to","ease","callbackFunction","callbackType","eventCallback","callbackParams","callbackScope","alphaTweenLite","TweenLite","positionTimeline","positionTweenLite","tweenBezier","bezier","rotationTimeline","degree","rotationTweenLite","scaleTimeline","tweenValue","scaleTweenLite","tweenProperty","timeline","tweenlite","SlowMo","config","RoughEase","strength","template","Bounce","easeIn","taper","randomize","clamp","CustomEase","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","_gsScope","_gsQueue","_gsDefine","Animation","SimpleTimeline","_slice","l","_applyCycle","vars","targets","alt","cycle","TweenMax","_cycle","_yoyo","yoyo","_repeat","repeat","_repeatDelay","repeatDelay","_dirty","_tinyNum","TweenLiteInternals","_internals","_isSelector","isSelector","_isArray","_blankArray","version","_gc","killTweensOf","killDelayedCallsTo","getTweensOf","lagSmoothing","ticker","invalidate","_uncache","updateTo","resetDuration","curRatio","ratio","immediate","immediateRender","_timeline","_time","_enabled","insert","_delay","_initted","_notifyPluginsOfEnabled","_firstPT","_onPluginEvent","_duration","prevTime","_totalTime","_init","endValue","inv","pt","_next","time","suppressEvents","force","isComplete","callback","cycleDuration","type","pow","rawPrevTime","totalDur","totalDuration","_totalDuration","prevTotalTime","prevCycle","prevRawPrevTime","_rawPrevTime","_ease","_calcEnd","getRatio","_reversed","autoRemoveChildren","lazy","_active","_easeType","_easePower","_onUpdate","_callback","lazyTweens","_lazy","_startAt","onStart","f","t","onRepeat","from","runBackwards","fromTo","fromVars","toVars","startAt","staggerTo","allTo","stagger","onCompleteAll","onCompleteAllParams","onCompleteAllScope","copy","finalComplete","onComplete","onCompleteScope","fromCycle","selector","reverse","staggerFrom","allFrom","staggerFromTo","allFromTo","delayedCall","params","scope","onCompleteParams","onReverseComplete","onReverseCompleteParams","overwrite","isTweening","_getChildrenOf","includeTimelines","cnt","_first","getAllTweens","_rootTimeline","_rootFramesTimeline","killAll","complete","delayedCalls","timelines","isDC","allTrue","totalTime","killChildTweensOf","parent","curParent","tl","tweenLookup","parentNode","_changePause","resumeAll","globalTimeScale","_timeScale","progress","totalProgress","_labels","smoothChildTiming","_sortChildren","onUpdate","v","join","_swapSelfInParams","align","_lazyTweens","_lazyRender","lazyRender","_globals","globals","_copy","_pauseCallback","pauseCallback","_forcingPlayhead","_hasPause","Engine","_parseTimeOrLabel","exportRoot","ignoreDelayedCalls","root","_remove","curTime","child","beforeRawTime","addLabel","rawTime","_pauseTime","removeLabel","skipDisable","last","_last","append","offsetOrLabel","insertMultiple","appendMultiple","label","addPause","getLabelTime","timeOrLabel","appendIfAbsent","ignore","charAt","Number","substr","seek","gotoAndPlay","play","gotoAndStop","internalForce","pauseTween","prevStart","prevTimeScale","prevPaused","_hasPausedChild","_prev","endTime","getChildren","nested","ignoreBeforeTime","disabled","_contains","recent","_recent","shiftChildren","amount","adjustLabels","labels","_kill","changed","enabled","ignoreTimeline","uncapped","timeScale","prev","end","max","usesFrames","Ease","TimelineMax","_easeNone","addCallback","removeCallback","removePause","tweenTo","abs","tweenFromTo","fromPosition","toPosition","dur","_locked","backwards","wrap","recTotalTime","recCycle","recRawPrevTime","recTime","getActive","all","isActive","getLabelAfter","getLabelsArray","getLabelBefore","sort","currentLabel","_RAD2DEG","_r1","_r2","_r3","_corProps","Segment","da","ca","ba","_correlate","cubicToQuadratic","q1","q2","q3","q4","mab","mbc","mcd","mabc","mbcd","m8","_calculateControlPoints","curviness","quad","basic","correlate","p1","p2","p3","seg","m1","m2","mm","cp2","qb","r1","r2","ii","cp1","_parseAnchors","prepend","tmp","bezierThrough","quadratic","j","seamless","obj","props","first","unshift","sqrt","_parseBezierData","cur","inc","soft","_addCubicLengths","steps","resolution","d1","bez","index","_parseLengthData","lengths","total","threshold","segments","curLS","BezierPlugin","plugin","propName","priority","API","init","_target","_func","_mod","_props","_timeRes","timeResolution","isFunc","second","autoRotate","orientToBezier","_autoRotate","_overwriteProps","_beziers","_segCount","ld","_length","_lengths","_segments","_l1","_li","_s1","_si","_l2","_curSeg","_s2","_prec","_initialRotations","_startRatio","curIndex","curSeg","func","notStart","b2","x1","y1","x2","y2","conv","ar","atan2","_autoCSS","quadraticToCubic","_cssRegister","CSSPlugin","_parseToProxy","_setPluginRatio","CSSPropTween","_registerComplexSpecialProp","parser","prop","cssp","pluginValues","setRatio","_transform","_enableTransforms","_gsTransform","proxy","_onInitTween","_tween","lookup","op","TweenPlugin","_hasPriority","_suffixMap","_cs","_specialProps","defaultTransformPerspective","defaultSkewType","defaultSmoothOrigin","suffixMap","right","bottom","fontSize","padding","margin","perspective","lineHeight","_autoRound","_reqSafariFix","_isSafari","_isFirefox","_isSafariLT6","_ieVers","_index","_numExp","_relNumExp","_valuesExp","_NaNExp","_suffixExp","_opacityExp","_opacityValExp","_alphaFilterExp","_rgbhslExp","_capsExp","_camelExp","_urlExp","_camelFunc","g","toUpperCase","_horizExp","_ieGetMatrixExp","_ieSetMatrixExp","_commasOutsideParenExp","_complexExp","_DEG2RAD","_forcePT","_doc","_createElement","createElementNS","_tempDiv","_tempImg","_agent","_supportsOpacity","RegExp","$1","cssText","opacity","_getIEOpacity","currentStyle","filter","_log","console","_prefixCSS","_prefix","_checkPropPrefix","_getComputedStyle","defaultView","_getStyle","getStyle","cs","calc","dflt","rv","_convertToPixels","convertToPixels","sfx","recurse","pix","cache","horiz","neg","precise","clientWidth","clientHeight","_gsCache","cacheWidths","_calculateOffset","calculateOffset","dim","_getAllStyles","tr","_transformPropCSS","_transformProp","_getTransform","skewX","scaleX","scaleY","_supports3D","z","rotationX","rotationY","scaleZ","filters","_cssDif","s1","s2","forceLookup","mpt","difs","MiniPropTween","firstMPT","_dimensions","_margins","_getDimension","getBBox","_isSVG","offsetWidth","offsetHeight","_parsePosition","recObj","oxp","oyp","oxr","oyr","ox","oy","_parseChange","_parseVal","_parseAngle","directionalEnd","cap","dif","isRelative","min","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","fuchsia","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","h","_parseColor","parseColor","toHSL","wasHSL","_formatColors","temp","colors","_colorExp","charIndex","parsed","colorStringFilter","combined","lastIndex","defaultStringFilter","_getFormatter","clr","collapsible","multi","formatter","dColor","dVals","pfx","delim","numVals","dSfx","vals","_getEdgeParser","parse","str","round","mod","xs0","xs1","shallow","xp","firstPT","bpt","oldForce","rxp","n","pr","_addNonTweeningNumericPT","overwriteProp","_parseComplex","parseComplex","clrs","xi","ni","bv","ev","bnums","enums","bn","hasAlpha","cv","useHSL","ea","autoRound","appendXtra","xfirst","pad","SpecialProp","prefix","format","keyword","defaults","_registerPluginProp","pluginName","pluginClass","com","greensock","plugins","bi","ei","kwd","registerSpecialProp","onInitTween","useSVGTransformAttr","_useSVGTransformAttr","_transformProps","_transformOriginProp","Transform","force3D","defaultForce3D","_SVGElement","SVGElement","_createSVG","container","attributes","reg","setAttributeNS","_docElement","_forceSVGTransformAttr","svg","rect","chrome","getBoundingClientRect","_parseSVGOrigin","local","decoratee","absolute","smoothOrigin","skipRecord","xOrigin","yOrigin","tx","ty","determinant","xOriginOld","yOriginOld","tm","_getMatrix","_identity2DMatrix","xOffset","yOffset","_canGetBBox","getCTM","force2D","isDefault","dec","none","rnd","_removeProp","getTransform","rec","invX","zOrigin","t1","t2","t3","cos","sin","a11","a21","a31","a41","a12","a22","a32","a42","a13","a23","a33","a14","a24","a34","a43","angle","k","removeAttribute","_setIETransformRatio","ang","dx","dy","w","clip","xPercent","yPercent","marg","mult","ieOffsetX","ieOffsetY","_setTransformRatio","set3DTransformRatio","setTransformRatio","comma","zero","sx","sy","sz","isSVG","skewType","tan","skewY","parsingProp","_lastParsedTransform","swapFunc","has3D","hasChange","dr","matrix","originalGSTransform","endRotations","transformOriginString","parseTransform","orig","transformOrigin","svgOrigin","transformPerspective","directionalRotation","shortRotation","rotationZ","shortRotationX","shortRotationY","_transformType","ea1","es2","bs2","bs","es","en","esfx","bsfx","rel","hn","vn","em","pct","overlap","src","bp","backgroundPositionX","backgroundPositionY","clipTop","clipRight","clipBottom","clipLeft","bw","_setIEOpacityRatio","skip","xn1","isAutoAlpha","zoom","removeProperty","_setClassNameRatio","_gsClassPT","difData","cnpt","cnptLookup","_classNamePT","_setClearPropsRatio","clearTransform","transformParse","nodeType","_vars","pt2","zIndex","tpt","threeD","_addLazySet","className","WebkitBackfaceVisibility","_linkCSSP","pop","sp","isStr","strictUnits","xs2","xn2","xs3","xn3","xs4","xn4","xs5","lazySet","autoAlpha","visibility","_getChildStyles","childNodes","cascadeTo","results","_reservedProps","reservedProps","_targets","activate","RoundPropsPlugin","_roundLinkedList","blob","_onInitAllProps","rp","roundProps","rpt","_propLookup","pg","_add","_addTween","finals","useRadians","SteppedEase","_createElastic","GreenSockGlobals","gs","_2PI","_HALF_PI","_class","_create","C","_easeReg","register","_wrap","EaseOut","EaseIn","EaseInOut","aliases","easeOut","easeInOut","EasePoint","gap","_createBack","overshoot","_p1","_p2","Back","linearRatio","power","yoyoMode","_p","_p3","bump","pnt","invert","def","amplitude","period","asin","find","moduleName","_exports","_ticker","_tickerActive","_namespace","ns","_emptyFunc","array","_defLookup","Definition","dependencies","gsClass","_classes","check","cl","hasModule","missing","_baseParams","extraParams","_type","_power","_params","_easeMap","names","types","na","ta","easing","pw","linear","Linear","swing","Quad","EventDispatcher","_listeners","_eventTarget","useParam","listener","list","wake","up","removeEventListener","_reqAnimFrame","_cancelAnimFrame","cancelAnimationFrame","_getTime","now","_lastUpdate","fps","useRAF","_fps","_req","_id","_gap","_nextTime","_self","_useRAF","_lagThreshold","_adjustedLag","_tickWord","_tick","manual","dispatch","elapsed","tick","adjustedLag","sleep","visibilityState","Ticker","events","reversed","_checkTimeout","atTime","resume","includeDelay","startTime","includeSelf","includeRepeats","pauseTime","raw","prevTween","st","targ","jquery","_overwrite","_overwriteLookup","defaultOverwrite","_siblings","_register","_applyOverwrite","css","_plugins","_overwrittenProps","defaultEase","autoSleep","$","jQuery","_lazyLookup","_numbersExp","_setRatio","fp","_blobDif","startNums","endNums","num","nonNumbers","currentNum","_applyPT","_addPropTween","funcParam","stringFilter","getterName","blobDif","_tweenLookup","_tweenLookupNum","onUpdateParams","onUpdateScope","onStartParams","onStartScope","onReverseCompleteScope","onRepeatParams","onRepeatScope","easeParams","autoCSS","onOverwrite","auto","concurrent","allOnStart","preexisting","true","false","_nextGCFrame","_updateRoot","scrub","_gsTweenID","_onOverwrite","overwrittenTween","overwritingTween","killedProps","mode","siblings","curTween","globalStart","overlaps","oCount","zeroDur","_checkOverlap","reference","ts","initPlugins","startVars","_initProps","propLookup","overwrittenProps","_priority","_onDisable","_onEnable","killProps","record","killed","simultaneousOverwrite","_tempKill","onlyActive","_propName","_roundProps","overwriteProps","initAll","Plugin","__webpack_amd_options__","_svgPathExp","_scientific","_needsParsingExp","_bezierError","_getRatio","setData","_bezierToPoints","x3","y3","x4","y4","x12","y12","x23","y23","x34","y34","x123","y123","x234","y234","x1234","y1234","d2","d3","_pathDataToBezier","command","segment","startX","startY","prevCommand","difX","difY","relativeX","relativeY","elements","closed","_findMinimum","_normalize","originY","nx","cx","cy","a1","a2","prevPoint","precision","closest","fast","rawBezier","_createOwnEasing","dataNeonOut","dataNeonIn","dataNeonLost","cleanup","HtmlStyles","parseElements","startNode","nodes","getNodesList","EngineComponentFactory","isTypeOf","nodeList","attribute","radix","item","JackpotCounter_1","JackpotHistoryDialog_1","JackpotGame_1","ProgressiveBonusId","WidgetRoot","GameRoot","BonusId","createCounters","createHistoryDialogs","bindElements","getBonusInfo","initJackpotDataReceived","setBonusId","clearJackpot","reinitialize","Offline","refreshBonusInfo","refreshCounters","show","Counters","CountersCount","createCurrency","getDataById","DataCurrency","HistoryDialogs","updateDataWithCurrency","getHeight","jackpotWidget","jackpotGame","getCustomContent","createLogo","holder","counter","JackpotCounter","contentUrl","logo","background","dialog","JackpotHistoryDialog","createBonusGame","JackpotGame","refreshWithReset","useResetAnim","RefreshTimerId","jackpotDataReceive","refreshBonusInfoInMiniGame","overrideLevelData","overrideLeveldata","refreshBonusInfoWithWinValue","fromMiniGame","code","refreshBonusInfoBeforeSpin","spinCallback","getBonusInfoBeforeSpin","customData","sendProgressiveBonusGetInfoRequest","then","response","RefreshInterval","refreshInterval","levels","timestamp","winOverride","updateReponseData","assign","lastWinAmount","_loop_1","getRoot","toggleHistoryDialog","i_1","showHistoryDialog","this_1","hideHistoryDialog","closeAllHistoryDialogs","closeDialog","dispatchAction","TouchEvent","openDialog","isOpen","initMiniGame","autostart","startMiniGame","hasStartedGame","hasActiveGame","hasInitializedGame","hasMiniGame","countersInError","gameResponse","ticket","disableMiniGameAutostart","disableAutostart","waitForMiniGameInitialization","ProgressiveBonusTicketConstraint","tag","rootElem","elem","hasError","success","StaticContentUrl","theme","ProgressiveBonusTheme","UseJackpotLocalization","JackpotTheme","staticContentUrl","spbFolder","img","resetCallback","DecimalPlaces","createBaseLayout","createDigits","createDecimalPoint","currentCounterValue","previousCounterValue","lastWinValue","lastWinCount","overridedLastWinValue","winAnimationDelay","winAnimationFinished","mainTween","digitTween","winFromMinigame","lastUpdateTime","reset","level","currency","jackpotCurrencyLetters","getElementsByClassName","textContent","digitsHolder","digitsArray","digits","digit","Length","UseThousandsSeparator","hasThousandsOffset","decimalDot","serverTimestamp","currentData","nextValue","normalizeValue","nextDate","nextTimestamp","previousValue","oldValuesReset","MaxNextTimeDiff","inError","removeError","isCounting","refresh","resetMainTween","resetDigitTween","errorResetAnim","oldValue","formatValue","newValue","animateDigits","DigitAnimDuration","checkError","hasWin","resetDigitsTween","MinResetAnimCount","useBitmap","checkFirstDiff","shuffle","firstDigitIndex","oldDigit","newDigit","animateDigit","fromValue","toValue","direction","setTransformY","setDigitValue","LeadingZeroLetter","initWinAnimation","resetDigitsToBasePosition","availableTime_1","idleValue","availableTime","onRefreshTweenUpdate","refreshCounter","resetAnimCount","resetCounter","resetFinished","length_1","currentLastWin","currentWinCount","winCount","startWinAnimation","showWinAnimation","WinFromMinigameAnimDuration","WinAnimDuration","forceWinValue","formattedValue","formatText","FormatMoney","normalizedValue","leading","onlyCallback","currentValue","rid","ridType","text","filterText","ridFilter","FilterNoZero","JackpotData_1","historyDataElements","initData","createDataSections","initialized","section","dataHolder","closeBtn","createDataElement","JackpotData","DataCode","createTextElement","DataHighestWinDate","DataHighestWinAmount","assingData","DataWinCount","DataLastWinDate","DataLastWinAmount","showWins","lastData","lastWinDate","highestWinAmount","highestWinDate","dataId","date","zerosPad","getDate","getMonth","getFullYear","winSections","titleSections","noWinSections","DataNoWins","DataTicker","DataRoundId","DataBalanceReal","DataBalanceBonus","DataBalanceTotal","DataBalanceRealDenom","DataBalanceBonusDenom","DataBalanceTotalDenom","DataDenomination","DataCurrentWin","DataTotalWin","DataTotalWinDenom","DataCoinSize","DataCointCount","DataPaylineCount","DataBet","DataBetPosition","DataGambleCurrentWin","DataGambleColorWin","DataGambleCurrentWinDenom","DataGambleColorWinDenom","DataAutoplayCount","DataFreeSpinTotalWin","DataFreeSpinTotalWinDenom","DataFreeSpinsCount","DataFreeSpinsRemainingCount","DataFreeSpinsWonCount","DataGambleAttempts","DataHelpGameLimit","DataHelpGambleLimit","DataHelpGambleCountLimit","DataHelpRTP","DataHelpMaxPayoutProbability","DataHelpMaxPayoutFrequency","DataHelpMinBet","DataHelpMaxBet","DataHelpVersion","DataExpirationResolveHours","DataFrbRemainginCount","DataFrbAssignedCount","DataFrbRulesLink","DataFrbValidTo","DataFrbExpiryTime","DataFrbWin","DataGameTitle","DataHelpJackpotVisibleLimit","DataHelpJackpotQualifyingBetsMin","DataHelpJackpotQualifyingBetsMax","BetManager_1","BalanceManager_1","UserAction_1","QuickspinDialog_1","FreeRoundBonus_1","GameEvents","ClientHost","_autoplay","AutoplayStarted","autoplayStarted","autoplayFinished","autoplayCount","AutoplayCount","autoplayLossLimit","AutoplayLossLimit","autoplayWinLimit","AutoplayWinLimit","controlAutoplay","setAutoplay","autoplayEnabled","AutoplayModeEnabled","AutoplayEnabled","quickspinEnabled","gameEnableQuickSpin","QuickspinEnabled","GameEnableReelsStop","MinGameRoundDuration","GameRoundMinSpan","GameEnableQuickSpin","quickspinSet","updateDataElement","UserAction","ActionQuickspinToggle","quickSpinEnabled","quickspinStopped","_quickstopTimes","QuickSpinDialogCount","timeDiff","QuickSpinDecayDelay","QuickspinDialog","vibrationSet","GameEnableVibration","VibrationEnabled","ActionVibrationToggle","updateResponseData","GameRoundClosed","status_1","limits","GameLimit","isLastFrb","winPayMethod","BalanceManager","setBalance","initResponse","BetManager","initializeBet","configureHelpData","balance","bonus","Bet","changeBetColor","baseResponse","customBetsData","updateDataElements","roundId","GameRoundIdVisible","updateTotalWin","poolingBalance","offline","updateCustomBetsData","betAmount","reelsData","screen","reels","getCustomBetDataForCurrentBetAmount","customBetData","inFrb","totalWin","CoinSize","devide","updateTotalGain","calculate","customWin","totalGain","TOTAL_GAIN","bet","FreeRoundBonus","subtract","statusBar","getInstance","resize","hasActiveWidget","DisplayCurrencies","rawPair","parsedPair","_gameData","customValue","getServerTime","sendServerTimerRequest","serverTimeReceived","UseServerTime","ApplicationGatewayUrl","utcTime","serverTimeResponseTimestamp","clockSync","serverTimeOffset","serverTime","getFormattedTime","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","getTimeData","getUTCTime","machineLocalTimeZone","utcResponseTimestamp","lastResponseDiff","toISOString","getGameTime","utcTimestamp","offset","getNonUTCGameTime","showTime","UIShowTime","today","timeData","hFixed","mFixed","showSessionTime","GUIShowSessionTime","sec_num","hoursS","minutesS","secondsS","pre","StatusBarMessage","StatusBarData","gameTitle","gameHeadline","hideDataElements","FRBGameRoundMinSpan","showDataElements","hasSettingsMenu","gambleResponse","HelpDataGameLimit","HelpShowGameLimit","HelpDataGambleLimit","rtp","totalRtp","progressiveBonusRtp","ridTotalRTP","statusBarRtp","HelpShowRTP","setDataElements","RTP","HelpShowGameModuleVersion","MaxPayoutProbability","HelpShowMaxPayoutProbabilityFrequency","HelpShowMaxPayoutProbability","ProgressiveBonusHelpShowCumulativeWinLimit","TotalBets","ProgressiveBonusContributeOnlyQualified","ProgressiveBonusVisibleMax","ProgressiveBonusHelpShowMaxVisibleLimit","ProgressiveBonusMinQualifyingBet","ProgressiveBonusMaxQualifyingBet","AutoplayMode","ShowHomeButton","ShowGameRoundsHistory","ExpirationResolveHours","cls","cleanUpElements","hideSettingsButton","addTrustedUserAction","actionId","TrustedUserActions","groupActionId","getGroupActionId","getTrustedUserAction","ActionElements","btn","stopAutoplayIfLossLimit","lossLimit","updateLossLimit","win","toNumber","stopAutoplayIfWinLimit","gameState","state","messageId","unpaidWin","gameRoundId","gameEvent","PrimaryGameEscrow","PrimaryGameStarted","PrimaryGameEnded","SecondaryGameEntered","SecondaryGameEscrow","SecondaryGameStarted","GameCollectEscrow","SecondaryGameCollectEscrow","SecondaryGameEnded","GameEnded","SecondaryGameHalved","AutoPlayStarted","AutoPlayEnded","GamePlayDisabled","GamePlayEnabled","GameLoaded","BonusGameEnded","BonusGameEscrow","BonusGameStarted","BonusGameTriggered","notifyEventFromGame","Collectable","AutoplayAfterGamble","BackSoundsPlayingFromGame","ResponsibleDialog1_1","MessageManager_1","SimilarGames_1","LimitDialog_1","NotificationManager_1","Paytable_1","SessionTimer_1","FreespinsModel_1","BaseModel_1","app","onErrorResponse","errorReceived","isBackgroundMusicEnabled","getBackgroundMusic","NotificationManager","_app","connectModules","wasInitialized","showGame","Paytable","openAtStart","disableUi","setupGame","parseScreensForModules","parseResponses","initModules","SimilarGames","showFreeRounds","requestSend","initializeFreeRounds","initReceived","softInit","softInitReceived","collect","Gamble","canExit","_collectModule","collectReceived","GUIShowSessionTimeStartValue","suspendInitReceived","MessageManager","postpone","continueInitReceived","hideSplashScreen","gameDataLoaded","PlayerTokenId","HomeUrl","ClientToken","GameName","SessionData","SessionBalance","TotalWin","TotalBet","CurrencyCode","Balance","real","rendererType","freespinsEnabled","freespinsActive","Base","LimitDialog","restoreGameRound","openOther","continueCollectReceived","collectInModule","apiError","requestName","requestInfo","request","localizedText","httpStatusCode","errorId","actions","ignoreShowDialog","hasMessages","callbackFnc","isFatalError","resource","messages","ultraSpecial","collectPartial","spbSufix","SessionTimer","prepareData","error_code_for_platforms","disconnect","handleShowErrorDialog","BaseModel","LastScreen","Freespins","FreespinsModel","freespinsResponse","collectable","gambleActive","endMsgDisplayed","ResponsibleDialog1","showResponsibleDialog1OnCollect","responsibleDialog1Data","disableBase","disableGamble","resetWinAnimator","exitOnCollect","showResponsibleDialog1","disablePlay","disableOnCollect","disableGamePlay","enablePlay","dontEnableGamePlay","openConfirmationDialog","dialogData","closeResponsibleDialog1","BetHigherThanMinDialog_1","SpinBet","BetType","hideValues","betSettings","totalBets","coins","Coins","lastBet","betType","Total","totalBet","getDenomination","changeDenom","changeDefaultDenom","coinSize","coinCount","CoinCount","multiply","recalculateDenomBalance","initNewBet","BetHigherThanMinDialog","getGameStartedWithoutFeature","updateBetPosition","DenomContainer","addValues","CoinCountContainer","BetContainer","changeBet","decrease","enableUi","unHideValues","cycleCoinCount","maxCoinCount","findMax","jj","maxBetAction","sortNumber","lowestDenom","setDenomination","ResetCoinCountOnDenomChange","found","changeBetByValue","changeCoinCount","coinSizes","credit","minBet","maxBet","HideButtons","unHide","hide","createBetForSpin","GameStatuses","GameModuleStatus","registerGameModule","_gameModules","registerChannelModule","_channelModules","allChannelsHaveController","addController","initIntro","gambleEnabled","AutoplayGambleEnabled","Active","enableGamble","startGamble","outroModule","enableFreespins","startFreespins","endFreespins","disable","animate","introModule","long","intro","outro","action","cycleHelp","setAutoplayAfterFeature","tf","primaryGameEnded","toggleModuleSounds","toggleSounds","resetSceneAsOnCollect","getActiveGameModules","activeModulesArray","Disabled","CashierDialog_1","fixBalance","winDenom","realDenom","betDenom","denom","totalRealBalance","totalBalance","hasCredit","onSpin","CashierDialog","opened","onClose","ShowCashierMessage","clientError","PollCredit","_poolBalance","refreshBalance","forced","balanceReceived","balanceUpdated","Dialog_1","PlayList_1","dialogOpened","_element","_cashierButton","onclick","onCashier","_refreshButton","CashierMessageShowRefreshBalanceButton","onRefreshBalance","_closeButton","_closeButtonIcon","Dialog","DisabledClass","CashierUrl","gotoCasier","reason","handleOpenCashierPage","otherOfferes","_elementHeading","_elementCode","_elementText","_elementButton","_elementButtonReload","_elementCustomButtons","_elementInfo","_elementError","onClickError","onClickRefresh","_customData","errorString","errorValue","InfoClass","ErrorClass","handleCustomActions","setOpenedStatus","dialogRequest","errorMessageTitle","exitHandler","endGame","gameReloading","handleGameReload","reload","hideAllButtons","buttons","imageWidthCorrection","baseWidth","baseFontSize","maxWidth","currentAction","button","currentWidth","getButtonTextWidth","onClickContinue","onClickClose","onClickHistory","onClickReload","onClickRestore","newFontSize","firstChild","spinContinue","FreeRoundBonusDialog_1","FreeRoundBonusIcon_1","activateOffer","FreeRoundBonusIcon","showIcon","declineOffer","FreeRoundBonusDialog","endFreeRounds","DialogContentOther","DialogContentOther2","DialogContentOtherList","DialogContentOtherList2","DialogContentNew","DialogContentActive","DialogContentEnd","DialogContentExpired","ConfirmationDialog","DialogButtonPlay","DialogButtonPostPone","DialogButtonDeny","DialogButtonOk","DialogButtonYes","DialogButtonNo","bindEvents","setupFRBDialogByConfiguration","remainingCount","assignedCount","valid","termsUrl","rulesLink","hideAllContents","closeMenu","showElement","isConfirmationDialogOpened","refillOtherGames","ShowSimilarGames","hasFeature","setConfirmationDialog","setPointerEventsButtons","pointerEvents","hideDialog","hideElement","onPlay","onPostPone","onDeny","onOk","onYes","onNo","disableElement","revalidate","enableGame","restoreDialog","finishFreeRounds","revalidateOtherGames","otherOffersKeys","countDownDate","distance","createItem","gameCode","noClick","itemHolder","itemLoading","itemLoadingIcon","itemLogo","selectGame","newUrl_1","gameChange","handleChangeGame","FRBShowDenyButton","hideFRBDenyButton","FRBShowPostponeButton","hideFRBPostPoneButton","infoMsg","dialogActive","sendFreeRoundsOffersRequest","getCurrentOfferReceived","err","featureStarted","setOfferId","sendFreeRoundsActivateOfferRequest","activateOfferReceived","hideAllIcons","sendFreeRoundsDeclineOfferRequest","declineOfferReceived","refreshCurrentOffers","featureInit","countDown","playing","frbSpin","reopenFreeRounds","validTo","countDownOther","featureFinished","remainingFrbCount","roundsAssigned","roundsPlayed","roundsStarted","featureName","expiredFreeRounds","currentOffer","winType","hasBuyFeature","buyFeatureName","otherOffers","days","hasNewActiveOffer","updateRemainingCount","canInitDynamicFRB","softInitialize","enabledUi","isDisabled","disableActiveIcon","enableActiveIcon","IconNew","IconActive","toggleCumulative","handleIconClick","onNew","onActive","isDis","SoundManager_1","addToPlayList","song","Songs","SoundManager","fadeIn","loop","fadeOut","stopAll","stopAllInGroup","group","toggle","toggleGroup","setVolume","restoreVolume","playList","PlayLists","panel","icons","lastCount","createPanel","canShow","hasActiveIcon","panelWidth","showPeakHelpIcon","peakHelp","querySelector","peakActive","peakHelpIcon","peakHelpIconBackground","backgroundImage","peakHelpIconBackgroundSize","initRevalidateTimeout","panelParentId","content","createContentPlaceholder","createIconsPlaceholder","contentHolder","iconsHolder","updateCount","currentCount","slots","portraitMaxIconCount","landscapeMaxIconCount","iconsSlotsCount","iconsCountAvailable","isMultiIcon","iconChildren","iconChild","canNotifyBetHigherThanMin","_wasOpened","_reopenDialog","getMinBet","_isOpened","canOpenDialog","NotifyBetHigherThanMin","isMinBet","_gameStartedWithFeature","gameFeatureActive","_gameStarted","RCIInfo","getRealityCheckInfo","openDialogContinue","info","onContinue","elementWin","elementLost","_continueButton","_historyButton","onHistory","RCIShowHistoryButton","onGameRoundHistory","interval","toFixed","elementRciIntervalInfo","RCIIntervalInfo","title","getElementsByTagName","buttonsHolder","step","updateDialogData","resetDialogData","removeAllButtons","createButton","actionContinue","actionExit","actionHistory","actionReload","actionCashier","actionLink","sendPluginMessage","BaseActions_1","controller","_spinDelayed","spinReceivedDelayed","spin","GameRequest","callBackFcn","spinReceived","roundStarted","freeRound","BaseActions","ActionSpin","_delayedResponse","currentWin","ActionSpinStop","ActionAutoplay","ActionAutoplayStop","ActionBetPlus","ActionBetMinus","ActionBetCycle","ActionMaxBet","ActionBaseCollect","ActionSelectPayline","ActionDenomSelect","ActionDenomSelectValue","ActionCoinCountSelect","ActionCoinCountSelectValue","ActionBetSelect","ActionBetSelectValue","registerActionElement","registerUiActionElement","UiActionElements","registerUiDispatchElement","UiDispatchElements","registerActionsHoldersElement","ActionsHoldersElements","registerUiActionDispatchElement","UiActionDispatchElements","registerDataElement","DataElements","updateUI","SoundContainer","dispatchUiAction","setLevel","ActionToggleSound","ele","volumeAll","gameCloseMenu","playSound","ContainerElementsById","autoplaySelector","recalculateHeight","autoplayDialog","ActionExit","clearListeners","disableAllUiDispatchers","changeUiAcionDispatchers","ActionMenuOn","ActionMenuOff","ActionPaytableOff","ActionHelpOff","ActionHelpTerminal","ActionGameRoundReport","ActionToggleBet","toggleUiAction","ActionTogglePaytable","ActionHelpOn","updateDataValues","ActionToggleMenu","ActionToggleMenuBack","gotoHelp","ActionPaytableOn","gotoPaytable","ActionSwitchControls","ActionSettingsOn","gotoSettings","ActionSettingsOff","ActionQuickspinDialogOff","currencyNoZero","setText","gameData","parsedValue","toggleElementsByClass","updateActionElements","actionData","changeState","updateActionElement","Configurations","SHOW_BONUS_BALANCE","initializeDialog","_opened","_container","quickSpinDialog","hidden","visibilityChange","mozHidden","msHidden","webkitHidden","isIos","Timer","context","audioContext","unmuteAll","Configuration_1","prewPageButton","nextPageButton","prewPage","nextPage","_pages","_paginations","Configuration","maxValue","payoutPage","attrCounts","attrValues","counts","PAYTABLE_COUNT_PREFIX","PAYTABLE_COUNT_POSTFIX","getPaytableValue","PaytableUseValue","i_2","updateFontSize","customContent","valueSepratator","valueArray","PAYTABLE_VALUE_PREFIX","PAYTABLE_VALUE_POSTFIX","conversionRate","_defaultWidth","_defaultFontSize","defaultWidth","_maxBet","whiteSpace","fontConversion","activeIndex","disableElementsAndReturnActive","setPage","page","scrollIntoView","newGameRound","shouldOpen","hasBeenDisplayed","dipatchElementId","dipatchElement","openPayoutPage","isSpin","ShowPaytableAtStart","GeneralConfigurationAttributes","REEL_COUNT","REEL_X","REEL_Y","SYMBOL_WIDTH","SYMBOL_HEIGHT","SYMBOL_BOTTOM_COUNT","SYMBOL_TOP_COUNT","VISIBLE_SYMBOL_COUNT","WINS_MULTIPLIERS","WINS_ANIMATIONS","ReelConfigurationAttributes","FORCE_SPEED","FORCE_SPEED_MULTIPLER","PRE_ROLL","PRE_ROLL_SPEED","POST_ROLL","POST_ROLL_SPEED","SPEED","MachineConfigurationAttributes","MIN_SPIN_ROTATION","MIN_SPIN_ROTATION_LONG","START_DELAY","STOP_DELAY","REEL_CONFIGURATION","TEASINGS","TEASING_SYMBOLS","TEASING_STOP_DELAY","_paging","_actualPage","getSimilarGamesList","_holder","_pagesHolder","_pagingHolder","createPages","SimilarGamesList","filterArray","createNextPage","createPageItem","exitBtn","ShowExitGameButton","newPage","newPageChild","newPaging","setItemLogo","disableAllPages","_openTimer","_limit","_closeTimer","WebSocketClient_1","WebSocketClientHub_1","webSocketClientHub","WebSocketClientHub","webSocketClient","WebSocketClient","bindMessages","closeSession","updateStatusBar","onReceiveMessage","messageReceiver","sendMessage","methodName","isConnectionEstablished","addMessage","invokeCommand","reject","receiver","application","service","updateServerTime","connected","hubConnection","GameClientHub","GameClientHubConnection","getToken","callbackFn","ClientHubConnection","ClientHub","UpdateTokenRequest","stackedMessages","connectionEstablished","clientHubConnection","webSocketsInitialized","sendStackedMessages","jwtToken","tokenChanged","currentToken","updateToken","createIntervals","intervalHolder","disableAllButtons","intervals","intervalIndex","resetRealityCheck","onActionContinueReceived","onActionExitReceived","buttonMinus","buttonPlus","changeInterval","intervalDisplay","innerText","insertBefore","increase","htmlInstance","_htmlInstance","suspendInit","_autoCloseTimerFinished","_continueEnabled","autoCloseTimer","AutoCloseDelay","onInitReceived","_initResponse","GameStatus","Closed","showContinueButton","createSplashScreen","startReceived","freespin","endFreespin","endReceived","AmbientBackground_1","createAnimations","stopTimer","spinStop","buzzerTimer","buzzerTimeFinished","showWinDelay","updateWin","gameInitialized","gameStarted","showHandPayDialog","assetsLoaded","startAfterLoad","reel","hintContainer","arrows","arrow","firework","titles","winContainer","initSymbols","createSymbols","sendInitBonusGameRequest","initFinished","sendSpinBonusGameRequest","spinStart","fromMachine","fromServer","stoppedFromMachine","stoppedFromServer","isStopping","closeMiniGame","outroFinished","setBaseGameSound","clearJackpotGameResponse","clearJackpotGame","lastEvent","currentOffset","currentSymbols","currentSymbolsHeight","sendMaxPowerBonusInitRequest","sendMaxPowerBonusSpinRequest","setGameData","bounceCounters","BuzzerDuration","introFinished","AmbientBackground","changeAmbientBackground","setStageVisibility","createSpinBtn","updateBalance","openHandPayDialog","game","CollectOnUnCalculatedWin","stripIndex","Strip","rootHeight","getElementHeight","symbolId","symbolsHeight","SymbolsCount","symbol","SpinPreRollSymbolCount","addSymbolToReel","getReelOffset","updateSymbols","updatePostRollSymbols","spinRoll","winSymbolId","symbols","MiddleSymbolIndex","finishStripIndex","SpinPostRollSymbolCount","spinPostRoll","removeOffScreenSymbols","spinBtn","MinSpinDuration","spinPreRoll","nextOffset","symbolStepOffsets","getSymbolStepOffsets","SpinPreRollDuration","onSpinPostRollUpdate","getSpinRollDuration","createLevelDataOverride","spinComplete","SpinPostRollDuration","limit","createWinValue","collected","uncollectedWin","collectedWin","newOffset","updateCallback","winValue","childs","charCodeAt","SpinRollSpeed","middleSymbolIndex","appendBefore","createSymbol","symbolHolder","userControls","parent_1","handleSpaceStart","winData","_lastObjectRendered","keyCode","winSymbol","blured","countersHolder","countersLogo","extension","newBackgroundName","base","transition","transitionDuration","transitionDelay","onBlur","onFocus","onClick","onFullscreenChange","FullscreenOnClick","handleFullscreen","requestFullscreen","webkitRequestFullscreen","clicked","fullscreen","fullscreenElement","MuteOnLostFocus","XmlResource_1","CanvasManager_1","ConfigurationManager_1","HtmlManager_1","ActionManager_1","DOCUMENT_TYPE","PIXI_EVENTS","Load","RESOURCE_FLAGS","_resourceLoader","PIXIResourceLoader","_audioResourceLoader","addLoadingElementFunction","fnc","_loadingElements","isGroupLoaded","_loadedGroups","XmlResource","prepareFileList","resources","gambleIsDisabled","lodash","gambleResource","resourceHasFlag","removeRes","loadCompleted","onLoadCompleted","loadSucceed","onUpdateProgress","loadProgress","onProgressUpdate","loadGroupCompleted","debugGroup","handleGroupError","parseCurrentElements","xmlItems","Items","tempElements","el","prio","orderBy","ConfigurationManager","ActionManager","parseActionSets","CanvasManager","HtmlManager","emptyItems","PreloaderProviderBase","audio","loader","loaders","Loader","_hasPreloaderVersionId","_loadingErrorCount","_loadingErrorFiles","_resourcesWithNoId","handleBeforeLoad","handleLoad","handleError","handleComplete","handleGroupComplete","updateTextureAfterLoad","_loadCompletedCallback","_updatedTextures","_preloaderVersionId","xmlsResourceLoaded","acceptedAsXmlResource","beforeResourcesLoad","use","isImage","baseTexture","hasLoaded","imageUrl","noId","setTimeStamp","xhrType","xmlRoot","_loadSingleCompletedCallback","exists","soundSprite","isEmpty","sprites","addSprites","spritemap","removeAllListeners","loadError","loadAllGroupsCompleted","loadResources","resolveSingleCallback","resolveCallback","CanvasFallback","preloader","versionId","once","PreloaderResourceLoader","Resource_1","items","doc","Resource","ActionSet_1","ElementsToLink","noGamble","_addElementToParent","_handleElementController","controllerAttribute","elementController","startInitialization","actionElements","cases","RegisterActionSet","actionSetNode","elementNode","actionCase","ActionSetAttributes","CASE","ActionSets","DispatchEvent","linkedElement","classAttribute","GambleUserControls_1","DesktopBaseUserControls_1","MobileBaseUserControls_1","DesktopFreespinsUserControls_1","MobileFreespinsUserControls_1","customRoot","DesktopBaseUserControls","MobileBaseUserControls","GambleUserControls","DesktopFreespinsUserControls","MobileFreespinsUserControls","UserControls_1","GambleActions_1","GambleController_1","Color","_collectedWinValue","_collectDelay","_allowStart","_gambleTickerDefault","_gambleTickerHalveLimit","_gambleTickerSoftLimit","_gambleTickerGameLimit","registerActions","_screen","_controller","GambleController","StartReceived","SelectReceived","selectReceived","HalveReceived","halveReceived","WinCalculationFinished","winCalculationFinished","AllWinsFinished","allWinsFinished","Lose","lose","IntroFinished","OutroFinished","GambleActions","ActionGambleStart","ActionGambleRed","ActionGambleBlack","ActionGambleHalve","ActionGambleCollect","roundEnded","balanceAfter","changeWinBox","prepareNewGameRound","colorWin","getActionState","halve","select","Black","Red","playCollectSound","softLimit","halveEnabled","changeActionStates","getAllActions","changeActionState","_actions","disableAllActions","UserControls","HtmlContainerElement_1","_key","getComponentName","_uncollectedWin","_collectedWin","flashBet","_betValue","_betLabel","_freeBetLabel","_betLabelFS","_freeBetLabelFS","_betPlus","_betMinus","HtmlContainerElement","HtmlElement_1","childrenHolderClass","childrenClass","actionEnabled","_overId","_clickId","CustomClick","onCustomClick","Over","onOver","Out","onOut","dataset","touchScroll","enableScrollOnTouchmove","allowScrollUp","allowScrollDown","lastY","scrollHeight","touches","pageY","down","recalculateChildrenHeight","holders","paddingTop","paddingBottom","holdersChildren","itemHeight","TouchStart","TouchEnd","tagName","texts","setName","owner","_setName","_owner","_batchUpdatesActive","_readonly","registerAction","batchUpdates","invokeOnChange","_onChange","onChange","checkForReadonly","beginBatchUpdates","endBatchUpdates","hasChanges","updateFn","notExist","actionsOrValue","actionNames","hasValue","exist","readonly","cloned","Controller_1","GambleModel_1","GambleView_1","GambleView","_view","_model","GambleModel","gambleSelect","gambleHalve","ContainerElement_1","_revealTimer","reveal","_revealBackTimer","revealBack","_winTimer","_loseTimer","_introDelayTimer","introDelayed","_introSoundTimer","introSoundStart","_outroDelayTimer","outroDelayed","_gambleControls","_gambleActualCard","_gambleCardBack","_gambleWin","_gambleWin2","_gambleRedBtn","_gambleBlackBtn","_previousCards","card","previousCards","currentCard","reAnimate","_actualColor","ContainerElement","ContainerElementAttributes","elementMask","GameActions_1","BaseController_1","_autoplayAfterFeature","_wasCalclulated","_unColectedWin","_machineStopped","longIntro","_featureAutoStarted","_afterWinDelay","_autoplayDelay","autoplayDelayed","_unColectedWinDelay","unColectedWinDelay","_userControls","_fsDiamondsPayout","_featureAutoStartTimer","featureAutoStartDelayed","BaseController","SpinReceived","MachineStopped","machineStopped","BeforeMachineStopped","beforeMachineStopped","_userControls_supreme","_paytable","hasFRBRestriction","GameActions","ActionSpinOrStop","autoplay","autoplayStop","checkJackpotMiniGame","balanceTotal","inSpin","canSpinOnCollect","spinStarted","ShowMaxBetMessage","MaxButton","updateReelsByBetChange","spinEnded","startFeatureAutoStart","timer","prepareJackpotMiniGame","MaxBetEnabled","roundInit","self_1","_b","preDuration","FeatureAutoPlay","BaseView_1","BaseView","disableLogo","selectPayline","WinAnimator_1","Machine_1","FreespinsView_1","LayoutManager_1","LayoutContainerElement_1","_wasFinished","currentBet","_introDelay","_outroDelay","_wildDelay","machineStoppedDelayed","_devilDelay","machineStoppedDelayed1","_symbolMoEDelay","symbolMoEDelay","_symbolBonusDelay","symbolBonusDelay","_gambleDelay","gambleOutro","LayoutManager","_symbols","_paylines","_machine","_winAnimator","FsMessageBox","Logo","Transition","_gambleTransition","_gambleSceneHolder","getChildElementByName","setupGambleSceneElement","Machine","ReelStopped","onReelStopped","WinAnimator","FinishWinCalculation","finishWinCalculation","FinishWinAnimator","finishWinAnimator","showSymbols","createSuns","setupPaylinesContainer","setStoppedSymbolsArray","_inGamble","goToCase","showInitWins","wins","wasFinished","inHighWins","resetTimer","FreespinsView","actualReelStopped","isMoESymbol","clearTopSuns","addElement","getChildIndex","LayoutContainerElement","Payline_1","PaylinesDefinitions_1","Symbol_1","TimelineElement_1","ImageTextCounterElement_1","WinAnimatorAttributes","SOUNDS","CONFIGS","configs","configure","reelCount","reelX","reelY","symbolCount","symbolWidth","symbolHeight","multipliers","animationNames","paylines","noWinSymbolsContainer","symbolsContainer","winFrameContainer","cycleContainer","paylineNumbers","sunContainer","hwContainer","createTimer","createPaylines","reelIndex","currentReels","removeCurrentSymbol","addCurrentSymbol","addTransformSymbol","currentWins","resetAnimations","currentMultiplierIndex","showCustomWin","showFirstWins","startTimer","Idle","getInitialIdleDelay","allSymbolsGoToCase","Symbol","CaseNowin","allPaylinesGoToCase","Payline","winSymbolsGoToCase","CaseWin","winPaylineGoToCase","CaseFirstWin","startAnimation","finishFirstWins","currentCycle","cycleWins","showCustomInitWin","showFirstInitWins","finishFirstInitWins","isFirst","cycleStep","CaseCycle","CycleWins","getCycleWinsDelayWithCorrection","winDelay","getCycleWinsDelay","cycleDate","showLastSymbols","CaseNormal","CaseEmpty","showPaylinesLabel","lastMultiplierIndex","currentAnimationIndex","currentAnimationFinished","stopAnimation","timerStatus","onTimerComplete","idle","currentSuns","winFrames","getSymbol","offsetX","offsetY","symbolIndex","bindSymbols","addWildMultiplier","removeSunMultiplier","hasEnoughScatters","_currentWinScatterSymbols","returnSymbol","caseType","noWin","allowSymbolGoToCase","winIndex","useValue","trigger","WinTrigger","winSymbolsGoToCaseAsPayline","Scatter","winSymbolsGoToCaseAsScatter","Way","winSymbolsGoToCaseAsWay","winSymbolsGoToCaseAsCustom","ImageTextCounterElement","Round","PaylinesDefinitions","getPaylineDefinitionsById","paylineId","paylineDefinition","CaseSingleWin","animationsContainer","animations","animation","onAnimationFinished","TimelineElement","AnimationComplete","onAnimationComplete","getAnimationIndex","goToOutro","getCurrentCase","CaseIdle","getIdleDelay","getIdleActiveElementsCount","SwitchElement_1","PaylineAttributes","Z_INDEX","CaseSelect","CaseSingleCycle","SwitchElement","SwitchStyle_1","AnimationElement_1","ParticleElement_1","ProtonElement_1","RopeElement_1","dynamicTime","center","_symbolWidth","_symbolHeight","getAllChildElements","hasElements","SwitchElementAttributes","CLONE","CustomCase","hasCase","getCase","emitEvent","animationComplete","FinishAnimation","arr","ParticleElement","ProtonElement","RopeElement","SwitchStyleCaseAttributes","NEXT_CASE","TIMER","multiplier","RANDOM","getRandomDurationMultiplier","HANDLER","AnimationElement","dataArray","getRandom","setDynamicTime","DEBUG_INFO","Style_1","SwitchStyle","nextCase","CustomUtils_1","textureArray","Texture","EMPTY","shared","update","UPDATE_PRIORITY","HIGH","_startFrame","_randomStartFrame","deltaTime","AnimationElementAttributes","STYLE2","_style","startFrame","endFrame","_endFrame","_stop","textures","_movieClipComplete","animationSpeed","BLEND_MODES","NORMAL","_reverse","speed","CustomUtils","getBlendMode","TWEEN_PERSISTENT","RANDOM_START_FRAME","TINT","DynamicTint","ANCHOR","anchor","SKEW_X","SKEW_Y","CONTINUE","_continue","playMe","PLAY","REVERSE","STOP","showMe","SHOW_FRAME","frameNumber","getMovieClip","bezierX","bezierY","POSITION_TWEEN_BEZIER_X","POSITION_TWEEN_BEZIER_Y","debugInfo","changeAnimationSpeed","_printDebugInfo","extras","AnimatedSprite","TextElement","TextElementAttributes","FONT","fontFamily","TEXT","TEXT_ALIGN","TEXT_BASELINE","SIZE","fill","Text","TEXT_ALIGN_VALUE","LEFT","CENTER","RIGHT","TEXT_BASELINE_VALUE","MIDDLE","BOTTOM","hasFeatureGame","WinType","Feature","getBaseCurrentWin","withoutFeatureWin","updateSpineData","spineData","spineTextData","JSON","stringify","ImageElement_1","ParticleStyle_1","_pool","addParticles","_blendMode","_created","_stopping","_emitOnce","_preGenerate","_startType","_maxEmit","ParticleElementAttributes","EMIT_ONCE","PRE_GENERATE","BLEND_MODE","_styleName","createParticles","MAX_EMIT","START_TYPE","START","STOPPING","stopping","RESET","CLEAR","images","calculateElements","particle","createParticle","createParticleResource","setupParticle","setupPosition","addBehaviour","resourceId","getRandomResource","ImageElement","localBounds","getLocalBounds","setVisibility","usedInPool","positionZone","ParticleStyle","ZoneRectangle","centerX","centerY","innerCenterX","innerX","innerCenterY","innerY","correctX","ZoneTarget","ZoneLine","ZoneEllipse","radianDegrees","startAngle","radian","innerRadius","radius","minInnerRadius","radiusB","minInnerRadiusB","innerRadiusB","setTargetElement","particleLife","maxLife","minLife","addPathBehaviour","addScaleBehaviour","addRotationBehaviour","addAlphaBehaviour","life","addRectanglePathBehavior","addEllipsePathBehavior","pathValues","valueX","valueY","randomX","randomY","removeFromPool","minRadius","minRadiusB","finalX","finalY","scaleValues","scalePoints","scaleValue","rotationValues","alphaValues","tabActive","getFromPool","getFreeParticleIndex","emitOnce","startType","removeFromStage","removeAllFromPool","EXTEND_STYLE","IMAGE","ATTR_COUNT","ATTR_TIME","ATTR_MIN","ATTR_MAX","ATTR_FROM_FRAME","ATTR_IMAGES","ATTR_TYPE","ATTR_X","ATTR_Y","ATTR_RANDOM_X","ATTR_RANDOM_Y","ATTR_WIDTH","ATTR_HEIGHT","ATTR_RADIUS","ATTR_POSITION_RADIUS","ATTR_RANDOM_POSITION_ANGLE","ATTR_MIN_RADIUS","ATTR_INNER_RADIUS","ATTR_ANGLE","ATTR_SHOW_ANGLE","ATTR_VALUES","ATTR_VALUE","IMAGE_MASK","ImageElementAttributes","FROM_FRAME","FRAME","frameStr","ANIMATION","anchorPoints","runBitmapMaskScaleTween","getBlendModeByString","SKEW","spr","CustomTints","POSITION_TWEEN_BEZIER_AUTOROTATE","autorotate","autorotateArray","maskObject","_assertDestroyed","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","LUMINOSITY","ShockwaveOptions","_count","_minLife","_maxLife","_images","_subParticleStyle","_positionZone","_pathValues","_scaleValues","_rotationValues","_alphaValues","extendStyle","parseChildrenNodes","NodeCount","initializeCount","NodeLife","initializeLife","NodeImages","initializeImages","NodePosition","initializePosition","NodePath","initializePath","NodeScale","initializeScale","NodeRotation","initializeRotation","NodeAlpha","initializeAlpha","elementsPerSecond","elementsWithLife","ParticleStyleAttributes","ATTR_RANDOM_START_FRAME","ATTR_SUB_PARTICLE_STYLE","ATTR_INNER_X","ATTR_INNER_Y","ATTR_INNER_WIDTH","ATTR_INNER_HEIGHT","ZoneDynamic","ATTR_RADIUS_B","ATTR_MIN_RADIUS_B","ATTR_MIN_INNER_RADIUS","ATTR_INNER_RADIUS_B","ATTR_MIN_INNER_RADIUS_B","ATTR_START_ANGLE","NodeValue","ElementsReserve","protonProto","_animationName","_emitting","_animationSpeed","_emitters","_proton","onProtonUpdate","onParticleCreated","onParticleUpdate","onParticleDead","transformSprite","alphaDead","scaleDead","_tint","emitter","Proton","emitterNext","rate","Rate","rateStart","rateEnd","Span","createInitializers","createBehaviours","addEmitter","_renderer","isFrameStopped","removeChilds","emmiter0","sprite","_textures","Pool","textureCacheIds","particleSprite","dead","removeEmitter","imageTarget","addImageTarget","addInitialize","addAnimationTarget","addRadius","mass","addMass","addLife","addPosition","velocity","addVelocity","arrTextures","ImageTarget","fromFrame","Mass","Radius","Life","zone","Position","getZone","rpan","thapan","rpanSpan","thapanSpan","Velocity","rectZoneX","rectZoneY","rectZoneWidth","rectZoneHeight","RectZone","lineZoneX","lineZoneY","lineZoneWidth","lineZoneHeight","lineZoneDirection","LineZone","circleZoneX","circleZoneY","circleZoneRadius","CircleZone","addAlpha","addScale","rotate","addRotate","addColor","crossZone","addCrossZone","randomDrift","addRandomDrift","gravity","addGravity","age","applyBehaviour","energy","Alpha","startSpan","endSpan","Scale","Rotate","driftX","driftY","RandomDrift","Gravity","endArr","endColor","hexColor","CrossZone","_rope","_pointsCount","_bezierPoints","_pointsData","_pointsDataBuffer","_animationStyle","_frame","_curviness","_isPlaying","_ropeLength","_increment","_parts","_strength","_smooth","RopeElementAttributes","POINTS_COUNT","CURVINESS","TIME","POINTS","pointsData","formatPoints","bezierData","getBezierStepPoints","textureName","_texture","mesh","Rope","canvasPadding","addPoints","getPoints","XMLpointsData","REVERSE_POINTS","GLOBAL_POINTS","updatePoints","ROPE_LENGTH","INCREMENT","PARTS","STRENGTH","smooth","currentFrame","updateMeshPoints","useGlobal","regex","pointArray","formatPoint","segmentLength","pointPerSegment","bezierStepPoints","sum","dataX","dataY","cX","bX","aX","cY","bY","aY","initializePaylineDefinitions","paylineGroupId","_paylineGroupsDefinitions","ImageTextElement_1","hasWinFrame","SymbolAttributes","OFFSET_X","OFFSET_Y","OFFSET","TYPE","ID","configurate","addSunMultiplier","mlp","removeWildMultiplier","CaseTease","Teas","switchAmounts","setAmount","prefixName","amountElements","getAmountElements","bitmapText","realign","resetAmount","ImageTextElement","CaseRotation","CaseBlur","CaseImpact","CaseImpactWithTease","textAlign","ImageTextElementAttributes","textBaseline","TOP","font","BitmapText","Song_1","ParticleGroupElement_1","_frameCounter","_loop","_elements","TimelineElementAttributes","LOOP","frames","_framesArray","childOfChild","startAnimate","_winValue","ParticleGroupElement","stopAnimate","outroSounds","node2","SongAttributes","SONG","FADEIN","FADEOUT","goToFrame","childElementCount","framesSounds","EMIT","finalValue","ImageTextCounterElementAttributes","FROM","TO","DURATION","ROUND","ACTION","ACTION_VALUE","FORCE","onCountTo","alias","ALIAS","GROUP","VOLUME","pan","PAN","fade","fadeStartTime","fadeEndTime","StereoFilter","playInstance","stopInstance","getFadeInVolume","getFadeOutVolume","onFadeIn","onFadeOut","off","restoredVolume","ParticleAnimationElement_1","DynamicKey","startSelected","resetSelected","ParticleAnimationElement","particleKey","setSpeed","elementsCount","elementsResources","prepareResources","imageElement","addLayoutElement","LayoutContainerElementAttributes","PORTRAIT_STYLE","portraitStyle","portraitStyleNodeList","styleNodeList","onLayoutChange","updateChildElements","previousStyleNodeList","elementStyle","previousElementStyle","updateDefaultValues","previousNode","usePlatform","configured","ratioIntervals","layoutElement","LayoutElements","getSwitchPrefix","SwitchPrefix","getPreviousSwitchPrefix","PreviousSwitchPrefix","LayoutManagerAttributes","MOBILE","DESKTOP","LayoutManagerConfigurationAttributes","USE_PLATFORM","RATIO_INTERVALS","screenWidth","screenHeight","allowedPortraitLayout","allowedCanvasPortraitLayout","ExtraPortraitClass","changeCanvasSize","updateLayoutElements","screen_1","canvasRatio","USE_ORIENTATION","PORTRAIT","LANDSCAPE","Reel_1","Reel2_1","WinAnimator2_1","_longTeasing","isFreespins","_reels","_stoppedSymbolsArray","_stoppedFromServer","_stoppedFromMachine","_stoppedFromLegal","_stoppedReelIndexes","_stopTimer","_reelsContainer","MachineAttributes","_reelCount","_reelX","_reelY","_visibleSymbolCount","_minSpinRotation","_minSpinRotationLong","_startDelay","_stopDelay","_reelConfiguration","disabledMask","createReels","Reel2","valuesStrip","Reel","teasing","teasingTop","freespins","_background","_teasing","_teasingTop","longRotation","useTransform","enabledMask","Tease","WinAnimator2","Force","_startSpinTime","verifyMinGameRoundDurationConditions","legal","_legalStopTimer","getLegalRemainingSpinDuration","calcLongTeasing","_canTease1","_canTease2","_canTease3","_canTease4","checkTeasing","calculateRemainingSpinDuration","minTime","reelStopDuration","getReelStopDuration","getStopDuration","tease","retrigger","wasRetrigger","freeSpins","spinTease","backupMask","preRoll","preRollSpeed","postRoll","postRollSpeed","forceSpeed","previousReel","nextReel","strip","positionX","positionY","symbolTopCount","symbolBottomCount","startDelay","stopDelay","onStopTimerComplete","shouldBeStopping","stoppingCounter","isTeasing","teasingSymbols","symbolCase","rollSpeed","customDelay","stoppingSymbols","updateReel","_baseSoundFlyByDelay","baseSoundFlyByDelay","bottomSymbols","topSymbols","symbolValue","useMultiplier","moveToTop","_currentPaylineId","_currentPaylineCount","_winLineIndex","_multiplierSoundCounter","middle","_paylinesContainerBottom","_paylinesContainerTop","_paylineNumbersRight","_multiplierNumber","_paylineNumbersMiddle","bonusTeasingContainer","_bonusTeasingContainer","topSuns","_paylineTimer","onPaylineTimer","_paylinesTimer","onPaylinesTimer","transofrmMOESound","reorderSymbols","calcScatters","allSunsToCase","hasScatterWin","showScatterWin","AlLWinsFinishedTimer","ShowScatterWinDuration","showPaylinesOnFirst","showFirstWinsDelayed","payoutId","symbolMultiplier","caseTypeScatter","caseTypeCustom","noAddChild","replaceWildWithScatter","wildSymbol","cleanUpSymbols","rtn","reorderWildSymbols","beforeWinPaylineGoToCase","transofrmSound","symbol1","symbol2","sunMoveSound","sun","newSunSound","overlay","isAddMlp","_showMessageEndFsDelay","showMessageEndFsDelay","_fsMessageStart","_fsMessageEnd","_fsMessageEndNoWin","isLastFreespin","_betSettings","FreespinsController_1","FreespinsActions_1","_featureAutoEnded","_retriggerDelay","retriggerDelayed","_featureAutoEndTimer","featureAutoEndDelayed","_featureAutoPlayTimer","featureAutoPlayDelayed","FreespinsController","EndReceived","FreespinsActions","ActionStart","ActionBack","back","startFeatureAutoPlay","startFeatureAutoEnd","showExpandWilds","totalCount","_dialog","handleAction","actionGroup","ClientHostActionGroup","Default","Terminal","handleShowDialog","ClientHostDialogType","Responsible1","errorCode","handleShowEndGameDialog","removeAll","outerHTML","handleCloseDialog","handleRefreshAccount","handleBlockRequest","blocked","handlePaytableRequest","handleAccountUpdate","forceShow","handleAutoplayAction","AutoplayAction","Stop","Enable","Disable","handleGameplayAction","GamePlayAction","terminateOnCollect","GameClientHostConsumerBase","getValue","GameDefinitionBase","key_GameEnableReelsStop","key_GameEnableQuickSpin","key_QuickSpinDialogCount","key_QuickSpinDecayDelay","key_MinGameRoundDuration","key_GameRoundMinSpan","key_FRBGameRoundMinSpan","key_UIShowTime","key_GUIShowSessionTime","key_GUIShowSessionTimeStartValue","key_UseServerTime","key_UseHtmlAudio","key_FullscreenOnClick","key_UseCoins","key_AutoplayGambleEnabled","key_AutoplayMode","key_AutoplayCounts","key_AutoplayLossLimit","key_AutoplaySingleWinLimit","key_HelpShowGameLimit","key_HelpShowRTP","key_ShowGameRoundsHistory","key_ExpirationResolveHours","key_AutoplayModeSpeed","key_HideAmountsEnabled","key_AutoplayModeEnabled","key_ResetCoinCountOnDenomChange","key_CollectOnUnCalculatedWin","key_PluginUrl","key_PluginOrigin","key_Platform","key_PollCredit","key_ShowDecimalPlaces","key_SelectorRolloutDuration","key_DisplayCurrencies","key_CanvasFallback","key_GameRoundIdVisible","key_MuteOnLostFocus","key_ShowCashierMessage","key_CashierMessageShowRefreshBalanceButton","key_CashierUrl","key_DisableUntrustedClicks","key_PlayerSessionReconnectionInterval","key_ApplicationGatewayUrl","key_EventTrackerEnabled","key_GameEnableVibration","key_SplashScreen","key_PaytableUseValue","key_GUI_HistoryUrl","key_RCI_HistoryUrl","key_RCI_Info","key_RCI_IntervalInfo","key_RCI_ShowHistoryButton","key_FeatureAutoPlay","key_FeatureAutoPick","key_ShowSimilarGames","key_SimilarGamesList","key_ShowExitGameButton","key_StaticContentUrl","key_ShowHomeButton","key_UsePortraitMode","key_FRBShowDenyButton","key_FRBShowPostponeButton","key_StatusBar","key_StatusBarData","key_ProgressiveBonusId","key_ProgressiveBonusContributeOnlyQualified","key_ProgressiveBonusMinQualifyingBet","key_ProgressiveBonusMaxQualifyingBet","key_ProgressiveBonusVisibleMax","key_ProgressiveBonusHelpShowMaxVisibleLimit","key_ProgressiveBonusHelpShowCumulativeWinLimit","key_ProgressiveBonusTicketConstraint","key_UseJackpotLocalization","key_ProgressiveBonusTheme","key_SessionBalance","key_TotalBet","key_TotalWin","key_PlayerTokenId","key_ClientToken","key_MaxBetEnabled","key_ShowMaxBetMessage","key_HelpShowGameModuleVersion","key_NotifyBetHigherThanMin","key_ShowPaytableAtStart","key_HelpShowMaxPayoutProbability","key_HelpShowMaxPayoutProbabilityFrequency","GameConfigurationBase","pluginOrigin","PluginOrigin","getTimeDataFnc","getGameTimeFnc","createEmitter","eventEmitter","AutoplayStop","stopAutoplay","RestoreAutoplay","autoplayData","restoreAutoplay","ResizeGame","resizeGame","RefreshBalance","GamePlayStop","disableChannel","gamePlayStop","GamePlayResume","gamePlayResume","GamePlayFreeze","gamePlayFreeze","GamePlayUnfreeze","gamePlayUnfreeze","GameAudioEnable","gameAudioEnable","GameAudioMute","gameAudioMute","GameAudioSet","gameAudioSet","GameQuickSpin","gameQuickSpin","ShowHelp","showHelp","HideHelp","hideHelp","ToggleHelp","toggleHelp","ShowPaytable","showPaytable","HidePaytable","hidePaytable","TogglePaytable","togglePaytable","PlatformCloseMenu","platformCloseMenu","PlatformCloseGame","platformCloseGame","PlatformUpdateUI","platformUpdateUI","PlatformErrorMessageDismissed","platformErrorMessageDismissed","CreateNotification","createNotification","Platform","PluginUrl","clientHub","EventTrackerEnabled","BaseElementParticle","_positionTweenOnCreate","_scaleTweenOnCreate","_rotationTweenOnCreate","_alphaTweenOnCreate","BaseElementParticleAttributes","particles","ParticleContainer","BGParticleElement","circles","circlesData","connectionZoneWidth","connectionZoneHeight","startUpdate","BGParticleElementAttributes","startCount","speedX","speedY","lines","addChildAt","updateU","inZone","lineAlpha","lineWidth","lineColor","moveTo","lineTo","SPEED_X","SPEED_Y","ATTR_COUNTS","CONNECTED","CONNECTION_ZONE_HEIGHT","CONNECTION_ZONE_WIDTH","LINE_ALPHA","nodeAttributes","LinkedElementAttributes","LINKED_TO_ID","mainElement","Vibration_1","VibrationElement","VibrationElementAttributes","PATTERN","pattern","Vibration","vibrate","AnimationStyle","AnimationStyleAttributes","START_FRAME","END_FRAME","BGParticleElement_1","BGParticleStyle","_counts","_scale","_connected","_speedX","_speedY","_lineAlpha","_connectionZoneHeight","_connectionZoneWidth","NodeBehavior","initializeBehavior","scales","zoneWidth","zoneHeight","NodeName","ContainerStyle","ProtonStyle","ShapeStyle","ShapeStyleAttributes","TimelineStyle","SndResource","getSongById","Sounds","HtmlSplashScreen","RequiredLoadGroup","_initialize","_gameProgressBar","_gameProgressNumber","_gameContinueButton","progressBar","progressNumber","_keyboardEvent","onKeyUp","HtmlSvgElement","attributeName","getPrototypeOf","ImageTextElementAdaptive","maxMultiplier","currentScale","ImageTextElementAdaptiveAttributes","MAX_WIDTH","MAX_MULTIPLIER","getScaleByMaxMultiplier","getAdaptiveScale","maxSizedValue","originText","JavascriptElement","LayoutImageElement","verticalAlign","LayoutImageElementAttributes","V_ALIGN_OPTIONS","V_ALIGN","updatePosition","updateVerticalPosition","getBounds","LayoutShapeElement","relativeWidth","relativeHeight","redrawRect","LayoutSwitchElement","inPortraitMode","LayoutSwitchElementAttributes","baseStyle","sizeWidth","updateSize","sizeHeight","calculateCoverScale","screenWRatio","screenHRatio","currentCase","clearCaseLayoutPrefix","storeData","restoreData","tweenProgress","tweensArray","tempTimer","tempNextCase","tempTimerData","PortraitLayout","portraitProperties","landscapeProperties","inPortrait","parsePortraitLayoutStyles","parseLandscapeLayoutStyles","updateLayout","updateContainer","PortraitLayoutAttributes","MOVE_TO","containerId","containerIndex","cloneNode","SceneHolderElement","elementsHolder","parentContainer","HighWinSceneAttributes","USE_PARENT","blackList","BLACK_LIST","ADD_CHILDS","addChildsToElement","RETURN_CHILDS","addChildsToOriginalParent","hasAdded","origElement","setHolderParent","SoundElement","soundName","_reset","_scheduledPlay","_scheduledStop","_fadeInTime","_fadeOutTime","_startTimer","SoundElementAttributes","intValue","schedulePlay","FADE_IN","FADE_OUT","NAME","newName","scheduleStop","Paylines","setSpecialContainer","_specialContainer","_paylineIDs","goToWin","getPaylines","PaylinesSelector","Symbols","symbolsData","SymbolsAttributes","createSymbolsData","createObjectPool","caseElement","rotationBitmap","blurBitmap","_getBitmapByCaseElement","objectPool","objectContainer","HtmlBetSelectorContainerElement","_popup","block","createTimeout","_values","popupItem","onValueClick","popupItemValue","currentTarget","changeValue","clearTimeOut","timeout","SelectorRolloutDuration","HtmlBetSelectorContainerElement2","HtmlDenomContainerElement","HtmlButtonElement_1","HtmlHideButtonElement","_hideClass","Buttons","HtmlButtonElement","uiaction","setTestAttributes","Click","onTouchStart","onTouchEnd","MouseOver","onMouseOver","renameTestAttributeValue","isGamblePortraitButton","registerEvents","isTrusted","DisableUntrustedClicks","touchLockTimer","touchLock","HtmlLanuageContainerElement","_flags","languages","getAllowedLanguages","flag","getCurrentLanguage","changeLanguage","actual","setLanguage","HtmlSoundContainerElement","_levels","_levelsClasses","_soundButton","_backgroundSound","backgroundSoundChild","onBackgroundClick","isMuteVolumeAllowed","changeSoundButton","setBackgroundMusic","HtmlAutoplayItemButtonElement_1","HtmlAutoplayButtonElement","createBasicMode","createSimpleMode","createAdvancedMode","removeOtherMode","_simpleAutoplayCounts","AutoplayCounts","HtmlAutoplayItemButtonElement","HtmlAutoplayDialogContainerElement","_autoplayDialogCounts","_autoplayDialogLossLimit","_autoplayDialogWinLimit","_loss","_win","createCounts","createLossLimits","createWinLimits","_lossValueElement","_winValueElement","_button","runAutoplay","itemValue","onCountClick","onLossClick","AutoplaySingleWinLimit","onWinClick","resetCounts","resetLossLimits","resetWinLimits","enableCounts","enableLossLimits","enableWinLimits","removeNoLimit","noLimit","enabledNoLimit","calculatedValue","HtmlCanvasElement","HtmlCheckboxElement","checkbox","createCheckBox","onCheckbox","checked","HtmlCustomContainerElement","_withGamble","_withoutGamble","HtmlDataSliderElement","HtmlLabelElement","createLabel","toggleSwitch","htmlFor","HtmlText","HtmlStyle_1","HtmlContainerStyle","ios","PRECISION"],"mappings":";CACC,SAASA,EAAGC,GAAK,IAAI,GAAIC,KAAKD,GAAGD,EAAEE,GAAKD,EAAEC,IAAMC,KAAe,SAAUC,GCA1E,GAAAC,KAGA,SAAAC,qBAAAC,GAGA,GAAAF,EAAAE,GACA,MAAAF,GAAAE,GAAAC,OAGA,IAAAC,GAAAJ,EAAAE,IACAC,WACAE,GAAAH,EACAI,QAAA,EAUA,OANAP,GAAAG,GAAAK,KAAAH,EAAAD,QAAAC,IAAAD,QAAAF,qBAGAG,EAAAE,QAAA,EAGAF,EAAAD,QAcA,MATAF,qBAAAO,EAAAT,EAGAE,oBAAAQ,EAAAT,EAGAC,oBAAAS,EAAA,GAGAT,oBAAA,IDKW,SAASF,GAEnB,IAAI,GAAIF,KAAKE,GACZ,GAAGY,OAAOC,UAAUC,eAAeN,KAAKR,EAASF,GAChD,aAAcE,GAAQF,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJE,EAAQF,GAAM,SAASiB,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAIC,EAAKlB,EAAQe,EAAG,GACxC,OAAO,UAAUlB,EAAEsB,EAAET,GACpBQ,EAAGE,MAAMrB,MAAOF,EAAEsB,EAAET,GAAGW,OAAOL,MAE9BhB,EAAQF,GACV,MACD,SAECE,EAAQF,GAAKE,EAAQA,EAAQF,IAKhC,MAAOE,KAGF,SAASK,EAAQD,EAASF,GAE/BA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,GACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,KACpBA,EAAoB,IACpBG,EAAOD,QAAUF,EAAoB,KAKhC,SAASG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MEnPpFG,EAAAzB,EAOO,EAEPyB,GAAAC,mBAEA,IAyBIC,GAzBJC,EAAA5B,EAAuC,GACvC6B,EAAA7B,EAAiE,GACjE8B,EAAA9B,EAAwB,GACxB+B,EAAA/B,EAAgC,GAChCgC,EAAAhC,EAAkC,IAClCiC,EAAAjC,EAA0B,IAC1BkC,EAAAlC,EAAuC,KACvCmC,EAAAnC,EAA+B,KAC/BoC,EAAApC,EAAkC,KAClCqC,EAAArC,EAA2B,GAC3BsC,EAAAtC,EAAyB,IACzBuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5ByC,EAAAzC,EAA4B,IAC5B0C,EAAA1C,EAAiC,KACjC2C,EAAA3C,EAAuC,IACvC4C,EAAA5C,EAAwB,GACxB6C,EAAA7C,EAA+B,IAC/B8C,EAAA9C,EAA6B,IAS7B+C,EAAA,SAAAC,GAA6B5B,EAAA2B,QAAAC,EAA7B,SAAAD,WAA6BC,EAAA9B,MAAArB,KAAAoD,WAiT7B,MA7SkBF,SAAAG,KAAd,WAKI,GAAIC,GAAkBvB,EAAAwB,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EACrC,OAA5BL,EAAe,MAAQ,OACvBJ,QAAQU,SAAWN,EAAe,MAAQ,MAG9CN,EAAAa,eAAeC,aACfhC,EAAU,GAAIoB,SACdpB,EAAQiC,QAGZlD,OAAAmD,eAAkBd,QAAA,cFwObe,IExOL,WACI,MAAOnC,GAAQoC,aF0OdC,YAAY,EACZC,cAAc,IExOLlB,QAAAmB,KAAd,WAKI,MAJArC,GAAAsC,UAAUA,UAAUC,cACwB,IAAxC/B,EAAAgC,WAAWC,kBAAkBC,SAC7B1C,EAAAsC,UAAUA,UAAUK,WAAW,QAAUC,IAAKpC,EAAAgC,WAAWC,kBAAkBC,UAExE5C,EAAQuC,QAGLnB,QAAA2B,QAAd,WACI,MAAO/C,GAAQ+C,WAGL3B,oBAAd,WACI,MAAOpB,kBAGGoB,QAAA4B,kBAAd,WACI,MAAOhD,GAAQgD,qBAGT5B,QAAApC,UAAAiE,iBAAV,SAA2BC,GACvB,GAAIC,GAA4C,GAAIjD,GAAAkD,cAAcC,KAAKC,WAAWlC,QAAQmC,IAAKL,EAE/F,OADAlC,GAAAwC,uBAAuBxB,WAAWmB,GAC3BA,GAGD/B,QAAApC,UAAAyE,gBAAV,WACIrD,EAAAsD,gBAAgBD,mBAGVrC,QAAApC,UAAA2E,iBAAV,WACIvD,EAAAsD,gBAAgBC,oBAGVvC,QAAApC,UAAA4E,wBAAV,WACI,MAAO,IAAIvD,GAAAwD,mBAGLzC,QAAApC,UAAA8E,qBAAV,SAA+BC,GAC3B,MAAO,IAAIvD,GAAAwD,eAAeD,IAGpB3C,QAAApC,UAAAiF,wBAAV,SAAkCC,GAC9B,MAAO,IAAIzD,GAAA0D,kBAAkBD,IAGvB9C,QAAApC,UAAAoF,iBAAV,WACI,MAAO,IAAI1D,GAAAgC,WAAWxE,KAAKyE,kBAAmBzE,KAAKmG,iBAG7CjD,QAAApC,UAAAsF,yBAAV,WACI,MAAO,IAAI/D,GAAAgE,uBAAuBrG,OAG5BkD,QAAApC,UAAAwF,eAAV,WACInG,EAAQ,IAGF+C,QAAApC,UAAAyF,YAAV,SAAsBC,EAAiBC,GACnC,GAAIC,GAAQ,CACZxE,GAAAsD,gBAAgBe,YAAYE,EAAKE,MAAOF,EAAKG,OAAQF,EAAO,WAGtDxD,QAAApC,UAAA+F,eAAV,WAGI,MAFAhE,GAAAiE,iBAAiBnF,SAEVoF,QAAQC,WAGT9D,QAAApC,UAAAmG,gBAAV,SAA0BC,GACtB,GAAIC,GAAiB,IAarB,OAXkB,OAAdD,GACIA,EAAWE,QAAUpF,EAAAqF,WAAWC,MAAMC,cAAcC,SAC5B,MAApBN,EAAWO,QACXN,GACIO,QAASR,EAAWO,MAAMC,QAC1BC,MAAOT,EAAWO,MAAME,QAMjCR,GAGDjE,QAAApC,UAAA8G,aAAV,WACI,GAAI5H,KAAK6H,eAAgB,CACrB,GAAkB,MAAdrF,EAAAgC,YAA4C,MAAtBhC,EAAAgC,WAAWsD,QAAiB,CAClD,GAAIC,GAASvF,EAAAgC,WAAWsD,QAAQE,WAC3BpG,GAAAqG,MAAMC,kBAAkBH,IACpBnG,EAAAqG,MAAMC,kBAAkBH,EAAOI,gBAQhCzF,EAAA0F,eAAeC,SAASN,EAAOI,eAkBvCpF,EAAAuF,QAAQC,aAIZ,GAAIC,GAAe,EAanB,IAHA5F,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASC,iBAAkBJ,GAChE5F,EAAA6F,YAAYI,oBAER7G,EAAAsC,UAAUA,UAAUwE,QACpBnG,EAAAoG,YAAYC,UAAUhJ,KAAKkE,YAAalE,MACxCgC,EAAAsC,UAAUA,UAAU2E,gBACjB,CACH,GAAIC,GAAgBC,SAASC,eAAe,WACxCC,EAAuBF,SAASC,eAAe,iBAE9B,OAAjBF,GACAA,EAAcI,UAAUC,IAAI,UAEjB,MAAXF,IACAA,EAAQG,UAAYvH,EAAAwH,QAAQjJ,OACtB4B,EAAAsH,UAAUC,OAAO,aACjB,0CACNzG,QAAQ+B,WAAW2E,mBACf,uBACA5J,KAAKiH,gBAAgBjH,KAAK6J,eAIlC5G,EAAA6G,aAAaC,iBAEd,CACH/H,EAAAsC,UAAUA,UAAU0F,aACpBvG,OAAOwG,OAAS,KAChBxG,OAAOyG,QAAU,KACjBC,KAAKC,MAAMC,SAEX,IAAInB,GAAgBC,SAASC,eAAe,WACxCC,EAAuBF,SAASC,eAAe,iBAE9B,OAAjBF,GACAA,EAAcI,UAAUC,IAAI,UAEjB,MAAXF,IACAA,EAAQG,UAAYvH,EAAAwH,QAAQjJ,OACtB4B,EAAAsH,UAAUC,OAAO,aACjB,0CACNzG,QAAQ+B,WAAW2E,mBAAmB,uBAAwB5J,KAAKiH,gBAAgBjH,KAAK6J,eAG5F5G,EAAA6G,aAAaC,cAiBd7G,QAAAoH,qBAAP,SAA4BC,GACxB,GADwB,SAAAA,OAAA,GACpBA,EACA,GACKxI,EAAAyI,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBiG,gBACT,KAA/ClI,EAAAgC,WAAWC,kBAAkBiG,cAwB7BxH,QAAQyH,+BAtBR,IACiE,sBAA7DnI,EAAAgC,WAAWC,kBAAkBiG,cAAcE,eAC1C7I,EAAAyI,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAOrD,GAC0D,sBAA7DrI,EAAAgC,WAAWC,kBAAkBiG,cAAcE,eAC3C7I,EAAAyI,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAEvD3H,QAAQyH,+BACL,CAEH,GADA3I,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQvI,EAAAgC,WAAWC,kBAAkBiG,gBACnE1I,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBiG,cAAe,cAhB1D,CAEE,GADA1I,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQvI,EAAAgC,WAAWC,kBAAkBoG,gBACnE7I,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBoG,cAAe,cAiBhE3H,SAAQyH,4BAITzH,QAAAyH,yBAAP,WACI,GAAIO,GAAkBnJ,EAAAwB,UAAU4H,aAC5B7H,EAAkBvB,EAAAwB,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,GACjEyH,GAAyB,GAAIC,OAAOC,mBAExC,IAAe,MAAXJ,GAA8B,MAAX5H,GAAmBA,EAAe,MAAa,WAAKA,EAAc,KAAG,CACxF,GAAIiI,GAAoBjI,EAAe,MAAa,UAChDkI,EAAgBlI,EAAc,KAAEmI,UAAU,GAC1CC,EAAepI,EAAe,MAAQ,KAAIA,EAAe,MAAQ,KAAIJ,QAAQU,SAC3E+H,EACFJ,EAAY,cAAgBrI,QAAQmC,IAAM,YAAcqG,EAAO,QAAUN,EAAiB,IAAMI,CAEpG,IADAxJ,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQY,IACtC3J,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKU,EAAY,YAIzBzI,QAAA0I,4BAAP,WACI,GAAK7J,EAAAyI,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,gBAMrD,IAAK9I,EAAAyI,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoH,YAAa,CAE5E,GADA7J,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQvI,EAAAgC,WAAWC,kBAAkBoH,aACnE7J,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBoH,WAAY,eAXmB,CAExE,GADA7J,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQvI,EAAAgC,WAAWC,kBAAkBoG,gBACnE7I,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBoG,cAAe,YActD3H,QAAApC,UAAAgL,WAAV,WACI,MAAO9L,MAAKkE,YAAY6H,aAGlB7I,QAAApC,UAAAkL,2BAAV,SAAqCN,GACjC,GAAkC,MAA9BhJ,EAAA0F,eAAe6D,aAAuBvJ,EAAA0F,eAAe6D,YAAYC,OAAS,EAC1E,IAAK,GAAInM,GAAY,EAAGA,EAAI2C,EAAA0F,eAAe6D,YAAYC,OAAQnM,IAC3D2C,EAAA0F,eAAe6D,YAAYlM,GAAGoM,YAKtC,KAAK,GADDC,GAAwCjD,SAASkD,iBAAiB,cAC7DtM,EAAY,EAAGA,EAAIqM,EAAiBF,OAAQnM,IACjDqM,EAAiBrM,GAAGuM,aAAa,WAAYZ,IA7SvCxI,QAAAU,SAAmB,QACnBV,QAAAmC,IAAc,mBA+ShCnC,SAjT6BlB,EAAAqF,WAAWkF,YAA3BlM,GAAA6C,QAAOA,EAmTpBA,EAAQG,QF2LF,SAAS/C,EAAQD,IGphBvB,WAAaC,EAAAD,QAAAL,KAAA,cH0hBP,SAASM,EAAQD,II1hBvB,WAAaC,EAAAD,QAAAL,KAAA,aJgiBP,SAASM,EAAQD,EAASF,GAE/B,YKliBD,IAAAyB,GAAAzB,EAA8E,GAC9EqC,EAAArC,EAA2B,EAM3B,IAAAsJ,GAAA,WAGI,QAAAA,SAAY+C,GACR5K,EAAA6K,aAAaC,2BAA2BF,EAAM,QAC9C/C,QAAQkD,MAAQH,EA8CxB,MA3CI3L,QAAAmD,eAAkByF,QAAA,UL+hBbxF,IK/hBL,WACI,OAAQrC,EAAAqG,MAAMC,kBAAkBuB,QAAQkD,QLiiBvCxI,YAAY,EACZC,cAAc,IK/hBLqF,QAAAxF,IAAd,SAAkBoB,GACd,MAAOoE,SAAQkD,OAASlD,QAAQkD,MAAM5L,eAAesE,GAAOoE,QAAQkD,MAAMtH,GAAO,KAAKA,EAAG,MAG/EoE,QAAAmD,cAAd,SAA4BvH,GLkiBvB,IKliBoC,GAAAwH,MAAAC,EAAA,EAAAA,EAAA1J,UAAA8I,OAAAY,IAAAD,EAAAC,EAAA,GAAA1J,UAAA0J,EACrC,IAAIrD,QAAQkD,OAASlD,QAAQkD,MAAM5L,eAAesE,GAAM,CAIpD,IAHA,GAAI0H,GAAQtD,QAAQkD,MAAMtH,GACtB2H,EAAc,cACdC,EAAW,EACRD,EAAYE,KAAKH,IACpBE,GAGJ,IAAIhM,GAAO4L,CACX,IAAII,IAAahM,EAAKiL,OAClB,KAAM,4BAA4BjL,EAAKiL,OAAM,kDAAkDe,EAAQ,GAG3G,IAAIE,KACJ,OAAOJ,GAAMK,QAAQJ,EAAa,SAAUK,GACxC,GAAIC,GAAMrM,IAAOkM,EACjB,IAAIvL,EAAA4I,YAAY+C,OAAOF,EAAO,MAAM,GAChCC,EAAM1L,EAAA4L,YAAYC,cACdH,EACA9K,EAAAgC,WAAWC,kBAAkBiJ,SAAW,EAAIlL,EAAAgC,WAAWC,kBAAkBkJ,uBAE1E,KAAK/L,EAAA4I,YAAY+C,OAAOF,EAAO,MAAM,GACxC,KAAM,sBAAsBA,EAAK,KAErC,OAAOC,KAIf,MAAO,KAAKjI,EAAG,MAMvBoE,UAnDapJ,GAAAoJ,QAAOA,EAqDpBhG,OAAgB,QAAIgG,GLiiBd,SAASnJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MMnmBpFG,EAAAzB,EAAmC,GACnC6B,EAAA7B,EAAuC,GAGvCyN,EAAAzN,EAAwB,GAExBqE,EAAA,SAAArB,GAAgC5B,EAAAiD,WAAArB,EAG5B,SAAAqB,YAAYC,EAAsC0B,GAC9ChD,EAAA1C,KAAAT,KAAMyE,EAAmB0B,EAAgByH,EAAA1K,QAAQmC,KAEjDb,WAAWqJ,SAAW7N,KAsC9B,MAnCIa,QAAAmD,eAAkBQ,WAAA,WNgmBbP,IMhmBL,WACI,MAAOO,YAAWqJ,UNkmBjB1J,YAAY,EACZC,cAAc,IMhmBnBvD,OAAAmD,eAAkBQ,WAAA,qBNmmBbP,IMnmBL,WACI,MAA8B,OAAvBO,WAAWqJ,SAAmB,KAAOrJ,WAAWqJ,SAASpJ,mBNqmB/DN,YAAY,EACZC,cAAc,IMnmBnBvD,OAAAmD,eAAkBQ,WAAA,kBNsmBbP,IMtmBL,WACI,MAAOO,YAAWqJ,SAAS1H,gBNwmB1BhC,YAAY,EACZC,cAAc,IMtmBnBvD,OAAAmD,eAAkBQ,WAAA,cNymBbP,IMzmBL,WACI,MAAOO,YAAWqJ,SAASC,YN2mB1B3J,YAAY,EACZC,cAAc,IMzmBZI,WAAA1D,UAAAiN,eAAP,SAAsBC,GACW,MAAzBxJ,WAAWsJ,YACXtJ,WAAWsJ,WAAWG,oBAAoB,cAAeD,EAAYE,aAItE1J,WAAA1D,UAAAqN,eAAP,WACI,GAA6B,MAAzB3J,WAAWsJ,YACPtJ,WAAWC,kBAAkB2J,mBAAoB,CACjD,GAAMJ,GAAcxJ,WAAWsJ,WAAWO,iBAAiB,cAE3D,KAAKzM,EAAAqG,MAAMC,kBAAkB8F,GACzB,MAAOpM,GAAA4I,YAAY8D,aAAaN,GAK5C,OAAO,GAzCIxJ,WAAAqJ,SAAuB,KA2C1CrJ,YA5CgCxC,EAAAqF,WAAWkH,eAA9BlO,GAAAmE,WAAUA,GN4pBjB,SAASlE,EAAQD,EAASF,GAE/B,YOpqBD,IAAAyB,GAAAzB,EAA6C,GAC7CqO,EAAArO,EAAmC,GACnC4C,EAAA5C,EAAwB,GACxBqC,EAAArC,EAA2B,GAC3BsO,EAAAtO,EAA8B,IAC9B6B,EAAA7B,EAA8B,GAC9BwC,EAAAxC,EAA4B,IAC5BuO,EAAAvO,EAAsB,IACtBiC,EAAAjC,EAA0B,IAC1BwO,EAAAxO,EAAsC,IACtCyC,EAAAzC,EAA4B,IAC5BuC,EAAAvC,EAA+B,IAO/BqF,EAAA,mBAAAA,oBA8JA,MA9IkBA,iBAAAD,gBAAd,aAOcC,gBAAAC,iBAAd,aAWA5E,OAAAmD,eAAkBwB,gBAAA,kBPgpBbvB,IOhpBL,WACI,MAAOuB,iBAAgBoJ,SAASC,gBPkpB/B1K,YAAY,EACZC,cAAc,IOhpBLoB,gBAAAsJ,cAAd,SAA4BC,GACxB,MAAO/O,MAAKgP,SAAW,KAAOxJ,gBAAgBoJ,SAASC,eAAeC,cAAcC,IAG1EvJ,gBAAAyJ,uBAAd,SAAqC1O,GACjC,GAAIwO,GAAwB5E,KAAK+E,MAAMC,aAAa5O,GAChD6O,EAAuB,EAkB3B,OAhBIxN,GAAAqG,MAAMC,kBAAkB6G,KACxBK,EAAexN,EAAAyN,cAAcC,SAASC,oBAAoBhP,GACtD6O,GACAL,EAAU5E,KAAK+E,MAAMC,aAAaC,GAE9BxN,EAAAqG,MAAMC,kBAAkB6G,IACxBnN,EAAA4N,OAAOC,WACH,kBACA,iCAAiClP,EAAE,oBAAoB6O,EAAY,MAI3ExN,EAAA4N,OAAOC,WAAW,kBAAmB,wCAAwClP,EAAE,QAIhFwO,GAGIvJ,gBAAAkK,uBAAf,WACI,IAAIlK,gBAAgBmK,aAApB,CAGA/M,EAAA6F,YAAYmH,UAAW,EACvBjB,EAAAkB,sBAAsBC,SAAU,EAChCnB,EAAAkB,sBAAsBE,WACtBrN,EAAA0F,eAAe4H,uBAAwB,CAEvC,IAAI/P,GAAU+B,EAAAkD,cAAcC,KAAK8K,WACjC,KAAK,GAAI5K,KAAOpF,GACRA,EAAQc,eAAesE,IACvBoJ,EAAAyB,cAAcC,qBAAqBlQ,EAAQoF,GAGnD1C,GAAAoG,YAAY9D,WAAW2E,mBAAmB,iBAC1CpH,EAAAgC,WAAWsD,QAAQsI,WAAWhO,EAAAsH,UAAUC,OAAO,gBAAgB,EAAO,GAAI,GAAI,IAAM0G,SAAS,IAC7F7K,gBAAgBmK,cAAe,IAYrBnK,gBAAAe,YAAd,SAA0BI,EAAeC,EAAgBF,EAAe4J,GACpE9K,gBAAgB+K,MAAQ5J,EACxBnB,gBAAgBgL,OAAS5J,CAGzB,IAAM6J,GAA+CtH,SAASC,eAAekH,GACvEI,EAAgDvH,SAASC,eAAe,WAGxEuH,GAA+CC,KAAMH,EAAQI,aAAa,EAC/EF,GAAwBG,gBAAkBpK,EAC3C1G,KAAK4O,SAAWzE,KAAK4G,mBAAmBpK,EAAOC,EAAQ+J,EAAiB3Q,KAAKgP,UAEzExJ,gBAAgBoJ,mBAAoBzE,MAAK6G,iBACzCxL,gBAAgBwJ,UAAW,GAG/B7E,KAAK8G,SAASC,QAAU/G,KAAKgH,SAASC,KAGtCjI,SAASkI,KAAKC,YAAYtR,KAAK4O,SAASgC,MAGxC5Q,KAAKuR,MAAQ,GAAIpH,MAAKqH,UAEtBzO,EAAAuF,QAAQmJ,QACR/C,EAAAgD,MAAMC,QACNhD,EAAAkB,sBAAsB+B,SAEtBlB,EAAQmB,MAAMC,QAAU,QACxBrB,EAAOoB,MAAMC,QAAU,OACvBrB,EAAOsB,iBAAiB,mBAAoBvM,gBAAgBkK,wBAE5DjM,OAAuB,eAAIzD,KAAKuR,MAChC9N,OAA0B,kBAAIzD,KAAK4O,SACnC5O,KAAKgS,eASKxM,gBAAAyM,SAAd,SAAuB5I,GACnBrJ,KAAKuR,MAAMU,SAAS5I,IAQT7D,gBAAAwM,YAAf,WACQxM,gBAAgB0M,mBAIpB1D,EAAA2D,mBAAmBC,OAEnB5M,gBAAgBoJ,SAASyD,OAAO7M,gBAAgB+L,OAEhDe,sBAAsB9M,gBAAgBwM,eAzJnCxM,gBAAA+M,mBAGA/M,gBAAAgN,IAAc,GAGdhN,gBAAAiN,WAAqB,EACrBjN,gBAAAkN,eAAyB,EAEjBlN,gBAAAwJ,UAAoB,EACpBxJ,gBAAA0M,kBAAmB,EACnB1M,gBAAAmK,cAAe,EAgJlCnK,kBA9JanF,GAAAmF,gBAAeA,GP+wBtB,SAASlF,EAAQD,GAEtB,YQjyBD,IAAA8R,GAAA,mBAAAA,uBA+CA,MA5CWA,oBAAAQ,cAAP,SAAqBC,GAEjB,IAAK,GADDC,GAAOV,mBAAmBW,WACrB/S,EAAI,EAAGA,EAAI8S,EAAK3G,OAAQnM,IAC7B,GAAI8S,EAAK9S,GAAGgT,YAAcH,EAAMG,UAE5B,OAAO,CAKf,OADAF,GAAKG,KAAKJ,IACH,GAGJT,mBAAAc,gBAAP,SAAuBL,GAGnB,IAAK,GAFDC,GAAOV,mBAAmBW,WAC1B3F,KACKpN,EAAI,EAAGA,EAAI8S,EAAK3G,OAAQnM,IAC7B,GAAI8S,EAAK9S,GAAGgT,YAAcH,EAAMG,UAAW,CACvC5F,EAAMpN,CACN,OAIR,GAAIoH,GAASgG,IAUb,OATIhG,KAEI0L,EAAK1F,GAAK4F,YAAcH,EAAMG,UAC9BF,EAAKK,OAAO/F,EAAK,GAEjBhG,GAAS,GAIVA,GAGJgL,mBAAAC,KAAP,WAGI,IAAK,GADDS,GAAOV,mBAAmBW,WACrB/S,EAAI,EAAGA,EAAI8S,EAAK3G,OAAQnM,IAAK,CAClC,GAAI6S,GAAQC,EAAK9S,EACjB6S,GAAMO,eA3CChB,mBAAAW,cA8CnBX,qBA/Ca9R,GAAA8R,mBAAkBA,GRk1BzB,SAAS7R,EAAQD,EAASF,GAE/B,YSt1BD,IACA6B,IADA7B,EAAuB,GACvBA,EAAmC,IACnC+B,EAAA/B,EAAgC,GAChCqC,EAAArC,EAA2B,GAC3BiT,EAAAjT,EAA2E,GAC3EkT,EAAAlT,EAAwB,IACjBmT,EAAenJ,KAAK+E,MAAMoE,aAKjChL,EAAA,mBAAAA,YAuQA,MAjPWA,SAAAmJ,MAAP,WACInJ,QAAQiL,KAAOpK,SAASC,eAAe,QACvCd,QAAQkL,OAASrK,SAASC,eAAe,UACzCd,QAAQmL,MAAQ,4BAA4BC,KAAKC,UAAUC,UAC3DtL,QAAQuL,YAAc,OAAOH,KAAKC,UAAUC,UAC5CtL,QAAQwL,aAAexL,QAAQmL,OAA8B,OAArBhQ,OAAOsQ,UAC/CzL,QAAQ0L,eAAiBZ,EAAAa,iBAAiB,gBAC1C3L,QAAQ0L,eAAeE,GAAGd,EAAAe,iBAAiBC,SAAU9L,QAAQC,WAAW8L,KAAKrU,MAAM,IAEnFsI,QAAQgM,QAAU,GAAIhB,GAEtBhL,QAAQC,aACR9E,OAAO8Q,SAAWjM,QAAQkM,aAE1BrL,SAASkI,KAAK/H,UAAUC,IAA0B,WAAtB9F,OAAgB,QAAiB,SAAW,WACxE0F,SAASkI,KAAK/H,UAAUC,IAAI,OAAO9F,OAAO,eAEtC6E,QAAQmM,YACRtL,SAASkI,KAAK/H,UAAUC,IAAI,UAG5BjB,QAAQoM,eACRvL,SAASkI,KAAK/H,UAAUC,IAAI,aAG5BjB,QAAQmL,OACRnL,QAAQqM,WAMZxL,SAAS4I,iBACL,WACA,SAAU6C,GACN,GAAiD,WAA7CpS,EAAAgC,WAAW2B,eAAe0O,eAA9B,CAIA,GAAIC,GAAOF,EAAMG,UAAYzM,QAAQ0M,SAErC,IADA1M,QAAQ0M,UAAYJ,EAAMG,UACrBD,KAAQA,EAAO,KAApB,CAGAF,EAAMK,iBACNL,EAAMM,iBAEN,IAAIC,GAAM,GAAIC,YAAW,QACzBR,GAAM7J,OAAOsK,cAAcF,OAE/B,IAID7M,QAAAkM,aAAP,WACIlM,QAAQC,aACJD,QAAQwL,cACRwB,WAAW,WAAM,MAAAhN,SAAQC,cAAc,MAIxCD,QAAAC,WAAP,SAAkBgN,EAA0BC,GAA1B,SAAAD,OAAA,GAA0B,SAAAC,OAAA,IACnCD,GAAWjN,QAAQmL,OAASnL,QAAQ0L,iBAAmB1L,QAAQmN,YAAcnN,QAAQoM,iBACtFpM,QAAQ0L,eAAe0B,OACvBpN,QAAQ0L,eAAe2B,MAAMrN,QAAQsN,iBAGzCzM,SAASkI,KAAKQ,MAAMgE,SAAW,SAC/B7T,EAAA8T,QAAQC,UAAUC,cAElB,IAAIC,GAAMC,SAASC,iBAAiBhN,SAASiN,iBAAiBC,iBAAiB,UAAY,KACvFC,EAAsB7S,OAAO6S,YAActU,EAAA8T,QAAQC,UAAUQ,gBAAkBN,EAC/EO,EAAqB/S,OAAO+S,WAAaxU,EAAA8T,QAAQC,UAAUU,cAE3DnO,SAAQmL,OAA8C,GAArCzR,EAAA8T,QAAQC,UAAUQ,kBAEnCpN,SAASiN,gBAAgBvE,MAAMlL,MAAQsP,EAAM,EAAIxS,OAAO+S,WAAa,KAAO,GAC5ErN,SAASiN,gBAAgBvE,MAAMjL,OAASqP,EAAM,EAAIxS,OAAO6S,YAAcL,EAAM,KAAO,GACpF9M,SAASiN,gBAAgBvE,MAAMgE,SAAWI,EAAM,EAAI,UAAY,GAGpE,IAAIS,GAAqBF,GAActU,EAAAsD,gBAAgB+K,MAAQjI,QAAQqO,gBACnEC,EAAsBN,GAAepU,EAAAsD,gBAAgBgL,OAAS6C,EAAAwD,QAAQrG,QACtEsG,IAAgB5U,EAAAsD,gBAAgBgL,OAAS6C,EAAAwD,QAAQrG,OAAS8F,GAAe,EACzES,IAAiB7U,EAAAsD,gBAAgB+K,MAAQiG,GAAc,CAEvDE,GAAaE,GACbtO,QAAQiL,KAAK1B,MAAMmF,UAAY,SAAWN,EAAa,IACvDK,GAASzO,QAAQqO,eAAiB,EAAKD,IAEvCpO,QAAQiL,KAAK1B,MAAMmF,UAAY,SAAWJ,EAAc,IACxDG,GAASzO,QAAQqO,eAAiB,EAAKC,GAG3CtO,QAAQiL,KAAK1B,MAAMiF,IAAMA,EAAI5I,WAAa,KAC1C5F,QAAQiL,KAAK1B,MAAMkF,KAAOA,EAAK7I,WAAa,IAE5C,IAAI+I,IAAkB,CAetB,IAdkB,MAAdzU,EAAAgC,YAA4C,MAAtBhC,EAAAgC,WAAWsD,UACjCmP,EAAkBzU,EAAAgC,WAAWC,kBAAkByS,gBAG3C5O,QAAQuL,cACRoD,GAAkB,GAGjBA,IACD9N,SAASkI,KAAK/H,UAAU6N,OAAO,WAAY,YAAa,SAAU,aAClE7O,QAAQiL,KAAK1B,MAAMjL,OAAS1E,EAAAsD,gBAAgBgL,OAAS6C,EAAAwD,QAAQrG,OAAS,OAI1EyG,GAAyC,WAAtBxT,OAAgB,QAAgB,CACnD,GAAI2T,GAAgBZ,EAAaF,CAC7BA,GAAcE,GAAcY,EAAgB9O,QAAQ+O,eACpDlO,SAASkI,KAAK/H,UAAUC,IAAI,YAC5BJ,SAASkI,KAAK/H,UAAU6N,OAAO,YAAa,SAAU,aAElDC,EAAgB9O,QAAQgP,qBAAuBF,EAAgB9O,QAAQ+O,eACvElO,SAASkI,KAAK/H,UAAUC,IAAI,UAExB6N,EAAgB,KAChBjO,SAASkI,KAAK/H,UAAUC,IAAI,cAG5B6N,EAAgB,KAChBjO,SAASkI,KAAK/H,UAAUC,IAAI,aAIpCmN,EAAaF,EAAatU,EAAAsD,gBAAgBgL,OAC1CuG,IAAS7U,EAAAsD,gBAAgBgL,OAASgG,GAAc,EAEhDlO,QAAQiL,KAAK1B,MAAMmF,UAAY,SAAWN,EAAa,IACvDpO,QAAQiL,KAAK1B,MAAMiF,IAAM,IACzBxO,QAAQiL,KAAK1B,MAAMkF,KAAOA,EAAK7I,WAAa,KAC5C5F,QAAQiL,KAAK1B,MAAMjL,OAAU1E,EAAAsD,gBAAgBgL,OAASgG,EAAcF,EAAc,OAElFnN,SAASkI,KAAK/H,UAAU6N,OAAO,WAAY,UAC3C7O,QAAQiL,KAAK1B,MAAMjL,OAAS1E,EAAAsD,gBAAgBgL,OAAS6C,EAAAwD,QAAQrG,OAAS,MAGtErH,SAASkI,KAAK/H,UAAUiO,SAAS,aACjCjP,QAAQiL,KAAKjK,UAAU6N,OAAO,cAC9B7O,QAAQkL,OAAOlK,UAAUC,IAAI,gBAE7BjB,QAAQiL,KAAKjK,UAAUC,IAAI,cAC3BjB,QAAQkL,OAAOlK,UAAU6N,OAAO,mBAGpC7O,SAAQiL,KAAK1B,MAAMjL,OAAS1E,EAAAsD,gBAAgBgL,OAAS6C,EAAAwD,QAAQrG,OAAS,KACtElI,QAAQiL,KAAKjK,UAAUC,IAAI,aAGW,IAAtCJ,SAASiN,gBAAgBoB,YACzBrO,SAASiN,gBAAgBoB,UAAY,GAGzCrO,SAASkI,KAAKQ,MAAMgE,SAAW,GAE3BvN,QAAQgM,SAAWkB,GACnBlN,QAAQgM,QAAQmD,KACZnP,QAAQoP,YACRpP,QAAQqP,aACRnB,GAAcF,EAAcjD,EAAAwD,QAAQrG,QACpCgG,EACAF,EACAI,EACAE,IAKLtO,QAAAqM,SAAP,WACIxL,SAAS4I,iBAAiB,eAAgB/R,KAAK4X,oBAAoB,GACnEzO,SAAS4I,iBAAiB,gBAAiB/R,KAAK4X,oBAAoB,GACpEzO,SAAS4I,iBAAiB,aAAc/R,KAAK4X,oBAAoB,GACjEzO,SAAS4I,iBAAiB,YAAa/R,KAAK6X,wBAAwB,IAG1DvP,QAAAsP,mBAAd,SAAiC/X,GAC7BA,EAAEqV,kBACFrV,EAAEoV,kBAGQ3M,QAAAuP,uBAAd,SAAqChY,GAEjC,IADA,GAAIkL,GAAsBlL,EAAEkL,OACrBA,GACH,GAAIA,GAAU5B,SAASiN,gBACnBrL,EAAS,SACN,IAAIA,EAAOzB,UAAUiO,SAAS,SAAWxM,EAAOzB,UAAUiO,SAAS,iBACtE,MAE4B,OAAxBxM,EAAO+M,gBACP/M,EAASA,EAAO+M,eAK5BjY,EAAEqV,kBACFrV,EAAEoV,kBAGS3M,QAAAmM,SAAf,WACI,GAAMsD,GAAKpE,UAAUqE,UACfC,EAAStE,UAAUsE,MAEzB,OAAO,UAAUvE,KAAKqE,IAAO,iBAAiBrE,KAAKuE,IAGxC3P,QAAAoM,YAAf,WACI,SAAUpM,QAAQmL,QAAUE,UAAUqE,UAAU3K,MAAM,WAAYsG,UAAUqE,UAAU3K,MAAM,WAGjF/E,QAAAmN,SAAf,WACI,IACI,MAAOhS,QAAOyU,OAASzU,OAAOqT,IAChC,MAAOjX,GACL,OAAO,IAIRyI,QAAA6P,eAAP,WACIhP,SAASkI,KAAK/H,UAAUC,IAAI,WAGlBjB,QAAAqP,WAAd,WACI,MAAOxO,UAASkI,KAAK/H,UAAUiO,SAAS,aASrCjP,QAAA8P,IAAP,SAAWC,KAjQJ/P,QAAAoP,YAAsB,cAOtBpP,QAAA+O,cAAgB,GAChB/O,QAAAgP,oBAAsB,IAEtBhP,QAAAqO,eAAiB,EAEjBrO,QAAAmL,OAAiB,EACjBnL,QAAAuL,aAAuB,EACvBvL,QAAAwL,cAAwB,EAGxBxL,QAAAsN,eAAiB,GAqP5BtN,UAvQajI,GAAAiI,QAAOA,GTiiCd,SAAShI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MUljCpFG,EAAAzB,EAA8B,GAC9BmY,EAAAnY,EAA2C,IAC3CoY,EAAApY,EAA+B,GAElBE,GAAA8T,kBACTqE,SAAU,WACVpE,SAAU,WASd,IAAAqE,GAAA,SAAAtV,GAAgC5B,EAAAkX,WAAAtV,EAa5B,SAAAsV,YAAYC,GACRvV,EAAA1C,KAAAT,MAVIA,KAAA2Y,YAAsB,EAEtB3Y,KAAA4Y,UAAoB,EACpB5Y,KAAA6Y,SAAmB,EASvBH,EAAY9W,EAAAqG,MAAM6Q,eAAeJ,EAAW9W,EAAAqG,MAAM8Q,gBAElD/Y,KAAKgZ,WAAa,cAAcN,EAEhC1Y,KAAKiZ,KAAO,cAAcP,EAAS,IAAI9W,EAAAqG,MAAM8Q,eAG7C/Y,KAAKkZ,cAAgB,EACrBlZ,KAAKmZ,mBAAqB,EAsIlC,MAnIcV,YAAA3X,UAAAsY,cAAV,WACQpZ,KAAKkZ,gBAAkBlZ,KAAKmZ,oBAC5BnZ,KAAK0V,OACL1V,KAAKqZ,aAELrZ,KAAKsZ,OAAO7B,KAAKpX,EAAA8T,iBAAiBqE,UAClCxY,KAAKkZ,kBAIbrY,OAAAmD,eAAcyU,WAAA3X,UAAA,cV+hCTmD,IU/hCL,WACI,MAAOjE,MAAKgZ,YViiCX7U,YAAY,EACZC,cAAc,IUxhCnBqU,WAAA3X,UAAA6U,MAAA,SAAM4D,GAAN,GAAAC,GAAAxZ,IACSA,MAAK4Y,UACNL,EAAAkB,eAAelQ,IAAIvJ,KAAKiZ,KAAMjZ,MAElCA,KAAK4Y,UAAW,EACZ5Y,KAAK2Y,YACL3Y,KAAKkZ,cAAgB,EACrBlZ,KAAKmZ,mBAAqBI,EAC1BvZ,KAAK0Z,aAGL1Z,KAAK2Z,UAQL3Z,KAAK4Z,YAAa,GAAIvO,OAAOwO,UAC7B7Z,KAAKmZ,mBAAgC,KAAXI,EAG1BvZ,KAAK8Z,OAASxE,WAAW,WAAM,MAAAkE,GAAKH,YAAYrZ,KAAKmZ,oBAEjDZ,EAAAkB,eAAeM,QACf/Z,KAAKga,UAUjBvB,WAAA3X,UAAA4U,KAAA,WACQ1V,KAAK4Y,UACLL,EAAAkB,eAAetC,OAAOnX,KAAKiZ,MAE/BjZ,KAAK4Y,UAAW,EACZ5Y,KAAK2Y,WACL3Y,KAAK0Z,aAEc,MAAf1Z,KAAK8Z,QACLG,aAAaja,KAAK8Z,SAKtBrB,WAAA3X,UAAAuY,SAAR,WACIY,aAAaja,KAAK8Z,QAClBvB,EAAAkB,eAAetC,OAAOnX,KAAKiZ,MAC3BjZ,KAAK4Y,UAAW,EAChB5Y,KAAKsZ,OAAO7B,KAAKpX,EAAA8T,iBAAiBC,WAGtCqE,WAAA3X,UAAAkZ,MAAA,WACI,GAAKha,KAAK4Y,WAAY5Y,KAAK6Y,QAA3B,CAGA,GAAI7Y,KAAK2Y,WACL3Y,KAAK0Z,iBACF,CAEHO,aAAaja,KAAK8Z,OAClB,IAAII,IAAc,GAAI7O,OAAOwO,SAC7B7Z,MAAKmZ,oBAAsBe,EAAcla,KAAK4Z,WAElD5Z,KAAK6Y,SAAU,IAGnBJ,WAAA3X,UAAAqZ,UAAA,WACI,MAAOna,MAAK4Y,UAGhBH,WAAA3X,UAAAsZ,QAAA,cAAAZ,GAAAxZ,IACSA,MAAK4Y,UAAa5Y,KAAK6Y,UAGxB7Y,KAAK2Y,WACL3Y,KAAK2Z,SAEL3Z,KAAK4Z,YAAa,GAAIvO,OAAOwO,UAC7BpW,OAAOwW,aAAaja,KAAK8Z,QACzB9Z,KAAK8Z,OAASxE,WAAW,WAAM,MAAAkE,GAAKH,YAAYrZ,KAAKmZ,qBAEzDnZ,KAAK6Y,SAAU,IAQnBJ,WAAA3X,UAAA6Y,MAAA,WACI3Z,KAAKqa,eAST5B,WAAA3X,UAAAsX,IAAA,SAAIC,KAKRI,YA9JgCH,EAAAgC,2BAAnBja,GAAAoY,WAAUA,EAkKVpY,EAAA4T,iBAAmB,SAACyE,GAC7B,MAAO,IAAID,GAAWC,KVkgCpB,SAASpY,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MW1rCpFG,EAAAzB,EAA8B,GAC9Boa,EAAApa,EAAqE,IACrEqO,EAAArO,EAAmC,EAGnC,SAAAqa,qBAAoCC,GAChC,GAAIC,GAA2BD,GAAc5Z,MAE7C,OAAO,UAAAsC,GAA6B5B,EAAAoZ,eAAAxX,EAMhC,SAAAwX,kBACIxX,EAAA1C,KAAAT,MACAA,KAAK4a,gBAAiB,EACtB5a,KAAK6a,gBAAkB,KACvB7a,KAAK8a,gBAAkB,KACvB9a,KAAK+a,WAAa,KAElB/a,KAAKmT,WAAanT,KAAKmT,WAAWkB,KAAKrU,MA2F/C,MAxFc2a,gBAAA7Z,UAAAsY,cAAV,WACI,KAAM,IAAI4B,OAAM,+CAGpBna,OAAAmD,eAAc2W,eAAA7Z,UAAA,cXmrCTmD,IWnrCL,WACI,KAAM,IAAI+W,OAAM,8CXqrCf7W,YAAY,EACZC,cAAc,IWnrCnBvD,OAAAmD,eAAc2W,eAAA7Z,UAAA,kBXsrCTmD,IWtrCL,WACI,MAAOjE,MAAK4a,gBXwrCXzW,YAAY,EACZC,cAAc,IWtrCnBvD,OAAAmD,eAAW2W,eAAA7Z,UAAA,aXyrCNmD,IWzrCL,WAKI,MAJwB,QAApBjE,KAAK+a,aACL/a,KAAK+a,WAAa/a,KAAKib,WAAarZ,EAAAqG,MAAM8Q,gBAGvC/Y,KAAK+a,YX0rCX5W,YAAY,EACZC,cAAc,IWxrCZuW,eAAA7Z,UAAAqS,WAAP,WACQnT,KAAK4a,gBAIT5a,KAAKoZ,iBAGDuB,eAAA7Z,UAAAoa,UAAR,SAAkBC,EAAaC,GAC3BA,EAAUxZ,EAAAqG,MAAM6Q,eAAesC,GAAS,GAMpCA,GACAxZ,EAAA4N,OAAOC,WAAW,iBAAkB,IAAIzP,KAAKib,WAAU,oBAAsBE,IAI9ER,eAAA7Z,UAAAuZ,YAAP,WACI,GAAKra,KAAK4a,iBAIN5a,KAAK6a,gBAAT,CAIA7a,KAAK6a,iBAAkB,CAEvB,KACQrM,EAAA2D,mBAAmBQ,cAAc3S,MACjCA,KAAK4a,gBAAiB,EAGtB5a,KAAKkb,UAAU,uDAAuD,GXqrC7E,QWlrCGlb,KAAK6a,gBAAkB,KAI3B7a,KAAKmT,eAGFwH,eAAA7Z,UAAA4Y,WAAP,WACI,IAAI1Z,KAAK4a,iBAIL5a,KAAK8a,gBAAT,CAIA9a,KAAK8a,iBAAkB,CAEvB,KACQtM,EAAA2D,mBAAmBc,gBAAgBjT,MACnCA,KAAK4a,gBAAiB,EAGtB5a,KAAKkb,UAAU,kDAAkD,GXgrCxE,QW7qCGlb,KAAK8a,gBAAkB,QAGnCH,gBAxGoCD,GAHxBra,EAAAma,oBAAmBA,mBAiHnC,IAAAF,GAAA,SAAAnX,GAAyD5B,EAAA+Y,2BAAAnX,EAAzD,SAAAmX,8BAAyDnX,EAAA9B,MAAArB,KAAAoD,WAIzD,MAHIvC,QAAAmD,eAAcsW,2BAAAxZ,UAAA,UXirCTmD,IWjrCL,WACI,MAAOjE,OXmrCNmE,YAAY,EACZC,cAAc,IWlrCvBkW,4BAJyDE,oBAAoBD,EAAAc,qBAAvDhb,GAAAia,2BAA0BA,CAShD,IAAAgB,GAAA,SAAAnY,GAAwD5B,EAAA+Z,0BAAAnY,EAAxD,SAAAmY,6BAAwDnY,EAAA9B,MAAArB,KAAAoD,WAIxD,MAHIvC,QAAAmD,eAAcsX,0BAAAxa,UAAA,UXurCTmD,IWvrCL,WACI,MAAOjE,OXyrCNmE,YAAY,EACZC,cAAc,IWxrCvBkX,2BAJwDd,oBAAoBD,EAAAgB,oBAAtDlb,GAAAib,0BAAyBA,GXqsCzC,SAAShb,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MY10CpF+Z,EAAArb,EAA4B,GAO5B,SAAAkb,qBACI,MAAO,UAAAlY,GAAqC5B,EAAAka,uBAAAtY,EAArC,SAAAsY,0BAAqCtY,EAAA9B,MAAArB,KAAAoD,WAAyB,MAAAqY,yBAAzBtR,KAAK+E,MAAMoE,cAD3CjT,EAAAgb,kBAAiBA,iBAIjC,SAAAE,oBACI,MAAO,UAAApY,GAAoC5B,EAAAma,sBAAAvY,EAApC,SAAAuY,yBAAoCvY,EAAA9B,MAAArB,KAAAoD,WAAa,MAAAsY,wBAAbF,EAAAG,aAD/Btb,EAAAkb,iBAAgBA,kBZ01C1B,SAASjb,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,Gaj3CjEna,EAAAzB,EAAwE,GACxEgc,EAAAhc,EAA6B,IAC7Bic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChCkc,EAAAlc,EAAyC,IAEzCmc,EAAAnc,EAA2B,IAS3Bwb,EAAA,SAAAxY,GAAiC5B,EAAAoa,YAAAxY,EAqB7B,SAAAwY,eACIxY,EAAA1C,KAAAT,MAEAA,KAAKuc,SAAU,EACfvc,KAAKwc,aAAc,EAEnBxc,KAAKiZ,KAAUjZ,KAAKyc,cAAa,IAAI7a,EAAAqG,MAAM8Q,eAmwBnD,MAxvBI4C,aAAA7a,UAAA4b,aAAA,WAKI,MAAO,IAGX7b,OAAAmD,eAAI2X,YAAA7a,UAAA,ebk1CCmD,Ial1CL,WACI,MAAOjE,MAAK2c,cbo1CXC,Iaj1CL,SAAgBC,GACZ7c,KAAK2c,aAAeE,Gbm1CnB1Y,YAAY,EACZC,cAAc,Ia70CnBvD,OAAAmD,eAAW2X,YAAA7a,UAAA,Ubg1CNmD,Iah1CL,WACI,MAAOjE,MAAKuc,Sbk1CXpY,YAAY,EACZC,cAAc,Iah1CnBvD,OAAAmD,eAAW2X,YAAA7a,UAAA,abm1CNmD,Ian1CL,WACI,MAAOjE,MAAKwc,abq1CXrY,YAAY,EACZC,cAAc,Ia/0CnBvD,OAAAmD,eAAW2X,YAAA7a,UAAA,Obk1CNmD,Ial1CL,WACI,MAAOjE,MAAKiZ,Mbo1CX9U,YAAY,EACZC,cAAc,Ia90CnBvD,OAAAmD,eAAW2X,YAAA7a,UAAA,iBbi1CNmD,Iaj1CL,WACI,MAAQjE,MAAa8c,mBbm1CpB3Y,YAAY,EACZC,cAAc,Iaj1CnBuX,YAAA7a,UAAAic,QAAA,SAAQ/X,GACJhF,KAAKgd,gBAAgB,WAEjBpb,EAAAqG,MAAMC,kBAAkBlD,KACxBA,EAAU2W,YAAYsB,iBAG1Bjd,KAAKkd,gBAAgBlY,GAEhBpD,EAAAqG,MAAMC,kBAAkBlI,KAAKmd,WAC9Bha,EAAArC,UAAMic,QAAOtc,KAAAT,KAACgF,GAUlBhF,KAAKwc,aAAc,GAQbb,YAAA7a,UAAAoc,gBAAV,SAA0BlY,GACtBqX,EAAAe,OAAOC,aAAard,OAGjB2b,YAAA7a,UAAAwc,MAAP,WACI,KAAM,IAAItC,OAAM,oBAMVW,YAAA7a,UAAAyc,yBAAV,WACIvd,KAAKwd,6BAMT7B,YAAA7a,UAAA0c,0BAAA,WACIxd,KAAKgd,gBAAgB,4BAErB,IAAIS,IACAN,UAAU,EAGd,IAAqB,MAAjBnd,KAAKmd,UAAoBnd,KAAKmd,SAASjR,OAAS,EAChD,IAAK,GAAInM,GAAIC,KAAKmd,SAASjR,OAAS,EAAGnM,GAAK,EAAGA,IACnB,MAApBC,KAAKmd,SAASpd,IACbC,KAAKmd,SAASpd,GAAWgd,QAAQU,EAK9Czd,MAAK0d,kBAGC/B,YAAA7a,UAAAkc,gBAAV,SAA0BW,KAWhBhC,YAAA7a,UAAA8c,aAAV,WACI5d,KAAK6d,iBAMTlC,YAAA7a,UAAA+c,cAAA,WACI7d,KAAKgd,gBAAgB,kBACrBhd,KAAKuc,SAAU,GAYZZ,YAAA7a,UAAAa,OAAP,SAAcmc,GACV9d,KAAK+d,aAAaD,GAClB9d,KAAKge,aAAaF,IASfnC,YAAA7a,UAAAid,aAAP,SAAoBD,GA6ChB,GAnCA9d,KAAKgd,gBAAgB,aAEJ,MAAbhd,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,UAGrBle,KAAKme,MAAQ7B,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAie,sBAAsBC,MAAOve,KAAKme,OAEjFL,EAAKU,aAAane,EAAAie,sBAAsBG,YACxCze,KAAK0e,SAAW1e,KAAK2e,gBAAgBC,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBG,aAGxFX,EAAKU,aAAane,EAAAie,sBAAsBQ,iBACpChB,EAAKe,aAAaxe,EAAAie,sBAAsBQ,kBAAoBze,EAAAie,sBAAsBQ,iBAElF9e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAK1Djf,KAAKyR,MAAMyN,EAAI5C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAie,sBAAsBa,QAASnf,KAAKyR,MAAMyN,GAC/Flf,KAAKyR,MAAM2N,EAAI9C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAie,sBAAsBe,QAASrf,KAAKyR,MAAM2N,GAE3FtB,EAAKU,aAAane,EAAAie,sBAAsBgB,SACxCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBgB,QAClEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBgB,SAGtEtf,KAAKuf,SAASL,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBmB,EAAGzf,KAAKuf,SAASL,GAC7Flf,KAAKuf,SAASH,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBoB,EAAG1f,KAAKuf,SAASH,GAE7Fpf,KAAK2f,MAAMT,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBsB,QAAS5f,KAAK2f,MAAMT,GAC7Flf,KAAK2f,MAAMP,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBuB,QAAS7f,KAAK2f,MAAMP,GAC7Fpf,KAAK8f,QAAUxD,EAAA8B,WAAW2B,uBAAuBjC,EAAMzd,EAAAie,sBAAsB0B,QAAShgB,KAAK8f,SAEvFhC,EAAKU,aAAane,EAAAie,sBAAsB2B,MAAO,CAC/CjgB,KAAKkgB,aAAe,GAAI/D,GAAAgE,YACxB,IAAIC,GAAqBjX,SAASkX,cAAcvC,EAAKe,aAAaxe,EAAAie,sBAAsB2B,MACxFG,GAAU9T,aAAa,YAAa,KACpC8T,EAAU9T,aAAa,QAAS,UAE5BwR,EAAKU,aAAane,EAAAie,sBAAsBgC,YACxCF,EAAU9T,aAAa,OAAQwR,EAAKe,aAAaxe,EAAAie,sBAAsBgC,YAEvExC,EAAKU,aAAane,EAAAie,sBAAsBiC,SACxCH,EAAU9T,aAAa,IAAKwR,EAAKe,aAAaxe,EAAAie,sBAAsBiC,SAEpEzC,EAAKU,aAAane,EAAAie,sBAAsBkC,SACxCJ,EAAU9T,aAAa,IAAKwR,EAAKe,aAAaxe,EAAAie,sBAAsBkC,SAEpE1C,EAAKU,aAAane,EAAAie,sBAAsBmC,aACxCL,EAAU9T,aAAa,QAASwR,EAAKe,aAAaxe,EAAAie,sBAAsBmC,aAExE3C,EAAKU,aAAane,EAAAie,sBAAsBoC,cACxCN,EAAU9T,aAAa,SAAUwR,EAAKe,aAAaxe,EAAAie,sBAAsBoC,cAEzE5C,EAAKU,aAAane,EAAAie,sBAAsBqC,YACxCP,EAAU9T,aAAa,OAAQwR,EAAKe,aAAaxe,EAAAie,sBAAsBqC,YAG3E3gB,KAAKkgB,aAAave,OAAOye,GACzBpgB,KAAK4gB,KAAO5gB,KAAKkgB,aACjBlgB,KAAKiS,SAASjS,KAAK4gB,MAEF,MAAb5gB,KAAK4gB,KAOb,GAAI9C,EAAKU,aAAane,EAAAie,sBAAsBuC,aAAc,CACtD,GAAIC,GAAQ5e,EAAAsD,gBAAgByJ,uBAAuB6O,EAAKe,aAAaxe,EAAAie,sBAAsBuC,aAE9E,OAATC,IACA9gB,KAAK+gB,WAAa,GAAI5W,MAAK6W,OAAOF,GAC9BhD,EAAKU,aAAane,EAAAie,sBAAsB2C,iBACxCjhB,KAAK+gB,WAAWxB,SAASL,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsB2C,iBAEhFnD,EAAKU,aAAane,EAAAie,sBAAsB4C,iBACxClhB,KAAK+gB,WAAWxB,SAASH,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsB4C,iBAGhFpD,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWpB,MAAMT,EAAIhJ,SAAS4H,EAAKe,aAAa,sBAGrDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWpB,MAAMP,EAAIlJ,SAAS4H,EAAKe,aAAa,sBAGrDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWtP,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,sBAGvDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWtP,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,sBAEtDf,EAAKU,aAAane,EAAAie,sBAAsB6C,oBACzCnhB,KAAKiS,SAASjS,KAAK+gB,YACnB/gB,KAAK4gB,KAAO5gB,KAAK+gB,aAczBjD,EAAKU,aAAane,EAAAie,sBAAsB8C,gBACxCphB,KAAK2c,aAAemB,EAAKe,aAAaxe,EAAAie,sBAAsB8C,eAGvC,MAArBphB,KAAKkgB,eACDpC,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa;AAGzDf,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,gBAGzDf,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASL,EAAIN,WAAWd,EAAKe,aAAa,WAG5Df,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASH,EAAIR,WAAWd,EAAKe,aAAa,aAejElD,YAAA7a,UAAAkd,aAAP,SAAoBF,GAChB,MAAKA,IAeAA,EAAKU,aAAa,iBAC4C,GAA/D5c,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,kBAE3CxC,EAAAe,OAAOC,aAAard,MAGxBA,KAAK8f,QAAUxD,EAAA8B,WAAW2B,uBAAuBjC,EAAMzd,EAAAie,sBAAsB0B,QAAShgB,KAAK8f,SAC3F9f,KAAKme,MAAQ7B,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAie,sBAAsBC,MAAOve,KAAKme,OACrFne,KAAK2f,MAAMT,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBsB,QAAS5f,KAAK2f,MAAMT,GAC7Flf,KAAK2f,MAAMP,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBuB,QAAS7f,KAAK2f,MAAMP,GAEzFtB,EAAKU,aAAane,EAAAie,sBAAsBG,YACxCze,KAAK0e,SAAW1e,KAAK2e,gBAAgBC,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBG,aAGxFX,EAAKU,aAAane,EAAAie,sBAAsBQ,iBACpChB,EAAKe,aAAaxe,EAAAie,sBAAsBQ,kBAAoBze,EAAAie,sBAAsBQ,iBAClF9e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAI1Djf,KAAKuf,SAASL,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBmB,EAAGzf,KAAKuf,SAASL,GAC7Flf,KAAKuf,SAASH,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBoB,EAAG1f,KAAKuf,SAASH,GAEzFtB,EAAKU,aAAane,EAAAie,sBAAsBa,WACxCnf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBa,WAGlErB,EAAKU,aAAane,EAAAie,sBAAsBe,WACxCrf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBe,WAGlEvB,EAAKU,aAAane,EAAAie,sBAAsBgB,SACxCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBgB,QAClEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAie,sBAAsBgB,SAGtEtf,KAAKqhB,cAAcvD,GACnB9d,KAAKshB,iBAAiBxD,GACtB9d,KAAKuhB,iBAAiBzD,GACtB9d,KAAKwhB,cAAc1D,OACnB9d,MAAKyhB,SAAS3D,QAvDV9d,MAAK0hB,SAAS,0CAgEf/F,YAAA7a,UAAAugB,cAAP,SAAqBvD,GAArB,GAAAtE,GAAAxZ,IACI,KAAK8d,EAAKU,aAAane,EAAAie,sBAAsBqD,aACzC,OAAO,CAGX,IAAIC,GAEAC,EAA6BvF,EAAA8B,WAAW0D,sBACxChE,EACAzd,EAAAie,sBAAsByD,qBACtB,KAGAF,IAAsBxhB,EAAAie,sBAAsB0D,2BAA2BC,SACvEL,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsBqD,cAAcS,IACtF,SAACrV,GAAU,MAAAA,GAAQyM,EAAK2E,QAErB0D,GAAsBxhB,EAAAie,sBAAsB0D,2BAA2BK,QAC9ET,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsBqD,cACxEC,EAAW1V,SACX0V,EAAW,GAAK5hB,KAAKme,QAGzByD,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsBqD,aAGhF,IAAMW,GAAwBV,MAExBW,EAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAie,sBAAsBkE,iBAAkB,MACnGC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAie,sBAAsBoE,qBACtB,KAEEC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBsE,kBAAmB,GAClGC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAie,sBAAsBwE,iBACtB,KAGJzG,GAAAe,OAAOwE,WAAW5hB,MAAQsiB,SAAQC,YAAWE,gBAAeE,aAAYE,eASrElH,YAAA7a,UAAAwgB,iBAAP,SAAwBxD,GAAxB,GAAAtE,GAAAxZ,IACI,KACK8d,EAAKU,aAAane,EAAAie,sBAAsByE,oBACxCjF,EAAKU,aAAane,EAAAie,sBAAsB0E,kBAEzC,OAAO,CAGX,IAAIC,GACAC,EAEAC,EAAgC7G,EAAA8B,WAAW0D,sBAC3ChE,EACAzd,EAAAie,sBAAsB8E,wBACtB,KAEAD,IAAyB9iB,EAAAie,sBAAsB+E,8BAA8BpB,UAC7EgB,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsByE,mBAAmBX,IAC/F,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASL,IAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsB0E,mBAAmBZ,IAC/F,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASH,MAGrC6D,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsByE,mBAChFG,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsB0E,mBAGpF,IAAMM,GAAwBL,MACxBM,EAAwBL,MACxBX,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAie,sBAAsBkF,oBACtB,MAEEf,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAie,sBAAsBmF,wBACtB,KAEEd,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsBoF,qBAAsB,GACrGb,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAie,sBAAsBqF,oBACtB,KAGJtH,GAAAe,OAAOwG,cAAc5jB,MAAQsjB,SAAQC,SAAQhB,YAAWE,gBAAeE,aAAYE,eAShFlH,YAAA7a,UAAAygB,iBAAP,SAAwBzD,GACpB,IAAKA,EAAKU,aAAane,EAAAie,sBAAsBuF,gBACzC,OAAO,CAGX,IAAIC,GAA+BliB,EAAAsgB,WAAWC,YAC1CrE,EAAKe,aAAaxe,EAAAie,sBAAsBuF,iBAGtCE,EAAyBD,MAEzBvB,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAie,sBAAsB0F,oBACtB,MAEEvB,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAie,sBAAsB2F,wBACtB,KAEEtB,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsB4F,qBAAsB,GACrGrB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAie,sBAAsB6F,oBACtB,KAGJ9H,GAAAe,OAAO0G,cAAc9jB,MAAQ+jB,UAASxB,YAAWE,gBAAeE,aAAYE,eAUzElH,YAAA7a,UAAA0gB,cAAP,SAAqB1D,GAArB,GACQsG,GACAC,EACAC,EAHR9K,EAAAxZ,KAIQukB,IAgBJ,IAdIzG,EAAKU,aAAane,EAAAie,sBAAsBkG,iBACxCJ,EAAcxiB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsBkG,iBAG7E1G,EAAKU,aAAane,EAAAie,sBAAsBmG,iBACxCJ,EAAcziB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAie,sBAAsBmG,iBAG7E3G,EAAKU,aAAane,EAAAie,sBAAsBoG,eACxCJ,EAAa3I,YAAYgJ,8BACrB7G,EAAKe,aAAaxe,EAAAie,sBAAsBoG,eAI5CJ,GAAcA,EAAWpY,OACzBqY,EAAcD,MACX,IAAIF,GAAeC,EAClBD,EAAYlY,SAAWmY,EAAYnY,SACnCqY,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAGiF,EAAYtkB,WAIxB,IAAIqkB,EACPG,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAG5F,EAAK/H,MAAM2N,SAGnB,KAAIiF,EAQP,OAAO,CAPPE,GAAcF,EAAYjC,IAAI,SAACyC,EAAqB9kB,GAChD,OACImf,EAAG1F,EAAK/H,MAAMyN,EACdE,EAAGyF,KAOf,GAAMtC,GAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAie,sBAAsBwG,iBAAkB,MACnGrC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAie,sBAAsByG,qBACtB,KAEEpC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAie,sBAAsB0G,kBAAmB,GAClGnC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAie,sBAAsB2G,iBACtB,KAGJ5I,GAAAe,OAAOkH,WAAWtkB,MAAQukB,cAAahC,YAAWE,gBAAeE,aAAYE,eAG1ElH,YAAA7a,UAAA2gB,SAAP,SAAgB3D,GACZ,GAAIA,EAAKU,aAAanC,EAAA6I,iBAAiBC,OAGnC,IAAK,GAFDC,GAAwBxjB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBC,QAE7EplB,EAAY,EAAGA,EAAIqlB,EAAOlZ,OAAQnM,IAAK,CAE5C,IAAK+d,EAAKU,aAAanC,EAAA6I,iBAAiBI,aAAevlB,GACnD,OAAO,CAGX,IAAIwlB,GAAgBH,EAAOrlB,GAErBwkB,EAA6BvkB,KAAKwlB,kBACpCD,EACA3jB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBI,aAAevlB,KAEvE0iB,EAA+B7gB,EAAAsgB,WAAWC,YAC5CrE,EAAKe,aAAaxC,EAAA6I,iBAAiBO,eAAiB1lB,IAAM,OAExDwiB,EAA2B3gB,EAAAsgB,WAAWmD,YACxCvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,WAAa3lB,IAAM,UAEpD4iB,EAA4B/gB,EAAAsgB,WAAWC,YACzCrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,YAAc5lB,IAAM,KAErD8iB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzB,EAAA6I,iBAAiBU,WAAa7lB,EAC9B,KAGS,UAATwlB,IACAA,EAAQ,UACRH,EAAOrlB,GAAK,UACZA,KAGJsc,EAAAe,OAAOyI,YAAY7lB,MAAQulB,QAAOhB,cAAahC,YAAWE,gBAAeE,aAAYE,cAI7F,OAAO,GAGJlH,YAAA7a,UAAA0kB,kBAAP,SAAyBD,EAAeO,GACpC,GAAIvB,KAEU,WAAVgB,IACAA,EAAQ,UAKZ,KAAK,GAFDxY,GADAgZ,EAA0BR,EAAMS,MAAM,KAGjCjmB,EAAY,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IAAK,CAC5C,GAAI+H,GAAUge,EAAO/lB,EACrB,QAAQ+H,EAAQA,EAAQoE,OAAS,IAC7B,IAAK,IACsB,GAAnB6Z,EAAS7Z,QACTa,EAAQ/M,KAAK+lB,EAAS,IACF,aAAhBA,EAAS,KACThZ,EAAQ/M,KAAKimB,gBAAgBlZ,IAEjCwX,EAAYvR,KAAKjG,IACS,GAAnBgZ,EAAS7Z,QAChBqY,EAAYvR,KAAKhT,KAAK+lB,EAAS,IAAIA,EAAS,IAGhD,MACJ,KAAK,IACDhZ,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAEd,YAAf6kB,EAAS,KACU,KAAfA,EAAS,GACThZ,EAAQ/M,KAAKuf,SAASL,GAAKnS,EAAQ/M,KAAKkmB,oBAAoBhH,GACtC,KAAf6G,EAAS,KAChBhZ,EAAQ/M,KAAKuf,SAASH,GAAKrS,EAAQ/M,KAAKkmB,oBAAoB9G,KAIpEmF,EAAYvR,KAAKjG,EACjB,MACJ,SACIwX,EAAYvR,KAAK4L,WAAW9W,KAIxC,MAAOyc,IAQM5I,YAAAgJ,8BAAjB,SAA+CwB,GAC3C,MAAKA,GAIEA,EACF/Y,QAAQ,MAAO,IACf4Y,MAAM,KACN5D,IAAI,SAACgE,GACF,cAAQ1S,KAAK0S,GAAcA,EAAWllB,MAAM,MAAO8kB,MAAM,MAAQI,EAAYA,KAEhFhE,IAAI,SAACgE,GACF,OAASlH,EAAGN,WAAWwH,EAAW,IAAKhH,EAAGR,WAAWwH,EAAW,WAUlEzK,YAAA7a,UAAAsX,IAAV,SAAcC,KAWJsD,YAAA7a,UAAA4gB,SAAV,SAAmBrJ,KAYZsD,YAAA7a,UAAA6d,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAQzB1K,YAAA7a,UAAAmlB,gBAAP,SAAuBK,GACnB,MAAOA,IAAW,IAAMvH,KAAKsH,KAG1B1K,YAAA7a,UAAAylB,YAAP,SAAmBC,GACXA,EACIxmB,KAAKkgB,eACLlgB,KAAK4gB,KAAO5gB,KAAKkgB,aACjBlgB,KAAKiS,SAASjS,KAAKkgB,gBAGvBlgB,KAAKymB,YAAYzmB,KAAKkgB,cACtBlgB,KAAK4gB,KAAO,OAhxBbjF,YAAAsB,iBACHE,UAAU,GAblBxB,YAAAC,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBb83DxBjL,ca73DyBxR,KAAKqH,UAAzBnR,GAAAsb,YAAWA,EAgyBXtb,EAAAie,uBAOTC,MAAO,QAEPoD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBACtBI,iBAAkB,iBAClBf,qBAAsB,qBACtBC,4BACI6E,SAAU,WACV5E,SAAU,WACVI,OAAQ,UASZxB,YAAa,aACbM,iBAAkB,iBAClBF,cAAe,cACfC,cAAe,cACf4F,MAAO,QAQP7G,KAAM,OACNM,OAAQ,QACRC,OAAQ,QACRC,WAAY,YACZC,YAAa,aACbC,UAAW,WACXL,UAAW,WAOXV,QAAS,SAOTC,QAAS,SACTkD,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAEd0B,oBAAqB,oBAIrBE,eAAgB,gBAIhBkD,uBAAwB,uBACxB7C,qBAAsB,qBACtBD,wBAAyB,wBACzBD,oBAAqB,oBACrBG,oBAAqB,oBAOrB1F,SAAU,WACViG,YAAa,aACbM,kBAAmB,kBAInBD,qBAAsB,qBACtBD,iBAAkB,iBAClBG,iBAAkB,iBAClBT,cAAe,cACfC,cAAe,cAcfnF,MAAO,QACPH,QAAS,SAQTE,QAAS,SAOTP,eAAgB,gBAChBsC,aAAc,cAOdpB,QAAS,UAOTP,EAAG,IAOHC,EAAG,Mb2gCD,SAASpf,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,Gc79DjEna,EAAAzB,EAAwE,GACxEic,EAAAjc,EAA+B,IAC/Bkc,EAAAlc,EAAqD,IAErD6mB,EAAA7mB,EAA6B,IAE7Bmc,EAAAnc,EAA2B,IAmB3BggB,EAAA,SAAAhd,GAAkC5B,EAAA4e,aAAAhd,EAiB9B,SAAAgd,gBACIhd,EAAA1C,KAAAT,MAhBGA,KAAAinB,OAAiB,SAOjBjnB,KAAAknB,MAAgB,OAWnBlnB,KAAKiZ,KAAUjZ,KAAKyc,cAAa,IAAI7a,EAAAqG,MAAM8Q,eA6pBnD,MA1pBIlY,QAAAmD,eAAImc,aAAArf,UAAA,ed67DCmD,Ic77DL,WACI,MAAOjE,MAAK2c,cd+7DXC,Ic57DL,SAAgBC,GACZ7c,KAAK2c,aAAeE,Gd87DnB1Y,YAAY,EACZC,cAAc,Ic57DT+b,aAAArf,UAAAoc,gBAAV,SAA0BlY,GACtBqX,EAAAe,OAAOC,aAAard,OAGjBmgB,aAAArf,UAAAa,OAAP,SAAcmc,GACV9d,KAAK+d,aAAaD,GAClB9d,KAAKge,aAAaF,IAStBqC,aAAArf,UAAAid,aAAA,SAAaD,GAUT9d,KAAKmnB,gBAAkBrJ,EAEN,MAAb9d,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,UAGjBJ,EAAKU,aAAane,EAAA+mB,uBAAuBC,SACzCrnB,KAAK6R,MAAqBmV,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAA+mB,uBAAuBC,QACrE,MAAdrnB,KAAK6R,OAQb7R,KAAKinB,OAAS3K,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBI,MAAOxnB,KAAKinB,OAAQ,IAC7FjnB,KAAKynB,WAAanL,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAA+mB,uBAAuBM,WAAY1nB,KAAKynB,YAChGznB,KAAK2nB,WAAarL,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBQ,WAAY5nB,KAAK2nB,YAC9F3nB,KAAK6nB,WAAavL,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBU,WAAY9nB,KAAK6nB,WAAY,IAEtG/J,EAAKU,aAAane,EAAA+mB,uBAAuBjI,WACzCnf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuBjI,WAGnErB,EAAKU,aAAane,EAAA+mB,uBAAuB/H,WACzCrf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB/H,WAGnEvB,EAAKU,aAAane,EAAA+mB,uBAAuB9H,SACzCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB9H,QACnEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB9H,SAGnExB,EAAKU,aAAane,EAAA+mB,uBAAuB3H,KACzCzf,KAAKuf,SAASL,EAAIhJ,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuB3H,KAGpE3B,EAAKU,aAAane,EAAA+mB,uBAAuB1H,KACzC1f,KAAKuf,SAASH,EAAIlJ,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuB1H,KAGpE5B,EAAKU,aAAane,EAAA+mB,uBAAuBW,SACzC/nB,KAAKgoB,OAAS9R,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuBW,SAGhEjK,EAAKU,aAAane,EAAA+mB,uBAAuBa,UACzCjoB,KAAKkoB,QAAUhS,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuBa,UAGjEnK,EAAKU,aAAane,EAAA+mB,uBAAuBe,UACzCnoB,KAAKooB,QAAUlS,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuBe,UAGjErK,EAAKU,aAAane,EAAA+mB,uBAAuBiB,OACzCroB,KAAKsoB,QACLtoB,KAAKuoB,UAAUvoB,KAAKinB,OAAQjnB,KAAKynB,YACjCznB,KAAKwoB,UAAUxoB,KAAK2nB,WAAY3nB,KAAK6nB,YACrC7nB,KAAKoS,KAAK0L,EAAMA,EAAKe,aAAaxe,EAAA+mB,uBAAuBiB,OACzDroB,KAAKyoB,YAGD3K,EAAKU,aAAane,EAAA+mB,uBAAuBW,SACzC/nB,KAAKgoB,OAAS9R,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuBW,SAOhEjK,EAAKU,aAAane,EAAA+mB,uBAAuBa,UACzCjoB,KAAKkoB,QAAUhS,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuBa,UAOlD,MAAfjoB,KAAKgoB,QAAkC,MAAhBhoB,KAAKkoB,UAC5BloB,KAAKsoB,QACLtoB,KAAKuoB,UAAUvoB,KAAKinB,OAAQjnB,KAAKynB,YACjCznB,KAAKwoB,UAAUxoB,KAAK2nB,WAAY3nB,KAAK6nB,YACrC7nB,KAAK0oB,SAAS,EAAG,EAAG1oB,KAAKgoB,OAAQhoB,KAAKkoB,SACtCloB,KAAKyoB,YAIT3K,EAAKU,aAAane,EAAA+mB,uBAAuBpH,WACzChgB,KAAK8f,QAAUle,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA+mB,uBAAuBpH,YAejFG,aAAArf,UAAAsR,KAAR,SAAa0L,EAAe6K,GAExB,OADA3oB,KAAKknB,MAAQyB,EACLA,GACJ,IAAK,SACD3oB,KAAK4oB,WAAW,EAAG,EAAG5oB,KAAKooB,QAC3B,MACJ,KAAK,UACDpoB,KAAK6oB,YAAY,EAAG,EAAG7oB,KAAKgoB,OAAQhoB,KAAKkoB,QACzC,MACJ,KAAK,UAGD,IAAK,GAFCY,GAAOhL,EAAKU,aAAa,QAAU5c,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAa,QAAS,QACvFkK,KACKhpB,EAAI,EAAGA,EAAI+oB,EAAK5c,OAAQnM,IAAK,CAClC,GAAMipB,GAAQpnB,EAAAsgB,WAAWC,YAAY2G,EAAK/oB,GAC1CgpB,GAAO/V,KAAK,GAAI7I,MAAK8e,MAAMD,EAAM,GAAIA,EAAM,KAE/ChpB,KAAKkpB,YAAYH,EACjB,MACJ,KAAK,OACD/oB,KAAK0oB,SAAS,EAAG,EAAG1oB,KAAKgoB,OAAQhoB,KAAKkoB,QACtC,MACJ,KAAK,cACD,GAAMiB,GAAWrL,EAAKU,aAAa,QAC7B5c,EAAAsgB,WAAWkH,cAActL,EAAKe,aAAa,QAAS,OAE1D,IAAuB,GAAnBsK,EAASjd,OACTlM,KAAKqpB,gBAAgB,EAAG,EAAGrpB,KAAKgoB,OAAQhoB,KAAKkoB,QAASloB,KAAKooB,aAE3D,KAAK,GAAIroB,GAAI,EAAGA,EAAIopB,EAASjd,OAAQnM,IACjCC,KAAKqpB,gBAAgBF,EAASppB,GAAG,GAAIopB,EAASppB,GAAG,GAAIC,KAAKgoB,OAAQhoB,KAAKkoB,QAASloB,KAAKooB,WAelGjI,aAAArf,UAAAkd,aAAP,SAAoBF,GAgDhB,GAtCAzB,EAAAe,OAAOC,aAAard,MAEhB8d,EAAKU,aAAane,EAAA+mB,uBAAuBpH,WACzChgB,KAAK8f,QAAUle,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA+mB,uBAAuBpH,WAGjFlC,EAAKU,aAAane,EAAA+mB,uBAAuB7I,SACzCve,KAAKme,MAAQS,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB7I,SAGrEve,KAAK2f,MAAMT,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBxH,QAAS5f,KAAK2f,MAAMT,GAC9Flf,KAAK2f,MAAMP,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBvH,QAAS7f,KAAK2f,MAAMP,GAE1FtB,EAAKU,aAAane,EAAA+mB,uBAAuB3I,YACzCze,KAAK0e,SAAW1e,KAAK2e,gBAAgBC,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB3I,aAGzFX,EAAKU,aAAane,EAAA+mB,uBAAuB3H,KACzCzf,KAAKuf,SAASL,EAAIhJ,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuB3H,KAGpE3B,EAAKU,aAAane,EAAA+mB,uBAAuB1H,KACzC1f,KAAKuf,SAASH,EAAIlJ,SAAS4H,EAAKe,aAAaxe,EAAA+mB,uBAAuB1H,KAGpE5B,EAAKU,aAAane,EAAA+mB,uBAAuBjI,WACzCnf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuBjI,WAGnErB,EAAKU,aAAane,EAAA+mB,uBAAuB/H,WACzCrf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB/H,WAGnEvB,EAAKU,aAAane,EAAA+mB,uBAAuB9H,SACzCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB9H,QACnEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAA+mB,uBAAuB9H,SAGnExB,EAAKU,aAAane,EAAA+mB,uBAAuBnH,MAAO,CAEhD,IADA,GAAIqJ,GAAgBxL,EAAKhG,cAAcyR,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKpL,WAAaJ,EAAKe,aAAaxe,EAAA+mB,uBAAuBnH,MAAO,CAClE,GAAIuJ,GAA6B,GAAIrJ,aACrCqJ,GAAa7nB,OAAO2nB,GACpBtpB,KAAK4gB,KAAO4I,EAEhBF,EAAOA,EAAKG,mBAGC,MAAbzpB,KAAK4gB,KAOb5gB,KAAKqhB,cAAcvD,GACnB9d,KAAKshB,iBAAiBxD,GACtB9d,KAAKuhB,iBAAiBzD,GACtB9d,KAAKwhB,cAAc1D,GACnB9d,KAAKyhB,SAAS3D,IAgBXqC,aAAArf,UAAAugB,cAAP,SAAqBvD,GACjB,IAAKA,EAAKU,aAAane,EAAA+mB,uBAAuBzF,aAC1C,OAAO,CAGX,IAAIC,GAA4BhgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBzF,cAE1FW,EAAwBV,MAExBW,EAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAA+mB,uBAAuB5E,iBAAkB,MACpGC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAA+mB,uBAAuB1E,qBACvB,KAEEC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBxE,kBAAmB,GACnGC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAA+mB,uBAAuBtE,iBACvB,KAGJzG,GAAAe,OAAOwE,WAAW5hB,MAAQsiB,SAAQC,YAAWE,gBAAeE,aAAYE,eASrE1C,aAAArf,UAAAwgB,iBAAP,SAAwBxD,GAAxB,GAAAtE,GAAAxZ,IACI,KACK8d,EAAKU,aAAane,EAAA+mB,uBAAuBrE,oBACzCjF,EAAKU,aAAane,EAAA+mB,uBAAuBpE,kBAE1C,OAAO,CAGX,IAAIC,GACAC,EAEAC,EAAgC7G,EAAA8B,WAAW0D,sBAC3ChE,EACAzd,EAAA+mB,uBAAuBhE,wBACvB,KAEAD,IAAyB9iB,EAAA+mB,uBAAuB/D,8BAA8BpB,UAC9EgB,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBrE,mBAAmBX,IAChG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASL,IAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBpE,mBAAmBZ,IAChG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASH,MAGrC6D,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBrE,mBACjFG,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBpE,mBAGrF,IAAMM,GAAwBL,MACxBM,EAAwBL,MACxBX,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAA+mB,uBAAuB5D,oBACvB,MAEEf,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAA+mB,uBAAuB3D,wBACvB,KAEEd,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuB1D,qBAAsB,GACtGb,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAA+mB,uBAAuBzD,oBACvB,KAGJtH,GAAAe,OAAOwG,cAAc5jB,MAAQsjB,SAAQC,SAAQhB,YAAWE,gBAAeE,aAAYE,eAShF1C,aAAArf,UAAAygB,iBAAP,SAAwBzD,GACpB,IAAKA,EAAKU,aAAane,EAAA+mB,uBAAuBvD,gBAC1C,OAAO,CAGX,IAAIC,GAA+BliB,EAAAsgB,WAAWC,YAC1CrE,EAAKe,aAAaxe,EAAA+mB,uBAAuBvD,iBAGvCE,EAAyBD,MAEzBvB,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAA+mB,uBAAuBpD,oBACvB,MAEEvB,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAA+mB,uBAAuBnD,wBACvB,KAEEtB,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBlD,qBAAsB,GACtGrB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAA+mB,uBAAuBjD,oBACvB,KAGJ9H,GAAAe,OAAO0G,cAAc9jB,MAAQ+jB,UAASxB,YAAWE,gBAAeE,aAAYE,eAUzE1C,aAAArf,UAAA0gB,cAAP,SAAqB1D,GAArB,GACQsG,GACAC,EACAC,EAHR9K,EAAAxZ,KAIQukB,IAgBJ,IAdIzG,EAAKU,aAAane,EAAA+mB,uBAAuB5C,iBACzCJ,EAAcxiB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuB5C,iBAG9E1G,EAAKU,aAAane,EAAA+mB,uBAAuB3C,iBACzCJ,EAAcziB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA+mB,uBAAuB3C,iBAG9E3G,EAAKU,aAAane,EAAA+mB,uBAAuB1C,eACzCJ,EAAanE,aAAawE,8BACtB7G,EAAKe,aAAaxe,EAAA+mB,uBAAuB1C,eAI7CJ,GAAcA,EAAWpY,OACzBqY,EAAcD,MACX,IAAIF,GAAeC,EAClBD,EAAYlY,SAAWmY,EAAYnY,SACnCqY,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAGiF,EAAYtkB,WAIxB,IAAIqkB,EACPG,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAG5F,EAAK/H,MAAM2N,SAGnB,KAAIiF,EAQP,OAAO,CAPPE,GAAcF,EAAYjC,IAAI,SAACyC,EAAqB9kB,GAChD,OACImf,EAAG1F,EAAK/H,MAAMyN,EACdE,EAAGyF,KAOf,GAAMtC,GAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAA+mB,uBAAuBtC,iBAAkB,MACpGrC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAA+mB,uBAAuBrC,qBACvB,KAEEpC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAA+mB,uBAAuBpC,kBAAmB,GACnGnC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAA+mB,uBAAuBnC,iBACvB,KAGJ5I,GAAAe,OAAOkH,WAAWtkB,MAAQukB,cAAahC,YAAWE,gBAAeE,aAAYE,eAQ1E1C,aAAArf,UAAA2gB,SAAP,SAAgB3D,GACZ,GAAIA,EAAKU,aAAanC,EAAA6I,iBAAiBC,OAGnC,IAAK,GAFDC,GAAwBxjB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBC,QAE7EplB,EAAY,EAAGA,EAAIqlB,EAAOlZ,OAAQnM,IAAK,CAE5C,IAAK+d,EAAKU,aAAanC,EAAA6I,iBAAiBI,aAAevlB,GACnD,OAAO,CAGX,IAAIwlB,GAAgBH,EAAOrlB,GAErBwkB,EAA6BvkB,KAAKwlB,kBACpCD,EACA3jB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBI,aAAevlB,KAEvE0iB,EAA+B7gB,EAAAsgB,WAAWC,YAC5CrE,EAAKe,aAAaxC,EAAA6I,iBAAiBO,eAAiB1lB,IAAM,OAExDwiB,EAA2B3gB,EAAAsgB,WAAWmD,YACxCvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,WAAa3lB,IAAM,UAEpD4iB,EAA4B/gB,EAAAsgB,WAAWC,YACzCrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,YAAc5lB,IAAM,KAErD8iB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzB,EAAA6I,iBAAiBU,WAAa7lB,EAC9B,KAGS,UAATwlB,IACAA,EAAQ,UACRH,EAAOrlB,GAAK,UACZA,KAGJsc,EAAAe,OAAOyI,YAAY7lB,MAAQulB,QAAOhB,cAAahC,YAAWE,gBAAeE,aAAYE,cAI7F,OAAO,GAQX1C,aAAArf,UAAAwc,MAAA,WACI,GAAIjU,GAAwB,GAAI8W,aA4BhC,OA3BA9W,GAAQ1H,OAAO3B,KAAKmnB,iBACpB9d,EAAQqU,iBAERrU,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQqgB,KAAO1pB,KAAK0pB,KACpBrgB,EAAQsgB,UAAY3pB,KAAK2pB,UACzBtgB,EAAQ4U,KAAOje,KAAKie,KAEpB5U,EAAQ4d,OAASjnB,KAAKinB,OACtB5d,EAAQoe,WAAaznB,KAAKynB,WAC1Bpe,EAAQ6d,MAAQlnB,KAAKknB,MAEF,SAAflnB,KAAKknB,QACL7d,EAAQif,QACRjf,EAAQkf,UAAUvoB,KAAKinB,OAAQjnB,KAAKynB,YACpCpe,EAAQqf,SAAS,EAAG,EAAG1oB,KAAKgoB,OAAQhoB,KAAKkoB,SACzC7e,EAAQof,WAGLpf,GAGD8W,aAAArf,UAAA0kB,kBAAV,SAA4BD,EAAeO,GACvC,GAAIvB,KAEU,WAAVgB,IACAA,EAAQ,UAKZ,KAAK,GAFDxY,GADAgZ,EAA0BR,EAAMS,MAAM,KAGjCjmB,EAAY,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IAAK,CAC5C,GAAI+H,GAAUge,EAAO/lB,EACrB,QAAQ+H,EAAQA,EAAQoE,OAAS,IAC7B,IAAK,IACsB,GAAnB6Z,EAAS7Z,QACTa,EAAQ/M,KAAK+lB,EAAS,IACF,aAAhBA,EAAS,KACThZ,EAAQ/M,KAAKimB,gBAAgBlZ,IAEjCwX,EAAYvR,KAAKjG,IACS,GAAnBgZ,EAAS7Z,QAChBqY,EAAYvR,KAAKhT,KAAK+lB,EAAS,IAAIA,EAAS,IAGhD,MACJ,KAAK,IACDhZ,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,SACIwX,EAAYvR,KAAK4L,WAAW9W,KAIxC,MAAOyc,IAQMpE,aAAAwE,8BAAjB,SAA+CwB,GAC3C,MAAKA,GAIEA,EACF/Y,QAAQ,MAAO,IACf4Y,MAAM,KACN5D,IAAI,SAACgE,GACF,cAAQ1S,KAAK0S,GAAcA,EAAWllB,MAAM,MAAO8kB,MAAM,MAAQI,EAAYA,KAEhFhE,IAAI,SAACgE,GACF,OAASlH,EAAGN,WAAWwH,EAAW,IAAKhH,EAAGR,WAAWwH,EAAW,WAQ5EvlB,OAAAmD,eAAWmc,aAAArf,UAAA,OdivDNmD,IcjvDL,WACI,MAAOjE,MAAKiZ,MdmvDX9U,YAAY,EACZC,cAAc,Ic7uDnBvD,OAAAmD,eAAWmc,aAAArf,UAAA,iBdgvDNmD,IchvDL,WACI,MAAQjE,MAAa8c,mBdkvDpB3Y,YAAY,EACZC,cAAc,Ic3uDZ+b,aAAArf,UAAA6d,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAQzBlG,aAAArf,UAAAmlB,gBAAP,SAAuBK,GACnB,MAAOA,IAAW,IAAMvH,KAAKsH,KASvBlG,aAAArf,UAAAsX,IAAV,SAAcC,KAWJ8H,aAAArf,UAAA4gB,SAAV,SAAmBrJ,KA5qBvB8H,aAAAvE,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBd+4ExBzG,ec94E0BhW,KAAKyf,SAA1BvpB,GAAA8f,aAAYA,EAmrBZ9f,EAAA+mB,wBAOT7I,MAAO,QAEPoD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBACtBI,iBAAkB,iBAOlB0E,MAAO,QACPa,KAAM,OACNvB,MAAO,QACPY,WAAY,YAOZO,OAAQ,SACRH,WAAY,YACZF,WAAY,YAQZ3H,KAAM,OAONL,QAAS,SAOTC,QAAS,SACTkD,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAEd0B,oBAAqB,oBAOrBlF,SAAU,WACVoF,eAAgB,gBAChBG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBC,oBAAqB,oBACrBgE,OAAQ,SAOR7I,MAAO,QACPH,QAAS,SAQTE,QAAS,SACTqF,YAAa,aACbM,kBAAmB,kBAInBD,qBAAsB,qBACtBD,iBAAkB,iBAClBG,iBAAkB,iBAClBT,cAAe,cACfC,cAAe,cACf4C,MAAO,QAOPrH,QAAS,UAOT+H,MAAO,QAOPtI,EAAG,IAOHC,EAAG,MdipDD,SAASpf,EAAQD,GAEtB,Yep+EYA,GAAAsmB,gBACTkD,QAAS,UACTjD,cAAe,gBACfkD,YAAa,cACbC,SAAU,WACVC,KAAM,OACNC,MAAO,QACPC,UAAW,YACXC,WAAY,aACZC,cAAe,gBACfC,UAAW,cf2+ET,SAAS/pB,EAAQD,EAASF,GAE/B,YgBv/ED,IACAmqB,IADAnqB,EAAuB,GACvBA,EAA4B,KAwH5Bid,EAAA,mBAAAA,WAmdA,MAxcWA,QAAAmN,cAAP,SAAqBC,EAAajF,GACnB,MAAPiF,IAC8B,MAA1BpN,OAAOqN,WAAWD,GAClBpN,OAAOqN,WAAWD,GAAKxX,KAAKuS,GAE5BnI,OAAOqN,WAAWD,IAAQjF,KAU/BnI,OAAAsN,oBAAP,SAA2BF,GAEvB,MAAW,OAAPA,EAC8B,MAA1BpN,OAAOqN,WAAWD,IAEdpF,OAAQhI,OAAOqN,WAAWD,GAC1Bte,OAAQkR,OAAOqN,WAAWD,GAAKte,QAGhC,MAGHkZ,OAAQhI,OAAOqN,WACfve,OAAQrL,OAAO8pB,KAAKvN,OAAOqN,YAAYve,SAU5CkR,OAAAwN,wBAAP,SAA+BJ,EAAazE,GACxC,GADwC,SAAAA,MAAA,OAC7B,MAAPyE,GAC8B,MAA1BpN,OAAOqN,WAAWD,GAClB,IAAK,GAAIzqB,GAAYqd,OAAOqN,WAAWD,GAAKte,OAAS,EAAGnM,GAAK,EAAGA,IAAK,CACjE,GAAIwlB,GAAanI,OAAOqN,WAAWD,GAAKzqB,EAErB,gBAAfwlB,EAAMtH,MAAuC,UAAb8H,GAAqC,QAAbA,IACxD3I,OAAOqN,WAAWD,GAAKzqB,GAAK,KAC5Bqd,OAAOqN,WAAWD,GAAKtX,OAAOnT,EAAG,IAElB,kBAAfwlB,EAAMtH,MAA0C,aAAb8H,GAAwC,QAAbA,IAC9D3I,OAAOqN,WAAWD,GAAKzqB,GAAK,KAC5Bqd,OAAOqN,WAAWD,GAAKtX,OAAOnT,EAAG,IAElB,eAAfwlB,EAAMtH,MAAuC,UAAb8H,GAAqC,QAAbA,IACxD3I,OAAOqN,WAAWD,GAAKzqB,GAAK,KAC5Bqd,OAAOqN,WAAWD,GAAKtX,OAAOnT,EAAG,IAElB,kBAAfwlB,EAAMtH,MAA0C,aAAb8H,GAAwC,QAAbA,IAC9D3I,OAAOqN,WAAWD,GAAKzqB,GAAK,KAC5Bqd,OAAOqN,WAAWD,GAAKtX,OAAOnT,EAAG,IAGjCwlB,EAAMtH,OAAS8H,EAAW,SACb,UAAbA,GACa,aAAbA,GACa,UAAbA,GACa,aAAbA,IAEA3I,OAAOqN,WAAWD,GAAKzqB,GAAK,KAC5Bqd,OAAOqN,WAAWD,GAAKtX,OAAOnT,EAAG,MAQ9Cqd,OAAAyN,cAAP,SAAqBL,GACjB,GAA8B,MAA1BpN,OAAOqN,WAAWD,GAClB,IAAK,GAAIzqB,GAAY,EAAGA,EAAIqd,OAAOqN,WAAWD,GAAKte,OAAQnM,IACvDqd,OAAOqN,WAAWD,GAAKzqB,GAAG+qB,WAc/B1N,OAAAC,aAAP,SAA0C0N,EAAWhF,GACjD,GADiD,SAAAA,MAAA,OAClCiF,SAAXD,GACkB,MAAdA,EAAOP,KAC8B,MAAjCpN,OAAOqN,WAAWM,EAAOP,MACrBpN,OAAOqN,WAAWM,EAAOP,KAAKte,OAAS,EACvC,IAAK,GAAInM,GAAYqd,OAAOqN,WAAWM,EAAOP,KAAKte,OAAS,EAAGnM,GAAK,EAAGA,IAAK,CACxE,GAAIwlB,GAAanI,OAAOqN,WAAWM,EAAOP,KAAKzqB,EAE/C,IAAmB,eAAfwlB,EAAMtH,MAAuC,UAAb8H,GAAqC,QAAbA,EAKrD,GACY,kBAAfR,EAAMtH,MACQ,aAAb8H,GAAwC,QAAbA,EAMzB,GAAmB,eAAfR,EAAMtH,MAAuC,UAAb8H,GAAqC,QAAbA,EAK5D,GACY,kBAAfR,EAAMtH,MACQ,aAAb8H,GAAwC,QAAbA,EAMzB,GAAmB,cAAfR,EAAMtH,MAAsC,SAAb8H,GAAoC,QAAbA,GAK1D,GAAIR,EAAMtH,OAAS8H,EAAW,SAAwB,QAAbA,EAAoB,CAChE,GAAIkF,GAAiBlF,CAErB,IACgB,OAAZA,GACA3I,OAAO8N,uBAAuBC,QAAQ5F,EAAMtH,KAAK/c,MAAM,UAEvD,QAGkB,QAAlB+pB,IACAA,EAAiB1F,EAAMtH,KAAK7Q,QAAQ,QAAS,KAGjDmY,EAAM6F,MAAKC,KAAEA,EAACJ,IAAiB,EAAII,GAAIN,GAEvC3N,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,QArBxCwlB,GAAM6F,KAAK,KAAML,EAAOO,MAExBlO,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,OARxCwlB,GAAM6F,MAAO1M,UAAU,GAAQqM,GAE/B3N,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,OAXxCwlB,GAAM6F,KAAK,KAAML,EAAOtZ,OAExB2L,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,OARxCwlB,GAAM6F,KAAK,KAAML,EAAOxL,UAExBnC,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,OAXxCwlB,GAAM6F,MAAOjN,OAAO,GAAQ4M,GAE5B3N,OAAOqN,WAAWM,EAAOP,KAAKzqB,GAAK,KACnCqd,OAAOqN,WAAWM,EAAOP,KAAKtX,OAAOnT,EAAG,GhBy4E/D,GAAIsrB,IgB90EFjO,OAAAwE,WAAP,SAAwCmJ,EAAW/lB,GAC/C,KAAIA,EAAQsd,OAAOpW,OAAS,GAA5B,CAIA6e,EAAO5M,MAAQnZ,EAAQsd,OAAOiJ,OAE9B,IAAIhG,EAWJ,OAV8B,KAA1BvgB,EAAQsd,OAAOpW,OACfqZ,EAAQ+E,EAAAkB,YAAYC,qBAAqBV,EAAQ/lB,GAC1CA,EAAQsd,OAAOpW,OAAS,IAC/BqZ,EAAQ+E,EAAAkB,YAAYE,wBAAwBX,EAAQ/lB,IAGxDugB,EAAMtH,KAAO,aACbsH,EAAMoG,WAAaZ,EAAO9M,KAC1Bje,KAAKuqB,cAAcQ,EAAOP,IAAKjF,GAExBA,IAWJnI,OAAAwG,cAAP,SAA2CmH,EAAW/lB,GAElD,MAAMA,EAAQse,SAAWte,EAAQue,QAAYve,EAAQse,OAAOpX,OAAS,GAAKlH,EAAQue,OAAOrX,OAAS,GAAlG,CAQIlH,EAAQse,OAAOpX,SAAWlH,EAAQue,OAAOrX,SACrClH,EAAQse,OAAOpX,OAASlH,EAAQue,OAAOrX,OACvClH,EAAQue,OAASqI,MAAMvqB,MAAM,KAAMuqB,MAAM5mB,EAAQse,OAAOpX,SAASkW,IAC7D,SAACrV,GAAe,MAAAge,GAAOxL,SAASH,GAAK,IAGzCpa,EAAQse,OAASsI,MAAMvqB,MAAM,KAAMuqB,MAAM5mB,EAAQue,OAAOrX,SAASkW,IAC7D,SAACrV,GAAe,MAAAge,GAAOxL,SAASL,GAAK,KAKjD6L,EAAOxL,SAASL,EAAIla,EAAQse,OAAOiI,QACnCR,EAAOxL,SAASH,EAAIpa,EAAQue,OAAOgI,OAEnC,IAAIhG,EAWJ,OAV8B,KAA1BvgB,EAAQse,OAAOpX,OACfqZ,EAAQ+E,EAAAkB,YAAYK,wBAAwBd,EAAQ/lB,GAC7CA,EAAQse,OAAOpX,OAAS,IAC/BqZ,EAAQ+E,EAAAkB,YAAYM,2BAA2Bf,EAAQ/lB,IAG3DugB,EAAMtH,KAAO,gBACbsH,EAAMoG,WAAaZ,EAAO9M,KAC1Bje,KAAKuqB,cAAcQ,EAAOP,IAAKjF,GAExBA,IAWJnI,OAAA0G,cAAP,SAAqBiH,EAAoB/lB,GACrC,KAAIA,EAAQ+e,QAAQ7X,OAAS,GAA7B,CAIA6e,EAAOrM,SAAWtB,OAAOuB,gBAAgB3Z,EAAQ+e,QAAQwH,QAEzD,IAAIhG,EAYJ,OAX+B,KAA3BvgB,EAAQ+e,QAAQ7X,OAChBqZ,EAAQ+E,EAAAkB,YAAYO,wBAAwBhB,EAAQ/lB,GAC7CA,EAAQ+e,QAAQ7X,OAAS,IAChCqZ,EAAQ+E,EAAAkB,YAAYQ,2BAA2BjB,EAAQ/lB,IAG3DugB,EAAMtH,KAAO,gBACbsH,EAAMoG,WAAaZ,EAAO9M,KAE1Bje,KAAKuqB,cAAcQ,EAAOP,IAAKjF,GAExBA,IAUJnI,OAAAkH,WAAP,SAAwCyG,EAAW/lB,GAC/C,KAAIA,EAAQuf,YAAYrY,OAAS,GAAjC,CAUA6e,EAAOtZ,MAAMyN,EAAIla,EAAQuf,YAAY,GAAGrF,EACxC6L,EAAOtZ,MAAM2N,EAAIpa,EAAQuf,YAAY,GAAGnF,EACxCpa,EAAQuf,YAAYgH,OAEpB,IAAIhG,EAYJ,OAXmC,KAA/BvgB,EAAQuf,YAAYrY,OACpBqZ,EAAQ+E,EAAAkB,YAAYS,qBAAqBlB,EAAQ/lB,GAC1CA,EAAQuf,YAAYrY,OAAS,IACpCqZ,EAAQ+E,EAAAkB,YAAYU,wBAAwBnB,EAAQ/lB,IAGxDugB,EAAMtH,KAAO,aACbsH,EAAMoG,WAAaZ,EAAO9M,KAE1Bje,KAAKuqB,cAAcQ,EAAOP,IAAKjF,GAExBA,IAWJnI,OAAAyI,YAAP,SAAyCkF,EAAW/lB,GAChD,GAAI+gB,GAA0B/gB,EAAQugB,MAAMS,MAAM,IAClDhhB,GAAUoY,OAAO+O,iBAAiBnnB,GAEX,GAAnB+gB,EAAS7Z,OACT6e,EAAOhF,EAAS,IAAM/gB,EAAQuf,YAAYgH,QAChB,GAAnBxF,EAAS7Z,SAChB6e,EAAOhF,EAAS,IAAIA,EAAS,IAAM/gB,EAAQuf,YAAYgH,QAG3D,IAAIhG,EAWJ,OAVmC,KAA/BvgB,EAAQuf,YAAYrY,OACpBqZ,EAAQ+E,EAAAkB,YAAYY,gBAAgBrB,EAAQ/lB,GACrCA,EAAQuf,YAAYrY,OAAS,IACpCqZ,EAAQ+E,EAAAkB,YAAYa,mBAAmBtB,EAAQ/lB,IAGnDugB,EAAMtH,KAAO8H,EAAS,GAAK,QAC3BR,EAAMoG,WAAaZ,EAAO9M,KAC1Bje,KAAKuqB,cAAcQ,EAAOP,IAAKjF,GAExBA,GAGJnI,OAAA+O,iBAAP,SAAwBG,GACpB,GAAIpgB,GAASogB,EAAK/H,YAAYrY,OAAS,CAQvC,IANAogB,EAAK/J,UAAYnF,OAAOmP,2BAA2BrgB,EAAQogB,EAAK/J,UAAW,UAC3E+J,EAAK3J,WAAavF,OAAOoP,2BAA2BtgB,EAAQogB,EAAK3J,WAAY,GAC7E2J,EAAK3J,WAAa2J,EAAK3J,WAAWP,IAAI,SAAUlD,GAC5C,MAAOA,GAAIoL,EAAAkB,YAAYiB,WAGD,MAAtBH,EAAK7J,cACL,GAAiC,GAA7B6J,EAAK7J,cAAcvW,OAAa,CAChC,GAAIwgB,GAAeJ,EAAK7J,cAAc,GAAKvW,CAC3CogB,GAAK7J,cAAgBrF,OAAOoP,2BAA2BtgB,EAAQ,KAAMwgB,OAErEJ,GAAK7J,cAAgBrF,OAAOoP,2BAA2BtgB,EAAQogB,EAAK7J,cAAe,QAEpF,CACH,GAAIkK,GAAe5N,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,IACpDqN,GAAK7J,cAAgBrF,OAAOoP,2BAA2BtgB,EAAQ,KAAMygB,GAazE,MAXAL,GAAK7J,cAAgB6J,EAAK7J,cAAcL,IAAI,SAAUlD,GAClD,MAAOA,GAAIoL,EAAAkB,YAAYiB,WAIT,YAAdH,EAAK/G,QACL+G,EAAK/H,YAAc+H,EAAK/H,YAAYnC,IAAI,SAAUlD,GAC9C,MAAO9B,QAAOuB,gBAAgBO,MAI/BoN,GAWJlP,OAAAmP,2BAAP,SAAkCrgB,EAAgBogB,EAAqBK,GACnE,GAAY,MAARL,EAgBA,MAAOV,OAAMvqB,MAAM,KAAMuqB,MAAM1f,IAASkW,IAAI,SAACrV,GAAe,MAAA4f,IAf5D,KAAIf,MAAMgB,QAAQN,GAYd,MAAOV,OAAMvqB,MAAM,KAAMuqB,MAAM1f,IAASkW,IAAI,SAACrV,GAAe,MAAAuf,IAX5D,IAAIA,EAAKpgB,QAAUA,EACf,MAAOogB,EAGX,IAAIA,EAAKpgB,OAASA,EAAQ,CACtB,IAAK,GAAInM,GAAYusB,EAAKpgB,OAAQnM,EAAImM,EAAQnM,IAC1CusB,EAAKtZ,KAAK2Z,EAEd,OAAOL,GASnB,MAAO,OAWJlP,OAAAoP,2BAAP,SAAkCtgB,EAAgBogB,EAAqBK,GACnE,GAAY,MAARL,EAgBA,MAAOV,OAAMvqB,MAAM,KAAMuqB,MAAM1f,IAASkW,IAAI,SAACrV,GAAe,MAAA4f,IAf5D,KAAIf,MAAMgB,QAAQN,GAYd,MAAOV,OAAMvqB,MAAM,KAAMuqB,MAAM1f,IAASkW,IAAI,SAACrV,GAAe,MAAAuf,IAX5D,IAAIA,EAAKpgB,QAAUA,EACf,MAAOogB,EAGX,IAAIA,EAAKpgB,OAASA,EAAQ,CACtB,IAAK,GAAInM,GAAYusB,EAAKpgB,OAAQnM,EAAImM,EAAQnM,IAC1CusB,EAAKtZ,KAAK2Z,EAEd,OAAOL,GASnB,MAAO,OAQJlP,OAAAuB,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAOhCxlB,OAAAmD,eAAkBoZ,OAAA,iBhBqvEbnZ,IgBrvEL,WACI,MAAO,UhBuvENE,YAAY,EACZC,cAAc,IgB/uEFgZ,OAAAhF,IAAjB,SAAqBC,KA5cN+E,OAAA8N,wBAAyC,eAAgB,UACjE9N,OAAAqN,cAidXrN,SAnda/c,GAAA+c,OAAMA,EAqdN/c,EAAA6kB,kBACTC,MAAO,QACPG,aAAc,cACdI,WAAY,YACZD,eAAgB,gBAChBE,YAAa,aACbC,WAAY,chB0vEV,SAAStlB,EAAQD,EAASF,GAE/B,YiBh1FD,IASA0sB,IATA1sB,EAAuB,GASvBA,EAA2E,KAC3E2sB,EAAA3sB,EAA2B,IAU3BqrB,EAAA,mBAAAA,gBA2pBA,MAvpBcA,aAAA1qB,UAAAoc,gBAAV,SAA0BlY,KAQnBwmB,YAAAE,wBAAP,SAA+BX,EAAoB/lB,GAC/C,GAAMyd,GACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQsd,OAAOpW,OAAUsf,YAAYiB,SACrFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,OAE/BoT,EAA8B,GAAIN,GAAAO,cACpCC,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1G1S,OAAQmT,IAAe,GA+B3B,OA5BAloB,GAAQsd,OAAOkL,QAAQ,SAACrP,GACpBgP,EAAcM,GAAG1C,EAAQiC,GACrB7O,MAAOA,EACPuP,KAAMnL,EACNxI,OAAQmT,IAAe,MAIC,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BT,EAAcU,cACV7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERsK,EAAcU,cAAc,aAAcV,EAAcrC,SAMrDqC,GASJ3B,YAAAC,qBAAP,SAA4BV,EAAoB/lB,GAC5C,GAQIgpB,GAREvL,EACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQsd,OAAOpW,OAAUsf,YAAYiB,SACrFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U;AAgCrC,MA5BAiU,GAAiBnB,EAAAoB,UAAUR,GAAG1C,EAAQiC,GAClCK,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1GtO,MAAOnZ,EAAQsd,OACfoL,KAAMnL,EACNxI,OAAQmT,IAAe,IAGK,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BI,EAAeH,cACX7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERmL,EAAeH,cAAc,aAAcG,EAAelD,SAMvDkD,GAUJxC,YAAAM,2BAAP,SAAkCf,EAAoB/lB,GAClD,GAAMyd,GACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQse,OAAOpX,OAAUsf,YAAYiB,SACrFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,OAE/BmU,EAAiC,GAAIrB,GAAAO,cACvCC,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,GAkC9G,OA9BAznB,GAAQse,OAAOkK,QAAQ,SAAClK,EAAgBvjB,GACpCmuB,EAAiBT,GAAG1C,EAAOxL,SAAUyN,GACjCK,UAAW7B,YAAY8B,UACvBpO,EAAGoE,EACHlE,EAAGpa,EAAQue,OAAOxjB,GAClB2tB,KAAMnL,EACNxI,OAAQmT,IAAe,MAIC,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BM,EAAiBL,cACb7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERqL,EAAiBL,cAAc,aAAcK,EAAiBpD,SAM3DoD,GASJ1C,YAAAK,wBAAP,SAA+Bd,EAAoB/lB,GAC/C,GASImpB,GATE1L,EACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQse,OAAOpX,OAAUsf,YAAYiB,SACrFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE6L,EAAsBppB,EAAQqpB,OAC9BnB,EAAuBloB,EAAQ+U,MAiDrC,OA5CIoU,GADe,MAAfC,EACoBvB,EAAAoB,UAAUR,GAAG1C,EAAOxL,SAAUyN,GAC9CqB,OAAQD,GAAe,EACvBf,UAAW7B,YAAY8B,UACvBC,MAC0B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAC7C3d,EAAQ2d,WAAa6I,YAAYiB,SACjC,EACViB,KAAMnL,EACNxI,OAAQmT,IAAe,IAGPL,EAAAoB,UAAUR,GAAG1C,EAAOxL,SAAUyN,GAC9CK,UAAW7B,YAAY8B,UACvBC,MAC0B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAC7C3d,EAAQ2d,WAAa6I,YAAYiB,SACjC,EACVvN,EAAGla,EAAQse,OAAO,GAClBlE,EAAGpa,EAAQue,OAAO,GAClBmK,KAAMnL,EACNxI,OAAQmT,IAAe,IAIC,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BO,EAAkBN,cACd7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERsL,EAAkBN,cAAc,aAAcM,EAAkBrD,SAM7DqD,GAUJ3C,YAAAQ,2BAAP,SAAkCjB,EAAoB/lB,GAClD,GAAMyd,GACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQ+e,QAAQ7X,OAAUsf,YAAYiB,SACtFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,OAE/BuU,EAAiC,GAAIzB,GAAAO,cACvCC,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1G1S,OAAQmT,IAAe,GAiC3B,OA7BAloB,GAAQ+e,QAAQ3B,IAAIoJ,YAAY7M,iBAAiB6O,QAAQ,SAACe,GACtDD,EAAiBb,GAAG1C,EAAQiC,GACxBK,UAAW7B,YAAY8B,UACvB5O,SAAU6P,EACVb,KAAMnL,EACNxI,OAAQmT,IAAe,MAIC,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BU,EAAiBT,cACb7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERyL,EAAiBT,cAAc,aAAcS,EAAiBxD,SAM3DwD,GASJ9C,YAAAO,wBAAP,SAA+BhB,EAAoB/lB,GAC/C,GAQIwpB,GARE/L,EACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQ+e,QAAQ7X,OAAUsf,YAAYiB,SACtFlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,MAgCrC,OA5BAyU,GAAoB3B,EAAAoB,UAAUR,GAAG1C,EAAQiC,GACrCK,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1G/N,SAAU8M,YAAY7M,gBAAgB3Z,EAAQ+e,QAAQ,IACtD2J,KAAMnL,EACNxI,OAAQmT,IAAe,IAGK,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BY,EAAkBX,cACd7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAER2L,EAAkBX,cAAc,aAAcW,EAAkB1D,SAM7D0D,GAWJhD,YAAAU,wBAAP,SAA+BnB,EAAoB/lB,GAC/C,GAAMyd,GACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQuf,YAAYrY,OAAUsf,YAAYiB,SAC1FlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,OAE/B0U,EAA8B,GAAI5B,GAAAO,cACpCC,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1G1S,OAAQmT,IAAe,GAiC3B,OA9BAloB,GAAQuf,YAAYiJ,QAAQ,SAACkB,GACzBD,EAAchB,GAAG1C,EAAOtZ,MAAOub,GAC3BK,UAAW7B,YAAY8B,UACvBpO,EAAGwP,EAAWxP,EACdE,EAAGsP,EAAWtP,EACdsO,KAAMnL,EACNxI,OAAQmT,IAAe,MAIC,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3Ba,EAAcZ,cACV7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAER4L,EAAcZ,cAAc,aAAcY,EAAc3D,SAMrD2D,GASJjD,YAAAS,qBAAP,SAA4BlB,EAAoB/lB,GAC5C,GAQI2pB,GARElM,EACuB,MAAzBzd,EAAQyd,eAAyBsK,MAAM/nB,EAAQyd,eACzC1D,KAAKC,MAAsB,IAAhBD,KAAKE,SAAiB,KACjCja,EAAQyd,cACZuK,EAAgCvK,EAAgBzd,EAAQuf,YAAYrY,OAAUsf,YAAYiB,SAC1FlK,EAAoBiJ,YAAYyB,WAAWjoB,EAAQud,YAAc,kBACjE2K,EAAuBloB,EAAQ+U,MAiCrC,OA7BA4U,GAAiB9B,EAAAoB,UAAUR,GAAG1C,EAAOtZ,MAAOub,GACxCK,UAAW7B,YAAY8B,UACvBC,MAA6B,MAAtBvoB,EAAQ2d,YAAsB3d,EAAQ2d,WAAa,EAAI3d,EAAQ2d,WAAa6I,YAAYiB,SAAW,EAC1GvN,EAAGla,EAAQuf,YAAY,GAAGrF,EAC1BE,EAAGpa,EAAQuf,YAAY,GAAGnF,EAC1BsO,KAAMnL,EACNxI,OAAQmT,IAAe,IAGK,MAA5BloB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3Be,EAAed,cACX7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAER8L,EAAed,cAAc,aAAcc,EAAe7D,SAMvD6D,GAQJnD,YAAAa,mBAAP,SAA0BtB,EAAoB/lB,GAC1C,GAAMugB,GAAuBvgB,EAAQugB,MAAMS,MAAM,KAC3C4I,EAAwBrJ,EAAMA,EAAMrZ,OAAS,GAC7CghB,EAAuBloB,EAAQ+U,OAC/B8U,EAAyB,GAAIhC,GAAAO,cAC/BC,UAAW7B,YAAY8B,UACvBC,MAAOvoB,EAAQ2d,WAAW,IAkC9B,OA7BA3d,GAAQuf,YAAYiJ,QAAQ,SAACzgB,EAAehN,GACxC8uB,EAASpB,GAAmB,GAAhBlI,EAAMrZ,OAAc6e,EAASA,EAAOxF,EAAM,IAAKvgB,EAAQyd,cAAc1iB,IAAIsrB,GACjFgC,UAAW7B,YAAY8B,WACvBjC,EAACuD,GAAgB7hB,EACjBse,EAAAqC,KAAMlC,YAAYyB,WAAWjoB,EAAQud,UAAUxiB,KAAO,kBACtDsrB,EAAAtR,OAAQmT,IAAe,EjBioFtB7B,GAEJ,IAAIA,KiB/nFuB,MAA5BrmB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BiB,EAAShB,cACL7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERgM,EAAShB,cAAc,aAAcgB,EAAS/D,SAM3C+D,GAQJrD,YAAAY,gBAAP,SAAuBrB,EAAoB/lB,GACvC,GAII8pB,GAJEvJ,EAAuBvgB,EAAQugB,MAAMS,MAAM,KAC3C4I,EAAwBrJ,EAAMA,EAAMrZ,OAAS,GAC7CghB,EAAuBloB,EAAQ+U,MAgCrC,OA5BA+U,GAAYjC,EAAAoB,UAAUR,GAAmB,GAAhBlI,EAAMrZ,OAAc6e,EAASA,EAAOxF,EAAM,IAAKvgB,EAAQyd,cAAc,IAAI4I,GAC9FgC,UAAW7B,YAAY8B,UACvBC,MAAOvoB,EAAQ2d,WAAW,IAC1B0I,EAACuD,GAAgB5pB,EAAQuf,YAAY,GACrC8G,EAAAqC,KAAMlC,YAAYyB,WAAWjoB,EAAQud,UAAU,KAAO,kBACtD8I,EAAAtR,OAAQmT,IAAe,EjBgnFtB7B,IiB7mF2B,MAA5BrmB,EAAQ2oB,mBACoB,MAAxB3oB,EAAQ4oB,eACR5oB,EAAQ4oB,aAAe,cAE3BkB,EAAUjB,cACN7oB,EAAQ4oB,aACR5oB,EAAQ2oB,iBACR3oB,EAAQ8oB,eACR9oB,EAAQ+oB,gBAIZ/oB,EAAQ6d,WAERiM,EAAUjB,cAAc,aAAciB,EAAUhE,SAM7CgE,CjBqmFN,IAAIzD,IiB7lFFG,YAAA7M,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MASzBmF,YAAAyB,WAAP,SAAkBS,GACd,OAAQ,GAAKA,GACT,IAAK,IACL,IAAK,SACD,MAAO,iBACX,KAAK,IACL,IAAK,SACD,MAAO,aACX,KAAK,IACL,IAAK,YACD,MAAO,gBACX,KAAK,IACL,IAAK,UACD,MAAO,cACX,KAAK,IACL,IAAK,WACD,MAAO,eACX,KAAK,IACL,IAAK,cACD,MAAO,kBACX,KAAK,IACL,IAAK,YACD,MAAO,gBACX,KAAK,IACL,IAAK,SACD,MAAO,aACX,KAAK,IACL,IAAK,YACD,MAAO,gBACX,KAAK,IACL,IAAK,UACD,MAAO,cACX,KAAK,KACL,IAAK,UACD,MAAO,cACX,KAAK,KACL,IAAK,aACD,MAAO,iBACX,KAAK,KACL,IAAK,WACD,MAAO,eACX,KAAK,KACL,IAAK,YACD,MAAO,gBACX,KAAK,KACL,IAAK,eACD,MAAO,mBACX,KAAK,KACL,IAAK,aACD,MAAO,iBACX,KAAK,KACL,IAAK,SACD,MAAO,aACX,KAAK,KACL,IAAK,YACD,MAAO,gBACX,KAAK,KACL,IAAK,UACD,MAAO,cACX,KAAK,KACL,IAAK,UACD,MAAO,cACX,KAAK,KACL,IAAK,aACD,MAAO,iBACX,KAAK,KACL,IAAK,WACD,MAAO,eACX,KAAK,KACL,IAAK,UACD,MAAO,cACX,KAAK,KACL,IAAK,aACD,MAAO,iBACX,KAAK,KACL,IAAK,WACD,MAAO,eACX,KAAK,KACL,IAAK,SACD,MAAO,aACX,KAAK,KACL,IAAK,YACD,MAAO,gBACX,KAAK,KACL,IAAK,UACD,MAAO,cACX,KAAK,WACD,MAAO,eACX,KAAK,WACD,MAAO,eACX,KAAK,WACD,MAAO,eACX,KAAK,WACD,MAAO,eACX,KAAK,gBACD,OAAO,GAAIb,GAAAkC,QAASC,OAAO,GAAK,IAAK,EACzC,KAAK,eACD,MAAO,IAAInC,GAAAoC,WACPC,SAAU,EACVnG,OAAQ,GACRoG,SAAUtC,EAAAuC,OAAOC,OACjBC,MAAO,MACPC,WAAW,EACXC,OAAO,GAEf,SAKI,MAA+B,OAAxB1C,EAAA2C,WAAWxrB,IAAIypB,GAAgBA,EAAO,oBAUxClC,YAAApT,IAAjB,SAAqBC,KAppBdmT,YAAA8B,WAAqB,EACrB9B,YAAAiB,SAAmB,MAypB9BjB,cA3pBanrB,GAAAmrB,YAAWA,GjBivGlB,SAASlrB,EAAQD,EAASF,GAE/B,GAAIuvB,GAA8BC,GkBvwGnC,SAAAC;;;;;;;;;;;;;AAaA,GAAAC,GAAA,uBAAAvvB,EAAAD,SAAA,sBAAAuvB,EAAA5vB,MAAAyD,QACAosB,EAAAC,WAAAD,EAAAC,cAAA9c,KAAA,WAEA,YAEA6c,GAAAE,UAAA,yEAAAC,EAAAC,EAAAhC,GAEA,GAAAiC,GAAA,SAAApwB,GACA,GAEAC,GAFAqB,KACA+uB,EAAArwB,EAAAoM,MAEA,KAAAnM,EAAA,EAAeA,IAAAowB,EAAS/uB,EAAA4R,KAAAlT,EAAAC,OACxB,MAAAqB,IAEAgvB,EAAA,SAAAC,EAAAC,EAAAvwB,GACA,GACAa,GAAA0M,EADAijB,EAAAF,EAAAG,KAEA,KAAA5vB,IAAA2vB,GACAjjB,EAAAijB,EAAA3vB,GACAyvB,EAAAzvB,GAAA,qBAAA0M,EAAAvN,EAAAuwB,EAAAvwB,IAAAuN,EAAAvN,EAAAuN,EAAApB,cAEAmkB,GAAAG,OAEAC,EAAA,SAAA1lB,EAAAwO,EAAA8W,GACApC,EAAAxtB,KAAAT,KAAA+K,EAAAwO,EAAA8W,GACArwB,KAAA0wB,OAAA,EACA1wB,KAAA2wB,MAAA3wB,KAAAqwB,KAAAO,QAAA,EACA5wB,KAAA6wB,QAAA7wB,KAAAqwB,KAAAS,QAAA,EACA9wB,KAAA+wB,aAAA/wB,KAAAqwB,KAAAW,aAAA,EACAhxB,KAAAixB,QAAA,EACAjxB,KAAAqS,OAAAoe,EAAA3vB,UAAAuR,QAEA6e,EAAA,MACAC,EAAAlD,EAAAmD,WACAC,EAAAF,EAAAG,WACAC,EAAAJ,EAAAvE,QACAhsB,EAAA6vB,EAAA3vB,UAAAmtB,EAAAR,MAA2C,OAC3C+D,IAEAf,GAAAgB,QAAA,SACA7wB,EAAAc,YAAA+uB,EACA7vB,EAAAwqB,OAAAsG,KAAA,EACAjB,EAAAkB,aAAAlB,EAAAmB,mBAAA3D,EAAA0D,aACAlB,EAAAoB,YAAA5D,EAAA4D,YACApB,EAAAqB,aAAA7D,EAAA6D,aACArB,EAAAsB,OAAA9D,EAAA8D,OACAtB,EAAApe,OAAA4b,EAAA5b,OAEAzR,EAAAoxB,WAAA,WAKA,MAJAhyB,MAAA2wB,MAAA3wB,KAAAqwB,KAAAO,QAAA,EACA5wB,KAAA6wB,QAAA7wB,KAAAqwB,KAAAS,QAAA,EACA9wB,KAAA+wB,aAAA/wB,KAAAqwB,KAAAW,aAAA,EACAhxB,KAAAiyB,UAAA,GACAhE,EAAAntB,UAAAkxB,WAAAvxB,KAAAT,OAGAY,EAAAsxB,SAAA,SAAA7B,EAAA8B,GACA,GAEAvxB,GAFAwxB,EAAApyB,KAAAqyB,MACAC,EAAAtyB,KAAAqwB,KAAAkC,iBAAAlC,EAAAkC,eAEAJ,IAAAnyB,KAAA4Z,WAAA5Z,KAAAwyB,UAAAC,QACAzyB,KAAA4Z,WAAA5Z,KAAAwyB,UAAAC,MACAzyB,KAAAiyB,UAAA,GACAjyB,KAAA0xB,IACA1xB,KAAA0yB,UAAA,MAEA1yB,KAAAwyB,UAAAG,OAAA3yB,UAAA4Z,WAAA5Z,KAAA4yB,QAGA,KAAAhyB,IAAAyvB,GACArwB,KAAAqwB,KAAAzvB,GAAAyvB,EAAAzvB,EAEA,IAAAZ,KAAA6yB,UAAAP,EACA,GAAAH,EACAnyB,KAAA6yB,UAAA,EACAP,GACAtyB,KAAAqS,OAAA,aASA,IANArS,KAAA0xB,KACA1xB,KAAA0yB,UAAA,MAEA1yB,KAAA8yB,yBAAA9yB,KAAA+yB,UACA9E,EAAA+E,eAAA,aAAAhzB,MAEAA,KAAAyyB,MAAAzyB,KAAAizB,UAAA,MACA,GAAAC,GAAAlzB,KAAAmzB,UACAnzB,MAAAqS,OAAA,SACArS,KAAA6yB,UAAA,EACA7yB,KAAAqS,OAAA6gB,GAAA,UAIA,IAFAlzB,KAAA6yB,UAAA,EACA7yB,KAAAozB,QACApzB,KAAAyyB,MAAA,GAAAH,EAGA,IAFA,GACAe,GADAC,EAAA,KAAAlB,GACAmB,EAAAvzB,KAAA+yB,SACAQ,GACAF,EAAAE,EAAAlb,EAAAkb,EAAA5yB,EACA4yB,EAAA5yB,GAAA2yB,EACAC,EAAAlb,EAAAgb,EAAAE,EAAA5yB,EACA4yB,IAAAC,KAMA,OAAAxzB,OAGAY,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,GACA3zB,KAAA6yB,UAAA,IAAA7yB,KAAAizB,WAAAjzB,KAAAqwB,KAAAS,QACA9wB,KAAAgyB,YAEA,IAMA4B,GAAAC,EAAAN,EAAAO,EAAA/X,EAAAgY,EAAAC,EAAAC,EANAC,EAAAl0B,KAAAixB,OAAAjxB,KAAAm0B,gBAAAn0B,KAAAo0B,eACAlB,EAAAlzB,KAAAyyB,MACA4B,EAAAr0B,KAAAmzB,WACAmB,EAAAt0B,KAAA0wB,OACAnX,EAAAvZ,KAAAizB,UACAsB,EAAAv0B,KAAAw0B,YAwGA,IAtGAf,GAAAS,EAAA,MACAl0B,KAAAmzB,WAAAe,EACAl0B,KAAA0wB,OAAA1wB,KAAA6wB,QACA7wB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,SACA1wB,KAAAyyB,MAAA,EACAzyB,KAAAqyB,MAAAryB,KAAAy0B,MAAAC,SAAA10B,KAAAy0B,MAAAE,SAAA,OAEA30B,KAAAyyB,MAAAlZ,EACAvZ,KAAAqyB,MAAAryB,KAAAy0B,MAAAC,SAAA10B,KAAAy0B,MAAAE,SAAA,MAEA30B,KAAA40B,YACAhB,GAAA,EACAC,EAAA,aACAF,KAAA3zB,KAAAwyB,UAAAqC,oBAEA,IAAAtb,IAAAvZ,KAAA6yB,WAAA7yB,KAAAqwB,KAAAyE,MAAAnB,KACA3zB,KAAA4Z,aAAA5Z,KAAAwyB,UAAAS,YACAQ,EAAA,IAEAc,EAAA,GAAAd,GAAA,GAAAA,UAAAc,IAAArD,GAAA,YAAAlxB,KAAAssB,OAAAiI,IAAAd,IACAE,GAAA,EACAY,EAAArD,IACA2C,EAAA,sBAGA7zB,KAAAw0B,aAAAP,GAAAP,GAAAD,GAAAc,IAAAd,IAAAvC,IAGIuC,EAAA,MACJzzB,KAAAmzB,WAAAnzB,KAAAyyB,MAAAzyB,KAAA0wB,OAAA,EACA1wB,KAAAqyB,MAAAryB,KAAAy0B,MAAAC,SAAA10B,KAAAy0B,MAAAE,SAAA,MACA,IAAAN,GAAA,IAAA9a,GAAAgb,EAAA,KACAV,EAAA,oBACAD,EAAA5zB,KAAA40B,WAEAnB,EAAA,IACAzzB,KAAA+0B,SAAA,EACA,IAAAxb,IAAAvZ,KAAA6yB,WAAA7yB,KAAAqwB,KAAAyE,MAAAnB,KACAY,GAAA,IACAZ,GAAA,GAEA3zB,KAAAw0B,aAAAP,GAAAP,GAAAD,GAAAc,IAAAd,IAAAvC,IAGAlxB,KAAA6yB,WACAc,GAAA,KAGA3zB,KAAAmzB,WAAAnzB,KAAAyyB,MAAAgB,EACA,IAAAzzB,KAAA6wB,UACAiD,EAAAva,EAAAvZ,KAAA+wB,aACA/wB,KAAA0wB,OAAA1wB,KAAAmzB,WAAAW,GAAA,EACA,IAAA9zB,KAAA0wB,QAAA1wB,KAAA0wB,SAAA1wB,KAAAmzB,WAAAW,GAAAO,GAAAZ,GACAzzB,KAAA0wB,SAEA1wB,KAAAyyB,MAAAzyB,KAAAmzB,WAAAnzB,KAAA0wB,OAAAoD,EACA9zB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,UACA1wB,KAAAyyB,MAAAlZ,EAAAvZ,KAAAyyB,OAEAzyB,KAAAyyB,MAAAlZ,EACAvZ,KAAAyyB,MAAAlZ,EACMvZ,KAAAyyB,MAAA,IACNzyB,KAAAyyB,MAAA,IAIAzyB,KAAAg1B,WACAjZ,EAAA/b,KAAAyyB,MAAAlZ,EACAwa,EAAA/zB,KAAAg1B,UACAhB,EAAAh0B,KAAAi1B,YACA,IAAAlB,GAAA,IAAAA,GAAAhY,GAAA,MACAA,EAAA,EAAAA,GAEA,IAAAgY,IACAhY,GAAA,GAEA,IAAAiY,EACAjY,KACM,IAAAiY,EACNjY,OACM,IAAAiY,EACNjY,SACM,IAAAiY,IACNjY,YAGA,IAAAgY,EACA/zB,KAAAqyB,MAAA,EAAAtW,EACM,IAAAgY,EACN/zB,KAAAqyB,MAAAtW,EACM/b,KAAAyyB,MAAAlZ,EAAA,GACNvZ,KAAAqyB,MAAAtW,EAAA,EAEA/b,KAAAqyB,MAAA,EAAAtW,EAAA,GAIA/b,KAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAA30B,KAAAyyB,MAAAlZ,IAKA2Z,IAAAlzB,KAAAyyB,QAAAkB,GAAAW,IAAAt0B,KAAA0wB,OAIA,YAHA2D,IAAAr0B,KAAAmzB,YAAAnzB,KAAAk1B,YAAAxB,GACA1zB,KAAAm1B,UAAA,aAGI,KAAAn1B,KAAA6yB,SAAA,CAEJ,GADA7yB,KAAAozB,SACApzB,KAAA6yB,UAAA7yB,KAAA0xB,IACA,MACK,KAAAiC,GAAA3zB,KAAA+yB,WAAA/yB,KAAAqwB,KAAAyE,QAAA,GAAA90B,KAAAizB,WAAAjzB,KAAAqwB,KAAAyE,OAAA90B,KAAAizB,WAOL,MANAjzB,MAAAyyB,MAAAS,EACAlzB,KAAAmzB,WAAAkB,EACAr0B,KAAAw0B,aAAAD,EACAv0B,KAAA0wB,OAAA4D,EACAnD,EAAAiE,WAAApiB,KAAAhT,WACAA,KAAAq1B,OAAA5B,EAAAC,GAIA1zB,MAAAyyB,QAAAmB,EACA5zB,KAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAA30B,KAAAyyB,MAAAlZ,GACKqa,GAAA5zB,KAAAy0B,MAAAC,WACL10B,KAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAA,IAAA30B,KAAAyyB,MAAA,MA4BA,IAzBAzyB,KAAAq1B,SAAA,IACAr1B,KAAAq1B,OAAA,GAGAr1B,KAAA+0B,UAAA/0B,KAAA6Y,SAAA7Y,KAAAyyB,QAAAS,GAAAO,GAAA,IACAzzB,KAAA+0B,SAAA,GAEA,IAAAV,IACA,IAAAr0B,KAAA6yB,UAAAY,EAAA,GAEAzzB,KAAAozB,QAEApzB,KAAAs1B,WACA7B,GAAA,EACAzzB,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GACME,IACNA,EAAA,aAGA7zB,KAAAqwB,KAAAkF,UAAA,IAAAv1B,KAAAmzB,YAAA,IAAA5Z,GAAAma,GACA1zB,KAAAm1B,UAAA,aAIA5B,EAAAvzB,KAAA+yB,SACAQ,GACAA,EAAAiC,EACAjC,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA5yB,EAAAX,KAAAqyB,MAAAkB,EAAAlb,GAEAkb,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA5yB,EAAAX,KAAAqyB,MAAAkB,EAAAlb,EAEAkb,IAAAC,KAGAxzB,MAAAk1B,YACAzB,EAAA,GAAAzzB,KAAAs1B,UAAAt1B,KAAA4Z,YACA5Z,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GAEAD,IAAA1zB,KAAAmzB,aAAAkB,GAAAR,IACA7zB,KAAAm1B,UAAA,aAGAn1B,KAAA0wB,SAAA4D,IAAAZ,GAAA1zB,KAAA0xB,KAAA1xB,KAAAqwB,KAAAqF,UACA11B,KAAAm1B,UAAA,aAEAtB,IAAA7zB,KAAA0xB,MAAAiC,IACAF,EAAA,GAAAzzB,KAAAs1B,WAAAt1B,KAAAk1B,WAAAl1B,KAAA4Z,YACA5Z,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GAEAC,IACA5zB,KAAAwyB,UAAAqC,oBACA70B,KAAA0yB,UAAA,MAEA1yB,KAAA+0B,SAAA,IAEArB,GAAA1zB,KAAAqwB,KAAAwD,IACA7zB,KAAAm1B,UAAAtB,GAEA,IAAAta,GAAAvZ,KAAAw0B,eAAAtD,GAAA+C,IAAA/C,IACAlxB,KAAAw0B,aAAA,MAOA/D,EAAAhD,GAAA,SAAA1iB,EAAAwO,EAAA8W,GACA,UAAAI,GAAA1lB,EAAAwO,EAAA8W,IAGAI,EAAAkF,KAAA,SAAA5qB,EAAAwO,EAAA8W,GAGA,MAFAA,GAAAuF,cAAA,EACAvF,EAAAkC,gBAAA,GAAAlC,EAAAkC,gBACA,GAAA9B,GAAA1lB,EAAAwO,EAAA8W,IAGAI,EAAAoF,OAAA,SAAA9qB,EAAAwO,EAAAuc,EAAAC,GAGA,MAFAA,GAAAC,QAAAF,EACAC,EAAAxD,gBAAA,GAAAwD,EAAAxD,iBAAA,GAAAuD,EAAAvD,gBACA,GAAA9B,GAAA1lB,EAAAwO,EAAAwc,IAGAtF,EAAAwF,UAAAxF,EAAAyF,MAAA,SAAA5F,EAAA/W,EAAA8W,EAAA8F,EAAAC,EAAAC,EAAAC,GACAH,KAAA,CACA,IAUAhG,GAAAoG,EAAAx2B,EAAAa,EAVA2sB,EAAA,EACAztB,KACA02B,EAAA,WACAnG,EAAAoG,YACApG,EAAAoG,WAAAp1B,MAAAgvB,EAAAqG,iBAAA12B,KAAAoD,WAEAgzB,EAAA/0B,MAAAi1B,GAAAjG,EAAAtC,eAAA/tB,KAAAq2B,GAAA7E,IAEAhB,EAAAH,EAAAG,MACAmG,EAAAtG,EAAA2F,SAAA3F,EAAA2F,QAAAxF,KAiBA,KAfAe,EAAAjB,KACA,qBACAA,EAAArC,EAAA2I,SAAAtG,OAEAe,EAAAf,KACAA,EAAAJ,EAAAI,KAGAA,QACA6F,EAAA,IACA7F,EAAAJ,EAAAI,GACAA,EAAAuG,UACAV,OAEAhG,EAAAG,EAAApkB,OAAA,EACAnM,EAAA,EAAcA,GAAAowB,EAAQpwB,IAAA,CACtBw2B,IACA,KAAA31B,IAAAyvB,GACAkG,EAAA31B,GAAAyvB,EAAAzvB,EASA,IAPA4vB,IACAJ,EAAAmG,EAAAjG,EAAAvwB,GACA,MAAAw2B,EAAAhd,WACAA,EAAAgd,EAAAhd,eACAgd,GAAAhd,WAGAod,EAAA,CACAA,EAAAJ,EAAAP,UACA,KAAAp1B,IAAAyvB,GAAA2F,QACAW,EAAA/1B,GAAAyvB,EAAA2F,QAAAp1B,EAEAwvB,GAAAmG,EAAAP,QAAA1F,EAAAvwB,GAEAw2B,EAAAhJ,SAAAgJ,EAAAhJ,OAAA,GACAxtB,IAAAowB,GAAAiG,IACAG,EAAAE,WAAAD,GAEA12B,EAAAC,GAAA,GAAA0wB,GAAAH,EAAAvwB,GAAAwZ,EAAAgd,GACAhJ,GAAA4I,EAEA,MAAAr2B,IAGA2wB,EAAAqG,YAAArG,EAAAsG,QAAA,SAAAzG,EAAA/W,EAAA8W,EAAA8F,EAAAC,EAAAC,EAAAC,GAGA,MAFAjG,GAAAuF,cAAA,EACAvF,EAAAkC,gBAAA,GAAAlC,EAAAkC,gBACA9B,EAAAwF,UAAA3F,EAAA/W,EAAA8W,EAAA8F,EAAAC,EAAAC,EAAAC,IAGA7F,EAAAuG,cAAAvG,EAAAwG,UAAA,SAAA3G,EAAA/W,EAAAuc,EAAAC,EAAAI,EAAAC,EAAAC,EAAAC,GAGA,MAFAP,GAAAC,QAAAF,EACAC,EAAAxD,gBAAA,GAAAwD,EAAAxD,iBAAA,GAAAuD,EAAAvD,gBACA9B,EAAAwF,UAAA3F,EAAA/W,EAAAwc,EAAAI,EAAAC,EAAAC,EAAAC,IAGA7F,EAAAyG,YAAA,SAAA3J,EAAAsG,EAAAsD,EAAAC,EAAA/J,GACA,UAAAoD,GAAAoD,EAAA,GAAqCtG,QAAAkJ,WAAA5C,EAAAwD,iBAAAF,EAAApJ,cAAAqJ,EAAAE,kBAAAzD,EAAA0D,wBAAAJ,EAAA5E,iBAAA,EAAAlF,YAAAmK,UAAA,KAGrC/G,EAAA7T,IAAA,SAAA7R,EAAAslB,GACA,UAAAI,GAAA1lB,EAAA,EAAAslB,IAGAI,EAAAgH,WAAA,SAAA1sB,GACA,MAAAkjB,GAAA4D,YAAA9mB,GAAA,GAAAmB,OAAA,EAGA,IAAAwrB,GAAA,SAAA7I,EAAA8I,GAIA,IAHA,GAAA73B,MACA83B,EAAA,EACArS,EAAAsJ,EAAAgJ,OACAtS,GACAA,YAAA0I,GACAnuB,EAAA83B,KAAArS,GAEAoS,IACA73B,EAAA83B,KAAArS,GAEAzlB,IAAAwB,OAAAo2B,EAAAnS,EAAAoS,IACAC,EAAA93B,EAAAoM,QAEAqZ,IAAAiO,KAEA,OAAA1zB,IAEAg4B,EAAArH,EAAAqH,aAAA,SAAAH,GACA,MAAAD,GAAA1H,EAAA+H,cAAAJ,GAAAr2B,OAAAo2B,EAAA1H,EAAAgI,oBAAAL,IAGAlH,GAAAwH,QAAA,SAAAC,EAAA9S,EAAA+S,EAAAC,GACA,MAAAhT,IACAA,GAAA,GAEA,MAAA+S,IACAA,GAAA,EAEA,IAGAE,GAAA9S,EAAAxlB,EAHAD,EAAAg4B,EAAA,GAAAM,GACAjI,EAAArwB,EAAAoM,OACAosB,EAAAlT,GAAA+S,GAAAC,CAEA,KAAAr4B,EAAA,EAAcA,EAAAowB,EAAOpwB,IACrBwlB,EAAAzlB,EAAAC,IACAu4B,GAAA/S,YAAA0K,KAAAoI,EAAA9S,EAAAxa,SAAAwa,EAAA8K,KAAAoG,aAAA0B,GAAA/S,IAAAiT,KACAH,EACA3S,EAAAgT,UAAAhT,EAAAqP,UAAA,EAAArP,EAAA4O,iBAEA5O,EAAAmN,UAAA,QAMAjC,EAAA+H,kBAAA,SAAAC,EAAAP,GACA,SAAAO,EAAA,CAGA,GACA34B,GAAA44B,EAAA93B,EAAAb,EAAAowB,EADAwI,EAAAxH,EAAAyH,WAQA,IANA,qBACAH,EAAAxK,EAAA2I,SAAA6B,OAEApH,EAAAoH,KACAA,EAAAvI,EAAAuI,IAEAlH,EAAAkH,GAEA,IADA14B,EAAA04B,EAAAvsB,SACAnM,MACA0wB,EAAA+H,kBAAAC,EAAA14B,GAAAm4B,OAHA,CAOAp4B,IACA,KAAAc,IAAA+3B,GAEA,IADAD,EAAAC,EAAA/3B,GAAAmK,OAAA8tB,WACAH,GACAA,IAAAD,IACA34B,IAAAwB,OAAAq3B,EAAA/3B,GAAAwkB,SAEAsT,IAAAG,UAIA,KADA1I,EAAArwB,EAAAoM,OACAnM,EAAA,EAAcA,EAAAowB,EAAOpwB,IACrBm4B,GACAp4B,EAAAC,GAAAw4B,UAAAz4B,EAAAC,GAAAo0B,iBAEAr0B,EAAAC,GAAA2yB,UAAA,QAIA,IAAAoG,GAAA,SAAA9e,EAAAoL,EAAA+S,EAAAC,GACAhT,OAAA,EACA+S,OAAA,EACAC,OAAA,CAKA,KAJA,GAGAC,GAAA9S,EAHAzlB,EAAAg4B,EAAAM,GACAE,EAAAlT,GAAA+S,GAAAC,EACAr4B,EAAAD,EAAAoM,SAEAnM,MACAwlB,EAAAzlB,EAAAC,IACAu4B,GAAA/S,YAAA0K,KAAAoI,EAAA9S,EAAAxa,SAAAwa,EAAA8K,KAAAoG,aAAA0B,GAAA/S,IAAAiT,IACA9S,EAAAxL,OAAAC,GAqGA,OAhGAyW,GAAA1gB,SAAA,SAAAqV,EAAA+S,EAAAC,GACAU,GAAA,EAAA1T,EAAA+S,EAAAC,IAGA3H,EAAAsI,UAAA,SAAA3T,EAAA+S,EAAAC,GACAU,GAAA,EAAA1T,EAAA+S,EAAAC,IAGA3H,EAAAuI,gBAAA,SAAAjsB,GACA,GAAA4rB,GAAA3I,EAAA+H,cACAtC,EAAAxH,EAAA8D,OAAA0B,IACA,OAAArwB,WAAA8I,QAGAa,KAAAmkB,EACAyH,EAAA/e,WAAA6b,KAAAkD,EAAA/e,YAAA+e,EAAAM,WAAAlsB,EACA4rB,EAAA3I,EAAAgI,oBACAvC,EAAAxH,EAAA8D,OAAAnf,MACA+lB,EAAA/e,WAAA6b,KAAAkD,EAAA/e,YAAA+e,EAAAM,WAAAlsB,EACA4rB,EAAAM,WAAAjJ,EAAA+H,cAAAkB,WAAAlsB,EACAA,GARA4rB,EAAAM,YAcAr4B,EAAAs4B,SAAA,SAAAnsB,EAAA2mB,GACA,MAAAtwB,WAAA8I,OAAAlM,KAAAu4B,UAAAv4B,KAAAuZ,YAAAvZ,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,QAAA,EAAA3jB,KAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,cAAA2C,GAAA1zB,KAAAyyB,MAAAzyB,KAAAuZ,YAGA3Y,EAAAu4B,cAAA,SAAApsB,EAAA2mB,GACA,MAAAtwB,WAAA8I,OAAAlM,KAAAu4B,UAAAv4B,KAAAm0B,gBAAApnB,EAAA2mB,GAAA1zB,KAAAmzB,WAAAnzB,KAAAm0B,iBAGAvzB,EAAA6yB,KAAA,SAAA1mB,EAAA2mB,GACA,MAAAtwB,WAAA8I,QAGAlM,KAAAixB,QACAjxB,KAAAm0B,gBAEApnB,EAAA/M,KAAAizB,YACAlmB,EAAA/M,KAAAizB,WAEAjzB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,QACA3jB,EAAA/M,KAAAizB,UAAAlmB,EAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,cACI,IAAA/wB,KAAA6wB,UACJ9jB,GAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,eAEA/wB,KAAAu4B,UAAAxrB,EAAA2mB,IAbA1zB,KAAAyyB,OAgBA7xB,EAAA2Y,SAAA,SAAAxM,GACA,MAAA3J,WAAA8I,OAGA8jB,EAAAlvB,UAAAyY,SAAA9Y,KAAAT,KAAA+M,GAFA/M,KAAAizB,WAKAryB,EAAAuzB,cAAA,SAAApnB,GACA,MAAA3J,WAAA8I,OAQAlM,KAAA6wB,aAAA7wB,UAAAuZ,UAAAxM,EAAA/M,KAAA6wB,QAAA7wB,KAAA+wB,eAAA/wB,KAAA6wB,QAAA,KAPA7wB,KAAAixB,SAEAjxB,KAAAo0B,eAAAp0B,KAAA6wB,aAAA,aAAA7wB,KAAAizB,WAAAjzB,KAAA6wB,QAAA,GAAA7wB,KAAA+wB,aAAA/wB,KAAA6wB,QACA7wB,KAAAixB,QAAA,GAEAjxB,KAAAo0B,iBAKAxzB,EAAAkwB,OAAA,SAAA/jB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA6wB,QAAA9jB,EACA/M,KAAAiyB,UAAA,IAHAjyB,KAAA6wB,SAMAjwB,EAAAowB,YAAA,SAAAjkB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA+wB,aAAAhkB,EACA/M,KAAAiyB,UAAA,IAHAjyB,KAAA+wB,cAMAnwB,EAAAgwB,KAAA,SAAA7jB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA2wB,MAAA5jB,EACA/M,MAHAA,KAAA2wB,OAOAF,IAEE,GAcFZ,EAAAE,UAAA,6EAAAC,EAAAC,EAAAhC,GAEA,GAAAb,GAAA,SAAAiD,GACAJ,EAAAxvB,KAAAT,KAAAqwB,GACArwB,KAAAo5B,WACAp5B,KAAA60B,mBAAA70B,KAAAqwB,KAAAwE,sBAAA,EACA70B,KAAAq5B,kBAAAr5B,KAAAqwB,KAAAgJ,qBAAA,EACAr5B,KAAAs5B,eAAA,EACAt5B,KAAAk1B,UAAAl1B,KAAAqwB,KAAAkJ,QACA,IACAjsB,GAAA1M,EADA44B,EAAAx5B,KAAAqwB,IAEA,KAAAzvB,IAAA44B,GACAlsB,EAAAksB,EAAA54B,GACA2wB,EAAAjkB,MAAAmsB,KAAA,IAAAtO,QAAA,iBACAqO,EAAA54B,GAAAZ,KAAA05B,kBAAApsB,GAGAikB,GAAAiI,EAAApU,SACAplB,KAAAuJ,IAAAiwB,EAAApU,OAAA,EAAAoU,EAAAG,MAAAH,EAAArD,UAGAjF,EAAA,MACAC,EAAAlD,EAAAmD,WACAA,EAAAhE,EAAAgE,cACAC,EAAAF,EAAAG,WACAC,EAAAJ,EAAAvE,QACAgN,EAAAzI,EAAAiE,WACAyE,EAAA1I,EAAA2I,WACAC,EAAAlK,EAAAE,UAAAiK,QACAC,EAAA,SAAA5J,GACA,GAAiBzvB,GAAjB21B,IACA,KAAA31B,IAAAyvB,GACAkG,EAAA31B,GAAAyvB,EAAAzvB,EAEA,OAAA21B,IAEAnG,EAAA,SAAAC,EAAAC,EAAAvwB,GACA,GACAa,GAAA0M,EADAijB,EAAAF,EAAAG,KAEA,KAAA5vB,IAAA2vB,GACAjjB,EAAAijB,EAAA3vB,GACAyvB,EAAAzvB,GAAA,qBAAA0M,EAAA7M,KAAA6vB,EAAAvwB,MAAAuN,EAAAvN,EAAAuN,EAAApB,cAEAmkB,GAAAG,OAEA0J,EAAA9I,EAAA+I,cAAA,aACAjK,EAAA,SAAApwB,GACA,GAEAC,GAFAqB,KACA+uB,EAAArwB,EAAAoM,MAEA,KAAAnM,EAAA,EAAeA,IAAAowB,EAAS/uB,EAAA4R,KAAAlT,EAAAC,OACxB,MAAAqB,IAEAR,EAAAwsB,EAAAtsB,UAAA,GAAAmvB,EAorBA,OAlrBA7C,GAAAqE,QAAA,SACA7wB,EAAAc,YAAA0rB,EACAxsB,EAAAwqB,OAAAsG,IAAA9wB,EAAAw5B,iBAAAx5B,EAAAy5B,WAAA,EAwBAz5B,EAAA6sB,GAAA,SAAA1iB,EAAAwO,EAAA8W,EAAA9Q,GACA,GAAA+a,GAAAjK,EAAAS,QAAAiJ,EAAAtJ,UAAAxC,CACA,OAAA1U,GAAAvZ,KAAAuJ,IAAA,GAAA+wB,GAAAvvB,EAAAwO,EAAA8W,GAAA9Q,GAAAvf,KAAA4c,IAAA7R,EAAAslB,EAAA9Q,IAGA3e,EAAA+0B,KAAA,SAAA5qB,EAAAwO,EAAA8W,EAAA9Q,GACA,MAAAvf,MAAAuJ,KAAA8mB,EAAAS,QAAAiJ,EAAAtJ,UAAAxC,GAAA0H,KAAA5qB,EAAAwO,EAAA8W,GAAA9Q,IAGA3e,EAAAi1B,OAAA,SAAA9qB,EAAAwO,EAAAuc,EAAAC,EAAAxW,GACA,GAAA+a,GAAAvE,EAAAjF,QAAAiJ,EAAAtJ,UAAAxC,CACA,OAAA1U,GAAAvZ,KAAAuJ,IAAA+wB,EAAAzE,OAAA9qB,EAAAwO,EAAAuc,EAAAC,GAAAxW,GAAAvf,KAAA4c,IAAA7R,EAAAgrB,EAAAxW,IAGA3e,EAAAq1B,UAAA,SAAA3F,EAAA/W,EAAA8W,EAAA8F,EAAA5W,EAAA6W,EAAAC,EAAAC,GACA,GAEAC,GAAAx2B,EAFA44B,EAAA,GAAAvL,IAA8BqJ,WAAAL,EAAAiB,iBAAAhB,EAAAtI,cAAAuI,EAAA+C,kBAAAr5B,KAAAq5B,oBAC9B7I,EAAAH,EAAAG,KAeA,KAbA,qBACAF,EAAArC,EAAA2I,SAAAtG,OAEAA,QACAe,EAAAf,KACAA,EAAAJ,EAAAI,IAEA6F,KAAA,EACAA,EAAA,IACA7F,EAAAJ,EAAAI,GACAA,EAAAuG,UACAV,OAEAp2B,EAAA,EAAcA,EAAAuwB,EAAApkB,OAAoBnM,IAClCw2B,EAAA0D,EAAA5J,GACAkG,EAAAP,UACAO,EAAAP,QAAAiE,EAAA1D,EAAAP,SACAO,EAAAP,QAAAxF,OACAJ,EAAAmG,EAAAP,QAAA1F,EAAAvwB,IAGAywB,IACAJ,EAAAmG,EAAAjG,EAAAvwB,GACA,MAAAw2B,EAAAhd,WACAA,EAAAgd,EAAAhd,eACAgd,GAAAhd,WAGAof,EAAAlL,GAAA6C,EAAAvwB,GAAAwZ,EAAAgd,EAAAx2B,EAAAo2B,EAEA,OAAAn2B,MAAAuJ,IAAAovB,EAAApZ,IAGA3e,EAAAk2B,YAAA,SAAAxG,EAAA/W,EAAA8W,EAAA8F,EAAA5W,EAAA6W,EAAAC,EAAAC,GAGA,MAFAjG,GAAAkC,gBAAA,GAAAlC,EAAAkC,gBACAlC,EAAAuF,cAAA,EACA51B,KAAAi2B,UAAA3F,EAAA/W,EAAA8W,EAAA8F,EAAA5W,EAAA6W,EAAAC,EAAAC,IAGA11B,EAAAo2B,cAAA,SAAA1G,EAAA/W,EAAAuc,EAAAC,EAAAI,EAAA5W,EAAA6W,EAAAC,EAAAC,GAGA,MAFAP,GAAAC,QAAAF,EACAC,EAAAxD,gBAAA,GAAAwD,EAAAxD,iBAAA,GAAAuD,EAAAvD,gBACAvyB,KAAAi2B,UAAA3F,EAAA/W,EAAAwc,EAAAI,EAAA5W,EAAA6W,EAAAC,EAAAC,IAGA11B,EAAAH,KAAA,SAAAozB,EAAAsD,EAAAC,EAAA7X,GACA,MAAAvf,MAAAuJ,IAAA0kB,EAAAiJ,YAAA,EAAArD,EAAAsD,EAAAC,GAAA7X,IAGA3e,EAAAgc,IAAA,SAAA7R,EAAAslB,EAAA9Q,GAKA,MAJAA,GAAAvf,KAAAu6B,kBAAAhb,EAAA,MACA,MAAA8Q,EAAAkC,kBACAlC,EAAAkC,gBAAAhT,IAAAvf,KAAAyyB,QAAAzyB,KAAA6Y,SAEA7Y,KAAAuJ,IAAA,GAAA0kB,GAAAljB,EAAA,EAAAslB,GAAA9Q,IAGA6N,EAAAoN,WAAA,SAAAnK,EAAAoK,GACApK,QACA,MAAAA,EAAAgJ,oBACAhJ,EAAAgJ,mBAAA,EAEA,IAEA9T,GAAA+D,EAFAqP,EAAA,GAAAvL,GAAAiD,GACAqK,EAAA/B,EAAAnG,SASA,KAPA,MAAAiI,IACAA,GAAA,GAEAC,EAAAC,QAAAhC,GAAA,GACAA,EAAA/e,WAAA,EACA+e,EAAAnE,aAAAmE,EAAAlG,MAAAkG,EAAAxF,WAAAuH,EAAAjI,MACAlN,EAAAmV,EAAA7C,OACAtS,GACA+D,EAAA/D,EAAAiO,MACAiH,GAAAlV,YAAA0I,IAAA1I,EAAAxa,SAAAwa,EAAA8K,KAAAoG,YACAkC,EAAApvB,IAAAgc,IAAA3L,WAAA2L,EAAAqN,QAEArN,EAAA+D,CAGA,OADAoR,GAAAnxB,IAAAovB,EAAA,GACAA,GAGA/3B,EAAA2I,IAAA,SAAAwD,EAAAwS,EAAAoa,EAAAxD,GACA,GAAAyE,GAAAzK,EAAApwB,EAAA86B,EAAAlC,EAAAmC,CAIA,IAHA,qBACAvb,EAAAvf,KAAAu6B,kBAAAhb,EAAA,KAAAxS,MAEAA,YAAAijB,IAAA,CACA,GAAAjjB,YAAA6e,QAAA7e,KAAAiG,MAAAue,EAAAxkB,GAAA,CAKA,IAJA4sB,KAAA,SACAxD,KAAA,EACAyE,EAAArb,EACA4Q,EAAApjB,EAAAb,OACAnM,EAAA,EAAgBA,EAAAowB,EAAOpwB,IACvBwxB,EAAAsJ,EAAA9tB,EAAAhN,MACA86B,EAAA,GAAAzN,IAAiChI,OAAAyV,KAEjC76B,KAAAuJ,IAAAsxB,EAAAD,GACA,2CACA,aAAAjB,EACAiB,EAAAC,EAAAjhB,WAAAihB,EAAA1G,gBAAA0G,EAAA5B,WACQ,UAAAU,IACRkB,EAAAjhB,YAAAihB,EAAAtN,UAGAqN,GAAAzE,CAEA,OAAAn2B,MAAAiyB,UAAA,GACK,sBACL,MAAAjyB,MAAA+6B,SAAAhuB,EAAAwS,EACK,yBAGL,mBAAAxS,EAAA,uEAFAA,GAAAkhB,EAAAiJ,YAAA,EAAAnqB,GASA,GAHAkjB,EAAAnvB,UAAAyI,IAAA9I,KAAAT,KAAA+M,EAAAwS,IAGAvf,KAAA0xB,KAAA1xB,KAAAyyB,QAAAzyB,KAAAizB,aAAAjzB,KAAA6Y,SAAA7Y,KAAAizB,UAAAjzB,KAAAuZ,WAIA,IAFAof,EAAA34B,KACA86B,EAAAnC,EAAAqC,UAAAjuB,EAAA6M,WACA+e,EAAAnG,WACAsI,GAAAnC,EAAAnG,UAAA6G,kBACAV,EAAAJ,UAAAI,EAAAxF,YAAA,GACMwF,EAAAjH,KACNiH,EAAAjG,UAAA,MAEAiG,IAAAnG,SAIA,OAAAxyB,OAGAY,EAAAuW,OAAA,SAAApK,GACA,GAAAA,YAAAijB,GAAA,CACAhwB,KAAA26B,QAAA5tB,GAAA,EACA,IAAA4rB,GAAA5rB,EAAAylB,UAAAzlB,EAAAsjB,KAAAhD,UAAA2C,EAAAgI,oBAAAhI,EAAA+H,aAEA,OADAhrB,GAAA6M,YAAA7M,EAAA8L,QAAA9L,EAAAkuB,WAAAtC,EAAAlG,QAAA1lB,EAAA6nB,UAAA7nB,EAAAonB,gBAAApnB,EAAAomB,WAAApmB,EAAAomB,YAAApmB,EAAAksB,WACAj5B,KACI,GAAA+M,YAAA6e,QAAA7e,KAAAiG,MAAAue,EAAAxkB,GAAA,CAEJ,IADA,GAAAhN,GAAAgN,EAAAb,SACAnM,MACAC,KAAAmX,OAAApK,EAAAhN,GAEA,OAAAC,MACI,yBACJA,KAAAk7B,YAAAnuB,GAEA/M,KAAAorB,KAAA,KAAAre,IAGAnM,EAAA+5B,QAAA,SAAApV,EAAA4V,GACAlL,EAAAnvB,UAAA65B,QAAAl6B,KAAAT,KAAAulB,EAAA4V,EACA,IAAAC,GAAAp7B,KAAAq7B,KAOA,OANAD,GAEIp7B,KAAAyyB,MAAA2I,EAAAxhB,WAAAwhB,EAAAhH,eAAAgH,EAAAnC,aACJj5B,KAAAyyB,MAAAzyB,KAAAuZ,WACAvZ,KAAAmzB,WAAAnzB,KAAAo0B,gBAHAp0B,KAAAyyB,MAAAzyB,KAAAmzB,WAAAnzB,KAAAizB,UAAAjzB,KAAAo0B,eAAA,EAKAp0B,MAGAY,EAAA06B,OAAA,SAAAvuB,EAAAwuB,GACA,MAAAv7B,MAAAuJ,IAAAwD,EAAA/M,KAAAu6B,kBAAA,KAAAgB,GAAA,EAAAxuB,KAGAnM,EAAA+xB,OAAA/xB,EAAA46B,eAAA,SAAAzuB,EAAAwS,EAAAoa,EAAAxD,GACA,MAAAn2B,MAAAuJ,IAAAwD,EAAAwS,GAAA,EAAAoa,EAAAxD,IAGAv1B,EAAA66B,eAAA,SAAArW,EAAAmW,EAAA5B,EAAAxD,GACA,MAAAn2B,MAAAuJ,IAAA6b,EAAAplB,KAAAu6B,kBAAA,KAAAgB,GAAA,EAAAnW,GAAAuU,EAAAxD,IAGAv1B,EAAAm6B,SAAA,SAAAW,EAAAnc,GAEA,MADAvf,MAAAo5B,QAAAsC,GAAA17B,KAAAu6B,kBAAAhb,GACAvf,MAGAY,EAAA+6B,SAAA,SAAApc,EAAAsU,EAAAsD,EAAAC,GACA,GAAA3B,GAAAxH,EAAAiJ,YAAA,EAAAgD,EAAA/C,EAAAC,GAAAp3B,KAIA,OAHAy1B,GAAApF,KAAAoG,WAAAhB,EAAApF,KAAAiH,kBAAAzD,EACA4B,EAAAnJ,KAAA,UACAtsB,KAAAq6B,WAAA,EACAr6B,KAAAuJ,IAAAksB,EAAAlW,IAGA3e,EAAAs6B,YAAA,SAAAQ,GAEA,aADA17B,MAAAo5B,QAAAsC,GACA17B,MAGAY,EAAAg7B,aAAA,SAAAF,GACA,aAAA17B,KAAAo5B,QAAAsC,GAAA17B,KAAAo5B,QAAAsC,OAGA96B,EAAA25B,kBAAA,SAAAsB,EAAAN,EAAAO,EAAAC,GACA,GAAAh8B,EAEA,IAAAg8B,YAAA/L,IAAA+L,EAAAlN,WAAA7uB,KACAA,KAAAmX,OAAA4kB,OACI,IAAAA,gBAAAnQ,QAAAmQ,EAAA/oB,MAAAue,EAAAwK,IAEJ,IADAh8B,EAAAg8B,EAAA7vB,SACAnM,MACAg8B,EAAAh8B,YAAAiwB,IAAA+L,EAAAh8B,GAAA8uB,WAAA7uB,MACAA,KAAAmX,OAAA4kB,EAAAh8B,GAIA,uBACA,MAAAC,MAAAu6B,kBAAAgB,EAAAO,GAAA,0BAAA97B,KAAAo5B,QAAAmC,GAAAM,EAAA77B,KAAAuZ,WAAA,EAAAuiB,EAGA,IADAP,KAAA,EACA,qBAAAxO,MAAA8O,IAAA,MAAA77B,KAAAo5B,QAAAyC,GAUI,MAAAA,IACJA,EAAA77B,KAAAuZ,gBAXA,CAEA,GADAxZ,EAAA87B,EAAA1Q,QAAA,KACAprB,OACA,aAAAC,KAAAo5B,QAAAyC,GACAC,EAAA97B,KAAAo5B,QAAAyC,GAAA77B,KAAAuZ,WAAAgiB,IAEAv7B,KAAAo5B,QAAAyC,GAAAN,CAEAA,GAAArlB,SAAA2lB,EAAAG,OAAAj8B,EAAA,WAAAk8B,OAAAJ,EAAAK,OAAAn8B,EAAA,IACA87B,EAAA97B,EAAA,EAAAC,KAAAu6B,kBAAAsB,EAAAK,OAAA,EAAAn8B,EAAA,KAAA+7B,GAAA97B,KAAAuZ,WAIA,MAAA0iB,QAAAJ,GAAAN,GAGA36B,EAAAu7B,KAAA,SAAA5c,EAAAmU,GACA,MAAA1zB,MAAAu4B,UAAA,mBAAAhZ,EAAAvf,KAAAu6B,kBAAAhb,GAAAmU,KAAA,IAGA9yB,EAAA8U,KAAA,WACA,MAAA1V,MAAA+Z,QAAA,IAGAnZ,EAAAw7B,YAAA,SAAA7c,EAAAmU,GACA,MAAA1zB,MAAAq8B,KAAA9c,EAAAmU,IAGA9yB,EAAA07B,YAAA,SAAA/c,EAAAmU,GACA,MAAA1zB,MAAAga,MAAAuF,EAAAmU,IAGA9yB,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,GACA3zB,KAAA0xB,KACA1xB,KAAA0yB,UAAA,KAEA,IAKAnN,GAAAqO,EAAAtK,EAAAuK,EAAA0I,EAAAC,EAAA5B,EALA1G,EAAAl0B,KAAAixB,OAAAjxB,KAAAm0B,gBAAAn0B,KAAAo0B,eACAlB,EAAAlzB,KAAAyyB,MACAgK,EAAAz8B,KAAA4Z,WACA8iB,EAAA18B,KAAAi5B,WACA0D,EAAA38B,KAAA6Y,OAEA,IAAA4a,GAAAS,EAAA,KACAl0B,KAAAmzB,WAAAnzB,KAAAyyB,MAAAyB,EACAl0B,KAAA40B,WAAA50B,KAAA48B,oBACAhJ,GAAA,EACAC,EAAA,aACA0I,IAAAv8B,KAAAwyB,UAAAqC,mBACA,IAAA70B,KAAAizB,YAAAQ,GAAA,GAAAA,UAAAzzB,KAAAw0B,aAAA,GAAAx0B,KAAAw0B,eAAAtD,IAAAlxB,KAAAw0B,eAAAf,GAAAzzB,KAAA63B,SACA0E,GAAA,EACAv8B,KAAAw0B,aAAAtD,IACA2C,EAAA,uBAIA7zB,KAAAw0B,aAAAx0B,KAAAizB,YAAAS,GAAAD,GAAAzzB,KAAAw0B,eAAAf,IAAAvC,EACAuC,EAAAS,EAAA,SAEI,IAAAT,EAAA,KAMJ,GALAzzB,KAAAmzB,WAAAnzB,KAAAyyB,MAAA,GACA,IAAAS,GAAA,IAAAlzB,KAAAizB,WAAAjzB,KAAAw0B,eAAAtD,IAAAlxB,KAAAw0B,aAAA,GAAAf,EAAA,GAAAzzB,KAAAw0B,cAAA,MACAX,EAAA,oBACAD,EAAA5zB,KAAA40B,WAEAnB,EAAA,EACAzzB,KAAA+0B,SAAA,EACA/0B,KAAAwyB,UAAAqC,oBAAA70B,KAAA40B,WACA2H,EAAA3I,GAAA,EACAC,EAAA,qBACM7zB,KAAAw0B,cAAA,GAAAx0B,KAAA63B,SACN0E,GAAA,GAEAv8B,KAAAw0B,aAAAf,MACK,CAEL,GADAzzB,KAAAw0B,aAAAx0B,KAAAizB,YAAAS,GAAAD,GAAAzzB,KAAAw0B,eAAAf,IAAAvC,EACA,IAAAuC,GAAAG,EAEA,IADArO,EAAAvlB,KAAA63B,OACAtS,GAAA,IAAAA,EAAA3L,YACA2L,EAAA0N,YACAW,GAAA,GAEArO,IAAAiO,KAGAC,GAAA,EACAzzB,KAAA6yB,WACA0J,GAAA,OAII,CAEJ,GAAAv8B,KAAAq6B,YAAAr6B,KAAAo6B,mBAAA1G,EAAA,CACA,GAAAD,GAAAP,EAEA,IADA3N,EAAAvlB,KAAA63B,OACAtS,KAAA3L,YAAA6Z,IAAA+I,GACAjX,EAAA0N,WAAA,YAAA1N,EAAA+G,MAAA/G,EAAA8M,OAAA,IAAA9M,EAAA3L,YAAA,IAAA5Z,KAAAw0B,eACAgI,EAAAjX,GAEAA,IAAAiO,UAIA,KADAjO,EAAAvlB,KAAAq7B,MACA9V,KAAA3L,YAAA6Z,IAAA+I,GACAjX,EAAA0N,WAAA,YAAA1N,EAAA+G,MAAA/G,EAAAiP,aAAA,IACAgI,EAAAjX,GAEAA,IAAAsX,KAGAL,KACAx8B,KAAAyyB,MAAAgB,EAAA+I,EAAA5iB,WACA5Z,KAAAmzB,WAAAM,EAAAzzB,KAAA0wB,QAAA1wB,KAAAo0B,eAAAp0B,KAAA+wB,eAIA/wB,KAAAmzB,WAAAnzB,KAAAyyB,MAAAzyB,KAAAw0B,aAAAf,EAEA,GAAAzzB,KAAAyyB,QAAAS,GAAAlzB,KAAA63B,QAAAlE,GAAA4I,GAAAC,EAAA,CAeA,GAbIx8B,KAAA6yB,WACJ7yB,KAAA6yB,UAAA,GAGA7yB,KAAA+0B,UAAA/0B,KAAA6Y,SAAA7Y,KAAAyyB,QAAAS,GAAAO,EAAA,IACAzzB,KAAA+0B,SAAA,GAGA,IAAA7B,GAAAlzB,KAAAqwB,KAAAkF,UAAA,IAAAv1B,KAAAyyB,OAAAzyB,KAAAizB,WAAAS,GACA1zB,KAAAm1B,UAAA,YAGAyF,EAAA56B,KAAAyyB,MACAmI,GAAA1H,EAEA,IADA3N,EAAAvlB,KAAA63B,OACAtS,IACA+D,EAAA/D,EAAAiO,MACAoH,IAAA56B,KAAAyyB,SAAAzyB,KAAA6Y,SAAA8jB,MAEMpX,EAAAwP,SAAAxP,EAAA3L,YAAAghB,IAAArV,EAAA1M,UAAA0M,EAAAmM,OACN8K,IAAAjX,GACAvlB,KAAAga,QAEAuL,EAAAqP,UAGArP,EAAAlT,QAAAkT,EAAA0L,OAAA1L,EAAA4O,gBAAA5O,EAAA6O,iBAAAX,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAFApO,EAAAlT,QAAAohB,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,IAKApO,EAAA+D,MAIA,KADA/D,EAAAvlB,KAAAq7B,MACA9V,IACA+D,EAAA/D,EAAAsX,MACAjC,IAAA56B,KAAAyyB,SAAAzyB,KAAA6Y,SAAA8jB,KAFA,CAIM,GAAApX,EAAAwP,SAAAxP,EAAA3L,YAAAsZ,IAAA3N,EAAA1M,UAAA0M,EAAAmM,IAAA,CACN,GAAA8K,IAAAjX,EAAA,CAEA,IADAiX,EAAAjX,EAAAsX,MACAL,KAAAM,UAAA98B,KAAAyyB,OACA+J,EAAAnqB,OAAAmqB,EAAA5H,UAAA4H,EAAArI,iBAAAV,EAAA+I,EAAA5iB,YAAA4iB,EAAAvD,YAAAxF,EAAA+I,EAAA5iB,YAAA4iB,EAAAvD,WAAAvF,EAAAC,GACA6I,IAAAK,KAEAL,GAAA,KACAx8B,KAAAga,QAEAuL,EAAAqP,UAGArP,EAAAlT,QAAAkT,EAAA0L,OAAA1L,EAAA4O,gBAAA5O,EAAA6O,iBAAAX,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAFApO,EAAAlT,QAAAohB,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAKApO,EAAA+D,EAIAtpB,KAAAk1B,YAAAxB,IACAkG,EAAA1tB,QACA2tB,IAEA75B,KAAAm1B,UAAA,cAGAtB,IAAA7zB,KAAA0xB,KAAA+K,IAAAz8B,KAAA4Z,YAAA8iB,IAAA18B,KAAAi5B,aAAA,IAAAj5B,KAAAyyB,OAAAyB,GAAAl0B,KAAAm0B,mBACAP,IACAgG,EAAA1tB,QACA2tB,IAEA75B,KAAAwyB,UAAAqC,oBACA70B,KAAA0yB,UAAA,MAEA1yB,KAAA+0B,SAAA,IAEArB,GAAA1zB,KAAAqwB,KAAAwD,IACA7zB,KAAAm1B,UAAAtB,OAKAjzB,EAAAg8B,gBAAA,WAEA,IADA,GAAArX,GAAAvlB,KAAA63B,OACAtS,GAAA,CACA,GAAAA,EAAA1M,SAAA0M,YAAA6H,IAAA7H,EAAAqX,kBACA,QAEArX,KAAAiO,MAEA,UAGA5yB,EAAAm8B,YAAA,SAAAC,EAAA5X,EAAAgT,EAAA6E,GACAA,gBAIA,KAHA,GAAAn9B,MACAylB,EAAAvlB,KAAA63B,OACAD,EAAA,EACArS,GACAA,EAAA3L,WAAAqjB,IAEK1X,YAAA0I,GACL7I,KAAA,IACAtlB,EAAA83B,KAAArS,IAGA6S,KAAA,IACAt4B,EAAA83B,KAAArS,GAEAyX,KAAA,IACAl9B,IAAAwB,OAAAikB,EAAAwX,aAAA,EAAA3X,EAAAgT,IACAR,EAAA93B,EAAAoM,UAGAqZ,IAAAiO,KAEA,OAAA1zB,IAGAc,EAAAixB,YAAA,SAAA9mB,EAAAiyB,GACA,GAGA5X,GAAArlB,EAHAm9B,EAAAl9B,KAAA0xB,IACA5xB,KACA83B,EAAA,CAOA,KALAsF,GACAl9B,KAAA0yB,UAAA,MAEAtN,EAAA6I,EAAA4D,YAAA9mB,GACAhL,EAAAqlB,EAAAlZ,SACAnM,OACAqlB,EAAArlB,GAAA8uB,WAAA7uB,MAAAg9B,GAAAh9B,KAAAm9B,UAAA/X,EAAArlB,OACAD,EAAA83B,KAAAxS,EAAArlB,GAMA,OAHAm9B,IACAl9B,KAAA0yB,UAAA,MAEA5yB,GAGAc,EAAAw8B,OAAA,WACA,MAAAp9B,MAAAq9B,SAGAz8B,EAAAu8B,UAAA,SAAA5X,GAEA,IADA,GAAAoT,GAAApT,EAAAsJ,SACA8J,GAAA,CACA,GAAAA,IAAA34B,KACA,QAEA24B,KAAA9J,SAEA,UAGAjuB,EAAA08B,cAAA,SAAAC,EAAAC,EAAAP,GACAA,KAAA,CAIA,KAHA,GAEAr8B,GAFA2kB,EAAAvlB,KAAA63B,OACA4F,EAAAz9B,KAAAo5B,QAEA7T,GACAA,EAAA3L,YAAAqjB,IACA1X,EAAA3L,YAAA2jB,GAEAhY,IAAAiO,KAEA,IAAAgK,EACA,IAAA58B,IAAA68B,GACAA,EAAA78B,IAAAq8B,IACAQ,EAAA78B,IAAA28B,EAIA,OAAAv9B,MAAAiyB,UAAA,IAGArxB,EAAA88B,MAAA,SAAArN,EAAAtlB,GACA,IAAAslB,IAAAtlB,EACA,MAAA/K,MAAA0yB,UAAA,KAKA,KAHA,GAAAtN,GAAAra,EAAA/K,KAAA6xB,YAAA9mB,GAAA/K,KAAA+8B,aAAA,SACAh9B,EAAAqlB,EAAAlZ,OACAyxB,GAAA,IACA59B,MACAqlB,EAAArlB,GAAA29B,MAAArN,EAAAtlB,KACA4yB,GAAA,EAGA,OAAAA,IAGA/8B,EAAA0nB,MAAA,SAAAmV,GACA,GAAArY,GAAAplB,KAAA+8B,aAAA,SACAh9B,EAAAqlB,EAAAlZ,MAEA,KADAlM,KAAAyyB,MAAAzyB,KAAAmzB,WAAA,IACApzB,MACAqlB,EAAArlB,GAAA2yB,UAAA,KAKA,OAHA+K,MAAA,IACAz9B,KAAAo5B,YAEAp5B,KAAAiyB,UAAA,IAGArxB,EAAAoxB,WAAA,WAEA,IADA,GAAAzM,GAAAvlB,KAAA63B,OACAtS,GACAA,EAAAyM,aACAzM,IAAAiO,KAEA,OAAAxD,GAAAlvB,UAAAkxB,WAAAvxB,KAAAT,OAGAY,EAAA8xB,SAAA,SAAAkL,EAAAC,GACA,GAAAD,IAAA59B,KAAA0xB,IAEA,IADA,GAAAnM,GAAAvlB,KAAA63B,OACAtS,GACAA,EAAAmN,SAAAkL,GAAA,GACArY,IAAAiO,KAGA,OAAAvD,GAAAnvB,UAAA4xB,SAAAjyB,KAAAT,KAAA49B,EAAAC,IAGAj9B,EAAA23B,UAAA,SAAA9E,EAAAC,EAAAoK,GACA99B,KAAAo6B,kBAAA,CACA,IAAA9sB,GAAA0iB,EAAAlvB,UAAAy3B,UAAAl3B,MAAArB,KAAAoD,UAEA,OADApD,MAAAo6B,kBAAA,EACA9sB,GAGA1M,EAAA2Y,SAAA,SAAAxM,GACA,MAAA3J,WAAA8I,QAMA,IAAAlM,KAAAuZ,YAAA,IAAAxM,GACA/M,KAAA+9B,UAAA/9B,KAAAizB,UAAAlmB,GAEA/M,OARAA,KAAAixB,QACAjxB,KAAAm0B,gBAEAn0B,KAAAizB,YAQAryB,EAAAuzB,cAAA,SAAApnB,GACA,IAAA3J,UAAA8I,OAAA,CACA,GAAAlM,KAAAixB,OAAA,CAKA,IAJA,GAGA+M,GAAAC,EAHAC,EAAA,EACA3Y,EAAAvlB,KAAAq7B,MACAoB,EAAA,aAEAlX,GACAyY,EAAAzY,EAAAsX,MACAtX,EAAA0L,QACA1L,EAAA4O,gBAEA5O,EAAA3L,WAAA6iB,GAAAz8B,KAAAs5B,gBAAA/T,EAAA1M,QACA7Y,KAAAuJ,IAAAgc,IAAA3L,WAAA2L,EAAAqN,QAEA6J,EAAAlX,EAAA3L,WAEA2L,EAAA3L,WAAA,IAAA2L,EAAA1M,UACAqlB,GAAA3Y,EAAA3L,WACA5Z,KAAAwyB,UAAA6G,oBACAr5B,KAAA4Z,YAAA2L,EAAA3L,WAAA5Z,KAAAi5B,YAEAj5B,KAAAs9B,eAAA/X,EAAA3L,YAAA,eACA6iB,EAAA,GAEAwB,EAAA1Y,EAAA3L,WAAA2L,EAAA6O,eAAA7O,EAAA0T,WACAgF,EAAAC,IACAA,EAAAD,GAEA1Y,EAAAyY,CAEAh+B,MAAAizB,UAAAjzB,KAAAo0B,eAAA8J,EACAl+B,KAAAixB,QAAA,EAEA,MAAAjxB,MAAAo0B,eAEA,MAAArnB,IAAA/M,KAAAm0B,gBAAAn0B,KAAA+9B,UAAA/9B,KAAAo0B,eAAArnB,GAAA/M,MAGAY,EAAAmZ,OAAA,SAAAhN,GACA,IAAAA,EAGA,IAFA,GAAAwY,GAAAvlB,KAAA63B,OACApE,EAAAzzB,KAAAyyB,MACAlN,GACAA,EAAA3L,aAAA6Z,GAAA,YAAAlO,EAAA+G,OACA/G,EAAAiP,aAAA,GAEAjP,IAAAiO,KAGA,OAAAxD,GAAAlvB,UAAAiZ,OAAA1Y,MAAArB,KAAAoD,YAGAxC,EAAAu9B,WAAA,WAEA,IADA,GAAAxF,GAAA34B,KAAAwyB,UACAmG,EAAAnG,WACAmG,IAAAnG,SAEA,OAAAmG,KAAA3I,EAAAgI,qBAGAp3B,EAAAo6B,QAAA,WACA,MAAAh7B,MAAA6Y,QAAA7Y,KAAAmzB,YAAAnzB,KAAAwyB,UAAAwI,UAAAh7B,KAAA4Z,YAAA5Z,KAAAi5B,YAGA7L,IAEE,GAmBFyC,EAAAE,UAAA,kEAAA3C,EAAAa,EAAAmQ,GAEA,GAAAC,GAAA,SAAAhO,GACAjD,EAAA3sB,KAAAT,KAAAqwB,GACArwB,KAAA6wB,QAAA7wB,KAAAqwB,KAAAS,QAAA,EACA9wB,KAAA+wB,aAAA/wB,KAAAqwB,KAAAW,aAAA,EACAhxB,KAAA0wB,OAAA,EACA1wB,KAAA2wB,MAAA3wB,KAAAqwB,KAAAO,QAAA,EACA5wB,KAAAixB,QAAA,GAEAC,EAAA,MACAC,EAAAlD,EAAAmD,WACAwI,EAAAzI,EAAAiE,WACAyE,EAAA1I,EAAA2I,WACAC,EAAAlK,EAAAE,UAAAiK,QACAsE,EAAA,GAAAF,GAAA,eACAx9B,EAAAy9B,EAAAv9B,UAAA,GAAAssB,EA0dA,OAxdAxsB,GAAAc,YAAA28B,EACAz9B,EAAAwqB,OAAAsG,KAAA,EACA2M,EAAA5M,QAAA,SAEA7wB,EAAAoxB,WAAA,WAKA,MAJAhyB,MAAA2wB,MAAA3wB,KAAAqwB,KAAAO,QAAA,EACA5wB,KAAA6wB,QAAA7wB,KAAAqwB,KAAAS,QAAA,EACA9wB,KAAA+wB,aAAA/wB,KAAAqwB,KAAAW,aAAA,EACAhxB,KAAAiyB,UAAA,GACA7E,EAAAtsB,UAAAkxB,WAAAvxB,KAAAT,OAGAY,EAAA29B,YAAA,SAAA1K,EAAAtU,EAAA4X,EAAAC,GACA,MAAAp3B,MAAAuJ,IAAA0kB,EAAAiJ,YAAA,EAAArD,EAAAsD,EAAAC,GAAA7X,IAGA3e,EAAA49B,eAAA,SAAA3K,EAAAtU,GACA,GAAAsU,EACA,SAAAtU,EACAvf,KAAA09B,MAAA,KAAA7J,OAKA,KAHA,GAAA/zB,GAAAE,KAAA6xB,YAAAgC,GAAA,GACA9zB,EAAAD,EAAAoM,OACAunB,EAAAzzB,KAAAu6B,kBAAAhb,KACAxf,MACAD,EAAAC,GAAA6Z,aAAA6Z,GACA3zB,EAAAC,GAAA2yB,UAAA,KAKA,OAAA1yB,OAGAY,EAAA69B,YAAA,SAAAlf,GACA,MAAAvf,MAAAw+B,eAAApR,EAAAgE,WAAA+I,cAAA5a,IAGA3e,EAAA89B,QAAA,SAAAnf,EAAA8Q,GACAA,OACA,IAEA9W,GAAA3Y,EAAA60B,EAFAc,GAAe7I,KAAA4Q,EAAAjR,UAAArtB,KAAAm+B,aAAA5L,iBAAA,GACf+H,EAAAjK,EAAAS,QAAAiJ,EAAAtJ,UAAAxC,CAEA,KAAArtB,IAAAyvB,GACAkG,EAAA31B,GAAAyvB,EAAAzvB,EAcA,OAZA21B,GAAA9C,KAAAzzB,KAAAu6B,kBAAAhb,GACAhG,EAAAwF,KAAA4f,IAAA1C,OAAA1F,EAAA9C,MAAAzzB,KAAAyyB,OAAAzyB,KAAAi5B,YAAA,KACAxD,EAAA,GAAA6E,GAAAt6B,KAAAuZ,EAAAgd,GACAA,EAAAhB,QAAA,WACAE,EAAA1qB,OAAAgP,QAAA,GACA0b,EAAApF,KAAAoD,OAAAgC,EAAA1qB,OAAA0oB,QAAAla,IAAAkc,EAAAlc,YACAkc,EAAAlc,SAAAwF,KAAA4f,IAAAlJ,EAAApF,KAAAoD,KAAAgC,EAAA1qB,OAAA0oB,QAAAgC,EAAA1qB,OAAAkuB,YAEA5I,EAAAkF,SACAE,EAAAN,UAAA,YAGAM,GAGA70B,EAAAg+B,YAAA,SAAAC,EAAAC,EAAAzO,GACAA,QACAwO,EAAA7+B,KAAAu6B,kBAAAsE,GACAxO,EAAA2F,SAAmBS,WAAAz2B,KAAAm8B,KAAA9E,kBAAAwH,GAAA9Q,cAAA/tB,MACnBqwB,EAAAkC,gBAAAlC,EAAAkC,mBAAA,CACA,IAAAkD,GAAAz1B,KAAA0+B,QAAAI,EAAAzO,EACA,OAAAoF,GAAAlc,SAAAwF,KAAA4f,IAAAlJ,EAAApF,KAAAoD,KAAAoL,GAAA7+B,KAAAi5B,YAAA,OAGAr4B,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,GACA3zB,KAAA0xB,KACA1xB,KAAA0yB,UAAA,KAEA,IASAnN,GAAAqO,EAAAtK,EAAAuK,EAAA0I,EAAAzI,EAAA0I,EAAA5B,EATA1G,EAAAl0B,KAAAixB,OAAAjxB,KAAAm0B,gBAAAn0B,KAAAo0B,eACA2K,EAAA/+B,KAAAizB,UACAC,EAAAlzB,KAAAyyB,MACA4B,EAAAr0B,KAAAmzB,WACAsJ,EAAAz8B,KAAA4Z,WACA8iB,EAAA18B,KAAAi5B,WACA1E,EAAAv0B,KAAAw0B,aACAmI,EAAA38B,KAAA6Y,QACAyb,EAAAt0B,KAAA0wB,MAEA,IAAA+C,GAAAS,EAAA,KACAl0B,KAAAg/B,UACAh/B,KAAAmzB,WAAAe,EACAl0B,KAAA0wB,OAAA1wB,KAAA6wB,SAEA7wB,KAAA40B,WAAA50B,KAAA48B,oBACAhJ,GAAA,EACAC,EAAA,aACA0I,IAAAv8B,KAAAwyB,UAAAqC,mBACA,IAAA70B,KAAAizB,YAAAQ,GAAA,GAAAA,UAAAc,EAAA,GAAAA,IAAArD,IAAAqD,IAAAd,GAAAzzB,KAAA63B,SACA0E,GAAA,EACAhI,EAAArD,IACA2C,EAAA,uBAIA7zB,KAAAw0B,aAAAx0B,KAAAizB,YAAAS,GAAAD,GAAAzzB,KAAAw0B,eAAAf,IAAAvC,EACAlxB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,QACA1wB,KAAAyyB,MAAAgB,EAAA,GAEAzzB,KAAAyyB,MAAAsM,EACAtL,EAAAsL,EAAA,UAGI,IAAAtL,EAAA,KASJ,GARAzzB,KAAAg/B,UACAh/B,KAAAmzB,WAAAnzB,KAAA0wB,OAAA,GAEA1wB,KAAAyyB,MAAA,GACA,IAAAS,GAAA,IAAA6L,GAAAxK,IAAArD,IAAAqD,EAAA,GAAAd,EAAA,GAAAc,GAAA,KAAAv0B,KAAAg/B,WACAnL,EAAA,oBACAD,EAAA5zB,KAAA40B,WAEAnB,EAAA,EACAzzB,KAAA+0B,SAAA,EACA/0B,KAAAwyB,UAAAqC,oBAAA70B,KAAA40B,WACA2H,EAAA3I,GAAA,EACAC,EAAA,qBACMU,GAAA,GAAAv0B,KAAA63B,SACN0E,GAAA,GAEAv8B,KAAAw0B,aAAAf,MACK,CAEL,GADAzzB,KAAAw0B,aAAAuK,IAAArL,GAAAD,GAAAzzB,KAAAw0B,eAAAf,IAAAvC,EACA,IAAAuC,GAAAG,EAEA,IADArO,EAAAvlB,KAAA63B,OACAtS,GAAA,IAAAA,EAAA3L,YACA2L,EAAA0N,YACAW,GAAA,GAEArO,IAAAiO,KAGAC,GAAA,EACAzzB,KAAA6yB,WACA0J,GAAA,OAgCA,IA3BA,IAAAwC,GAAAxK,EAAA,IACAgI,GAAA,GAEAv8B,KAAAyyB,MAAAzyB,KAAAw0B,aAAAf,EACAzzB,KAAAg/B,UACAh/B,KAAAmzB,WAAAM,EACA,IAAAzzB,KAAA6wB,UACAiD,EAAAiL,EAAA/+B,KAAA+wB,aACA/wB,KAAA0wB,OAAA1wB,KAAAmzB,WAAAW,GAAA,EACA,IAAA9zB,KAAA0wB,QAAA1wB,KAAA0wB,SAAA1wB,KAAAmzB,WAAAW,GAAAO,GAAAZ,GACAzzB,KAAA0wB,SAEA1wB,KAAAyyB,MAAAzyB,KAAAmzB,WAAAnzB,KAAA0wB,OAAAoD,EACA9zB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,UACA1wB,KAAAyyB,MAAAsM,EAAA/+B,KAAAyyB,OAEAzyB,KAAAyyB,MAAAsM,GACA/+B,KAAAyyB,MAAAsM,EACAtL,EAAAsL,EAAA,MACO/+B,KAAAyyB,MAAA,EACPzyB,KAAAyyB,MAAAgB,EAAA,EAEAA,EAAAzzB,KAAAyyB,QAKAzyB,KAAAq6B,YAAAr6B,KAAAo6B,mBAAA1G,EAAA,CAEA,GADAD,EAAAzzB,KAAAyyB,MACAgB,GAAAP,EAEA,IADA3N,EAAAvlB,KAAA63B,OACAtS,KAAA3L,YAAA6Z,IAAA+I,GACAjX,EAAA0N,WAAA,YAAA1N,EAAA+G,MAAA/G,EAAA8M,OAAA,IAAA9M,EAAA3L,YAAA,IAAA5Z,KAAAw0B,eACAgI,EAAAjX,GAEAA,IAAAiO,UAIA,KADAjO,EAAAvlB,KAAAq7B,MACA9V,KAAA3L,YAAA6Z,IAAA+I,GACAjX,EAAA0N,WAAA,YAAA1N,EAAA+G,MAAA/G,EAAAiP,aAAA,IACAgI,EAAAjX,GAEAA,IAAAsX,KAGAL,KACAx8B,KAAAyyB,MAAAgB,EAAA+I,EAAA5iB,WACA5Z,KAAAmzB,WAAAM,EAAAzzB,KAAA0wB,QAAA1wB,KAAAo0B,eAAAp0B,KAAA+wB,eAMA,GAAA/wB,KAAA0wB,SAAA4D,IAAAt0B,KAAAg/B,QAAA,CASA,GAAAC,GAAAj/B,KAAA2wB,OAAA,OAAA2D,GACA4K,EAAAD,KAAAj/B,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,SACAyO,EAAAn/B,KAAAmzB,WACAiM,EAAAp/B,KAAA0wB,OACA2O,EAAAr/B,KAAAw0B,aACA8K,EAAAt/B,KAAAyyB,KAoBA,IAlBAzyB,KAAAmzB,WAAAmB,EAAAyK,EACA/+B,KAAA0wB,OAAA4D,EACA2K,KAEAj/B,KAAAmzB,YAAA4L,EAEA/+B,KAAAyyB,MAAAS,EAEAlzB,KAAAw0B,aAAA,IAAAuK,EAAAxK,EAAA,KAAAA,EACAv0B,KAAA0wB,OAAA4D,EACAt0B,KAAAg/B,SAAA,EACA9L,EAAA,IAAA6L,EACA/+B,KAAAqS,OAAA6gB,EAAAQ,EAAA,IAAAqL,GACArL,GAAA1zB,KAAA0xB,KACA1xB,KAAAqwB,KAAAqF,UACA11B,KAAAm1B,UAAA,YAGAjC,IAAAlzB,KAAAyyB,MACA,MAOA,IALAyM,IACAhM,EAAA,EAAA6L,EAAA,WACA/+B,KAAAqS,OAAA6gB,GAAA,OAEAlzB,KAAAg/B,SAAA,EACAh/B,KAAA6Y,UAAA8jB,EACA,MAEA38B,MAAAyyB,MAAA6M,EACAt/B,KAAAmzB,WAAAgM,EACAn/B,KAAA0wB,OAAA0O,EACAp/B,KAAAw0B,aAAA6K,EAGA,KAAAr/B,KAAAyyB,QAAAS,GAAAlzB,KAAA63B,QAAAlE,GAAA4I,GAAAC,GAIA,YAHAnI,IAAAr0B,KAAAmzB,YAAAnzB,KAAAk1B,YAAAxB,GACA1zB,KAAAm1B,UAAA,aAgBA,IAbIn1B,KAAA6yB,WACJ7yB,KAAA6yB,UAAA,GAGA7yB,KAAA+0B,UAAA/0B,KAAA6Y,SAAA7Y,KAAAmzB,aAAAkB,GAAAZ,EAAA,IACAzzB,KAAA+0B,SAAA,GAGA,IAAAV,GAAAr0B,KAAAqwB,KAAAkF,UAAA,IAAAv1B,KAAAmzB,YAAAnzB,KAAAo0B,gBAAAV,GACA1zB,KAAAm1B,UAAA,YAGAyF,EAAA56B,KAAAyyB,MACAmI,GAAA1H,EAEA,IADA3N,EAAAvlB,KAAA63B,OACAtS,IACA+D,EAAA/D,EAAAiO,MACAoH,IAAA56B,KAAAyyB,SAAAzyB,KAAA6Y,SAAA8jB,MAEMpX,EAAAwP,SAAAxP,EAAA3L,YAAA5Z,KAAAyyB,QAAAlN,EAAA1M,UAAA0M,EAAAmM,OACN8K,IAAAjX,GACAvlB,KAAAga,QAEAuL,EAAAqP,UAGArP,EAAAlT,QAAAkT,EAAA0L,OAAA1L,EAAA4O,gBAAA5O,EAAA6O,iBAAAX,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAFApO,EAAAlT,QAAAohB,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,IAKApO,EAAA+D,MAIA,KADA/D,EAAAvlB,KAAAq7B,MACA9V,IACA+D,EAAA/D,EAAAsX,MACAjC,IAAA56B,KAAAyyB,SAAAzyB,KAAA6Y,SAAA8jB,KAFA,CAIM,GAAApX,EAAAwP,SAAAxP,EAAA3L,YAAAsZ,IAAA3N,EAAA1M,UAAA0M,EAAAmM,IAAA,CACN,GAAA8K,IAAAjX,EAAA,CAEA,IADAiX,EAAAjX,EAAAsX,MACAL,KAAAM,UAAA98B,KAAAyyB,OACA+J,EAAAnqB,OAAAmqB,EAAA5H,UAAA4H,EAAArI,iBAAAV,EAAA+I,EAAA5iB,YAAA4iB,EAAAvD,YAAAxF,EAAA+I,EAAA5iB,YAAA4iB,EAAAvD,WAAAvF,EAAAC,GACA6I,IAAAK,KAEAL,GAAA,KACAx8B,KAAAga,QAEAuL,EAAAqP,UAGArP,EAAAlT,QAAAkT,EAAA0L,OAAA1L,EAAA4O,gBAAA5O,EAAA6O,iBAAAX,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAFApO,EAAAlT,QAAAohB,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAKApO,EAAA+D,EAIAtpB,KAAAk1B,YAAAxB,IACAkG,EAAA1tB,QACA2tB,IAEA75B,KAAAm1B,UAAA,cAEAtB,IAAA7zB,KAAAg/B,SAAAh/B,KAAA0xB,KAAA+K,IAAAz8B,KAAA4Z,YAAA8iB,IAAA18B,KAAAi5B,aAAA,IAAAj5B,KAAAyyB,OAAAyB,GAAAl0B,KAAAm0B,mBACAP,IACAgG,EAAA1tB,QACA2tB,IAEA75B,KAAAwyB,UAAAqC,oBACA70B,KAAA0yB,UAAA,MAEA1yB,KAAA+0B,SAAA,IAEArB,GAAA1zB,KAAAqwB,KAAAwD,IACA7zB,KAAAm1B,UAAAtB,MAKAjzB,EAAA2+B,UAAA,SAAAvC,EAAA5X,EAAAgT,GACA,MAAA4E,IACAA,GAAA,GAEA,MAAA5X,IACAA,GAAA,GAEA,MAAAgT,IACAA,GAAA,EAEA,IAIAr4B,GAAAwlB,EAJAzlB,KACA0/B,EAAAx/B,KAAA+8B,YAAAC,EAAA5X,EAAAgT,GACAR,EAAA,EACAzH,EAAAqP,EAAAtzB,MAEA,KAAAnM,EAAA,EAAcA,EAAAowB,EAAOpwB,IACrBwlB,EAAAia,EAAAz/B,GACAwlB,EAAAka,aACA3/B,EAAA83B,KAAArS,EAGA,OAAAzlB,IAIAc,EAAA8+B,cAAA,SAAAjM,GACAA,GAAA,IAAAA,IACAA,EAAAzzB,KAAAyyB,MAEA,IAEA1yB,GAFA09B,EAAAz9B,KAAA2/B,iBACAxP,EAAAsN,EAAAvxB,MAEA,KAAAnM,EAAA,EAAcA,EAAAowB,EAAOpwB,IACrB,GAAA09B,EAAA19B,GAAA0zB,OACA,MAAAgK,GAAA19B,GAAAke,IAGA,cAGArd,EAAAg/B,eAAA,SAAAnM,GACA,MAAAA,IACAA,EAAAzzB,KAAAyyB,MAIA,KAFA,GAAAgL,GAAAz9B,KAAA2/B,iBACA5/B,EAAA09B,EAAAvxB,SACAnM,MACA,GAAA09B,EAAA19B,GAAA0zB,OACA,MAAAgK,GAAA19B,GAAAke,IAGA,cAGArd,EAAA++B,eAAA,WACA,GAEA/+B,GAFAd,KACA83B,EAAA,CAEA,KAAAh3B,IAAAZ,MAAAo5B,QACAt5B,EAAA83B,MAAgBnE,KAAAzzB,KAAAo5B,QAAAx4B,GAAAqd,KAAArd,EAKhB,OAHAd,GAAA+/B,KAAA,SAAA//B,EAAAsB,GACA,MAAAtB,GAAA2zB,KAAAryB,EAAAqyB,OAEA3zB,GAMAc,EAAAs4B,SAAA,SAAAnsB,EAAA2mB,GACA,MAAAtwB,WAAA8I,OAAAlM,KAAAu4B,UAAAv4B,KAAAuZ,YAAAvZ,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,QAAA,EAAA3jB,KAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,cAAA2C,GAAA1zB,KAAAyyB,MAAAzyB,KAAAuZ,YAGA3Y,EAAAu4B,cAAA,SAAApsB,EAAA2mB,GACA,MAAAtwB,WAAA8I,OAAAlM,KAAAu4B,UAAAv4B,KAAAm0B,gBAAApnB,EAAA2mB,GAAA1zB,KAAAmzB,WAAAnzB,KAAAm0B,iBAGAvzB,EAAAuzB,cAAA,SAAApnB,GACA,MAAA3J,WAAA8I,OAQAlM,KAAA6wB,cAAA9jB,EAAA/M,KAAA+9B,UAAA/9B,KAAAm0B,gBAAApnB,GAAA/M,MAPAA,KAAAixB,SACA7D,EAAAtsB,UAAAqzB,cAAA1zB,KAAAT,MAEAA,KAAAo0B,eAAAp0B,KAAA6wB,aAAA,aAAA7wB,KAAAizB,WAAAjzB,KAAA6wB,QAAA,GAAA7wB,KAAA+wB,aAAA/wB,KAAA6wB,SAEA7wB,KAAAo0B,iBAKAxzB,EAAA6yB,KAAA,SAAA1mB,EAAA2mB,GACA,MAAAtwB,WAAA8I,QAGAlM,KAAAixB,QACAjxB,KAAAm0B,gBAEApnB,EAAA/M,KAAAizB,YACAlmB,EAAA/M,KAAAizB,WAEAjzB,KAAA2wB,OAAA,OAAA3wB,KAAA0wB,QACA3jB,EAAA/M,KAAAizB,UAAAlmB,EAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,cACI,IAAA/wB,KAAA6wB,UACJ9jB,GAAA/M,KAAA0wB,QAAA1wB,KAAAizB,UAAAjzB,KAAA+wB,eAEA/wB,KAAAu4B,UAAAxrB,EAAA2mB,IAbA1zB,KAAAyyB,OAgBA7xB,EAAAkwB,OAAA,SAAA/jB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA6wB,QAAA9jB,EACA/M,KAAAiyB,UAAA,IAHAjyB,KAAA6wB,SAMAjwB,EAAAowB,YAAA,SAAAjkB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA+wB,aAAAhkB,EACA/M,KAAAiyB,UAAA,IAHAjyB,KAAA+wB,cAMAnwB,EAAAgwB,KAAA,SAAA7jB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAA2wB,MAAA5jB,EACA/M,MAHAA,KAAA2wB,OAMA/vB,EAAAk/B,aAAA,SAAA/yB,GACA,MAAA3J,WAAA8I,OAGAlM,KAAAm8B,KAAApvB,GAAA,GAFA/M,KAAA4/B,eAAA5/B,KAAAyyB,MAAA,OAKA4L,IAEE,GAkBF,WAEA,GAAA0B,GAAA,IAAAhhB,KAAAsH,GACA2Z,KACAC,KACAC,KACAC,KACApG,EAAAlK,EAAAE,UAAAiK,QACAoG,EAAA,SAAAtgC,EAAAsB,EAAAT,EAAAa,GACAb,IAAAa,IACAb,EAAAa,KAAAJ,GAAA,KAEAtB,IAAAsB,IACAA,EAAAtB,GAAAa,EAAAb,GAAA,KAEAE,KAAAF,IACAE,KAAAoB,IACApB,KAAAW,IACAX,KAAAwB,IACAxB,KAAAqgC,GAAA7+B,EAAA1B,EACAE,KAAAsgC,GAAA3/B,EAAAb,EACAE,KAAAugC,GAAAn/B,EAAAtB,GAEA0gC,EAAA,wKACAC,EAAA,SAAA3gC,EAAAsB,EAAAT,EAAAa,GACA,GAAAk/B,IAAc5gC,KACd6gC,KACAC,KACAC,GAAWlgC,EAAAa,GACXs/B,GAAAhhC,EAAAsB,GAAA,EACA2/B,GAAA3/B,EAAAT,GAAA,EACAqgC,GAAArgC,EAAAa,GAAA,EACAy/B,GAAAH,EAAAC,GAAA,EACAG,GAAAH,EAAAC,GAAA,EACAG,GAAAD,EAAAD,GAAA,CAQA,OAPAP,GAAAt/B,EAAA0/B,GAAAhhC,EAAAghC,GAAA,EACAH,EAAAv/B,EAAA6/B,EAAAE,EACAT,EAAA//B,EAAAggC,EAAA7gC,GAAA4gC,EAAAt/B,EAAAu/B,EAAAv/B,GAAA,EACAu/B,EAAAhgC,EAAAigC,EAAA9gC,GAAAmhC,EAAAC,GAAA,EACAN,EAAAx/B,EAAA8/B,EAAAC,EACAN,EAAAz/B,EAAA4/B,GAAAx/B,EAAAw/B,GAAA,EACAJ,EAAAjgC,EAAAkgC,EAAA/gC,GAAA8gC,EAAAx/B,EAAAy/B,EAAAz/B,GAAA,GACAs/B,EAAAC,EAAAC,EAAAC,IAEAO,EAAA,SAAAthC,EAAAuhC,EAAAC,EAAAC,EAAAC,GACA,GAGAzhC,GAAA0hC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxJ,EAHAxI,EAAArwB,EAAAoM,OAAA,EACAk2B,EAAA,EACAC,EAAAviC,EAAA,GAAAA,CAEA,KAAAC,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtB6hC,EAAA9hC,EAAAsiC,GACAX,EAAAG,EAAA9hC,EACA4hC,EAAAE,EAAApgC,EACAmgC,EAAA7hC,EAAAsiC,EAAA,GAAA5gC,EAEAggC,GACAU,EAAAlC,EAAAjgC,GACAoiC,EAAAlC,EAAAlgC,GACA44B,GAAAwJ,EAAAD,GAAAb,EAAA,KAAAE,EAAA,GAAArB,EAAAngC,IAAA,IACA8hC,EAAAH,KAAAD,IAAAF,EAAA,GAAAF,EAAA,IAAAa,EAAAvJ,EAAAuJ,EAAA,GACAJ,EAAAJ,GAAAC,EAAAD,IAAAH,EAAA,GAAAF,EAAA,IAAAc,EAAAxJ,EAAAwJ,EAAA,GACAJ,EAAAL,GAAAG,IAAAC,EAAAD,IAAA,EAAAK,KAAAC,GAAA,aAEAN,EAAAH,KAAAD,GAAAJ,EAAA,GACAS,EAAAJ,GAAAC,EAAAD,GAAAL,EAAA,GACAU,EAAAL,GAAAG,EAAAC,GAAA,GAEAD,GAAAE,EACAD,GAAAC,EAEAH,EAAAjhC,EAAAqhC,EAAAH,EACA,IAAA9hC,EACA6hC,EAAAxgC,EAAAihC,EAEAT,EAAAxgC,EAAAihC,EAAAT,EAAA9hC,EAAA,IAAA8hC,EAAAjhC,EAAAihC,EAAA9hC,GAGA8hC,EAAAvB,GAAAqB,EAAAD,EACAG,EAAAtB,GAAA0B,EAAAP,EACAG,EAAArB,GAAA8B,EAAAZ,EAEAH,GACAW,EAAAxB,EAAAgB,EAAAY,EAAAL,EAAAN,GACA5hC,EAAAoT,OAAAkvB,EAAA,EAAAH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IACAG,GAAA,GAEAA,IAGAC,EAAAP,CAEAF,GAAA9hC,EAAAsiC,GACAR,EAAAxgC,EAAAihC,EACAT,EAAAjhC,EAAA0hC,EAAA,IAAAT,EAAApgC,EAAA6gC,GACAT,EAAAvB,GAAAuB,EAAApgC,EAAAogC,EAAA9hC,EACA8hC,EAAAtB,GAAAsB,EAAAjhC,EAAAihC,EAAA9hC,EACA8hC,EAAArB,GAAA8B,EAAAT,EAAA9hC,EACAwhC,IACAW,EAAAxB,EAAAmB,EAAA9hC,EAAAuiC,EAAAT,EAAAjhC,EAAAihC,EAAApgC,GACA1B,EAAAoT,OAAAkvB,EAAA,EAAAH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,MAGAK,EAAA,SAAAxc,EAAAllB,EAAA4gC,EAAAe,GACA,GACApS,GAAApwB,EAAA0hC,EAAAC,EAAAC,EAAAa,EADA1iC,IAEA,IAAAyiC,EAGA,IAFAzc,GAAAyc,GAAAjhC,OAAAwkB,GACA/lB,EAAA+lB,EAAA5Z,SACAnM,MACA,iBAAAyiC,EAAA1c,EAAA/lB,GAAAa,KAAA,MAAA4hC,EAAAxG,OAAA,KACAlW,EAAA/lB,GAAAa,GAAA2hC,EAAA3hC,GAAAq7B,OAAAuG,EAAAxG,OAAA,GAAAwG,EAAAtG,OAAA,IAKA,IADA/L,EAAArK,EAAA5Z,OAAA,EACAikB,EAAA,EAEA,MADArwB,GAAA,MAAAsgC,GAAAta,EAAA,GAAAllB,GAAA,IAAAklB,EAAAqK,KAAA,KAAAvvB,IACAd,CAEA,KAAAC,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtB0hC,EAAA3b,EAAA/lB,GAAAa,GACA8gC,EAAA5b,EAAA/lB,EAAA,GAAAa,GACAd,EAAAC,GAAA,GAAAqgC,GAAAqB,EAAA,IAAAC,GACAF,IACAG,EAAA7b,EAAA/lB,EAAA,GAAAa,GACAo/B,EAAAjgC,IAAAigC,EAAAjgC,IAAA,IAAA2hC,EAAAD,IAAAC,EAAAD,GACAxB,EAAAlgC,IAAAkgC,EAAAlgC,IAAA,IAAA4hC,EAAAD,IAAAC,EAAAD,GAIA,OADA5hC,GAAAC,GAAA,GAAAqgC,GAAAta,EAAA/lB,GAAAa,GAAA,IAAAklB,EAAA/lB,EAAA,GAAAa,IACAd,GAEA2iC,EAAA,SAAA3c,EAAAub,EAAAqB,EAAAnB,EAAAC,EAAAe,GACA,GAGAxiC,GAAAa,EAAAd,EAAA6iC,EAAA5mB,EAAAoU,EAAAyS,EAAAxH,EAHAyH,KACAC,KACAC,EAAAR,GAAAzc,EAAA,EAEA0b,GAAA,uBAAAA,EAAA,IAAAhB,EACA,MAAAa,IACAA,EAAA,EAEA,KAAAzgC,IAAAklB,GAAA,GACAgd,EAAA9vB,KAAApS,EAGA,IAAAklB,EAAA5Z,OAAA,GAIA,IAHAkvB,EAAAtV,IAAA5Z,OAAA,GACA02B,GAAA,EACA7iC,EAAA+iC,EAAA52B,SACAnM,MAEA,GADAa,EAAAkiC,EAAA/iC,GACAgf,KAAA4f,IAAAoE,EAAAniC,GAAAw6B,EAAAx6B,IAAA,KACAgiC,GAAA,CACA,OAGAA,IACA9c,IAAAxkB,SACAihC,GACAzc,EAAAkd,QAAAT,GAEAzc,EAAA9S,KAAA8S,EAAA,IACAyc,EAAAzc,IAAA5Z,OAAA,IAKA,IAFA8zB,EAAA9zB,OAAA+zB,EAAA/zB,OAAAg0B,EAAAh0B,OAAA,EACAnM,EAAA+iC,EAAA52B,SACAnM,MACAa,EAAAkiC,EAAA/iC,GACAogC,EAAAv/B,GAAA4gC,EAAArW,QAAA,IAAAvqB,EAAA,UACAiiC,EAAAjiC,GAAA0hC,EAAAxc,EAAAllB,EAAAu/B,EAAAv/B,GAAA2hC,EAGA,KADAxiC,EAAAigC,EAAA9zB,SACAnM,MACAigC,EAAAjgC,GAAAgf,KAAAkkB,KAAAjD,EAAAjgC,IACAkgC,EAAAlgC,GAAAgf,KAAAkkB,KAAAhD,EAAAlgC,GAEA,KAAAwhC,EAAA,CAEA,IADAxhC,EAAA+iC,EAAA52B,SACAnM,MACA,GAAAogC,EAAAv/B,GAGA,IAFAd,EAAA+iC,EAAAC,EAAA/iC,IACAowB,EAAArwB,EAAAoM,OAAA,EACAy2B,EAAA,EAAkBA,EAAAxS,EAAOwS,IACzB5mB,EAAAjc,EAAA6iC,EAAA,GAAAtC,GAAAJ,EAAA0C,GAAA7iC,EAAA6iC,GAAAtC,GAAAL,EAAA2C,IAAA,EACAzC,EAAAyC,IAAAzC,EAAAyC,IAAA,GAAA5mB,GAKA,KADAhc,EAAAmgC,EAAAh0B,SACAnM,MACAmgC,EAAAngC,GAAAgf,KAAAkkB,KAAA/C,EAAAngC,IAKA,IAFAA,EAAA+iC,EAAA52B,OACAy2B,EAAAD,EAAA,MACA3iC,MACAa,EAAAkiC,EAAA/iC,GACAD,EAAA+iC,EAAAjiC,GACAwgC,EAAAthC,EAAAuhC,EAAAqB,EAAAnB,EAAApB,EAAAv/B,IACAgiC,IACA9iC,EAAAoT,OAAA,EAAAyvB,GACA7iC,EAAAoT,OAAApT,EAAAoM,OAAAy2B,KAGA,OAAAE,IAEAK,EAAA,SAAApd,EAAAiO,EAAAwO,GACAxO,KAAA,MACA,IAIAj0B,GAAAsB,EAAAT,EAAAa,EAAA2hC,EAAApjC,EAAA4iC,EAAAxS,EAAAvvB,EAAAg3B,EAAA4K,EAJAK,KACAO,EAAA,UAAArP,EAAA,IACAsP,EAAA,SAAAtP,EACA+O,IAKA,IAHAO,GAAAd,IACAzc,GAAAyc,GAAAjhC,OAAAwkB,IAEA,MAAAA,KAAA5Z,OAAAk3B,EAAA,EAAoD,0BACpD,KAAAxiC,IAAAklB,GAAA,GACAgd,EAAA9vB,KAAApS,EAGA,KADAb,EAAA+iC,EAAA52B,SACAnM,MAAA,CAKA,IAJAa,EAAAkiC,EAAA/iC,GACA8iC,EAAAjiC,GAAAuiC,KACAvL,EAAA,EACAzH,EAAArK,EAAA5Z,OACAy2B,EAAA,EAAgBA,EAAAxS,EAAOwS,IACvB7iC,EAAA,MAAAyiC,EAAAzc,EAAA6c,GAAA/hC,GAAA,iBAAA4hC,EAAA1c,EAAA6c,GAAA/hC,KAAA,MAAA4hC,EAAAxG,OAAA,GAAAuG,EAAA3hC,GAAAq7B,OAAAuG,EAAAxG,OAAA,GAAAwG,EAAAtG,OAAA,IAAAD,OAAAuG,GACAa,GAAAV,EAAA,GAAAA,EAAAxS,EAAA,IACAgT,EAAAvL,MAAA93B,EAAAqjC,EAAAvL,EAAA,OAEAuL,EAAAvL,KAAA93B,CAIA,KAFAqwB,EAAAyH,EAAAwL,EAAA,EACAxL,EAAA,EACA+K,EAAA,EAAgBA,EAAAxS,EAAOwS,GAAAS,EACvBtjC,EAAAqjC,EAAAR,GACAvhC,EAAA+hC,EAAAR,EAAA,GACAhiC,EAAAwiC,EAAAR,EAAA,GACAnhC,EAAA,IAAA4hC,EAAA,EAAAD,EAAAR,EAAA,GACAQ,EAAAvL,KAAA4K,EAAA,IAAAY,EAAA,GAAAhD,GAAAtgC,EAAAsB,EAAAT,EAAAa,GAAA,GAAA4+B,GAAAtgC,GAAA,EAAAsB,EAAAtB,GAAA,KAAAsB,EAAAT,GAAA,EAAAA,EAEAwiC,GAAAj3B,OAAA0rB,EAEA,MAAAiL,IAEAS,EAAA,SAAAxjC,EAAAyjC,EAAAC,GAIA,IAHA,GAEAhiC,GAAAiiC,EAAAprB,EAAAgoB,EAAAC,EAAAC,EAAA3/B,EAAAb,EAAAuzB,EAAAoQ,EAAAC,EAFAP,EAAA,EAAAI,EACAb,EAAA7iC,EAAAoM,SAEAy2B,MAOA,IANAe,EAAA5jC,EAAA6iC,GACAtqB,EAAAqrB,EAAA5jC,EACAugC,EAAAqD,EAAAliC,EAAA6W,EACAioB,EAAAoD,EAAA/iC,EAAA0X,EACAkoB,EAAAmD,EAAAtiC,EAAAiX,EACA7W,EAAAiiC,EAAA,EACA1jC,EAAA,EAAgBA,GAAAyjC,EAAiBzjC,IACjCa,EAAAwiC,EAAArjC,EACAuzB,EAAA,EAAA1yB,EACAY,EAAAiiC,MAAA7iC,IAAAy/B,EAAA,EAAA/M,GAAA1yB,EAAA0/B,EAAAhN,EAAAiN,IAAA3/B,GACA+iC,EAAAhB,EAAAa,EAAAzjC,EAAA,EACAwjC,EAAAI,IAAAJ,EAAAI,IAAA,GAAAniC,KAIAoiC,EAAA,SAAAf,EAAAW,GACAA,KAAA,IACA,IAOA5iC,GAAAb,EAAAowB,EAAAwT,EAPA7jC,KACA+jC,KACAriC,EAAA,EACAsiC,EAAA,EACAC,EAAAP,EAAA,EACAQ,KACAC,IAEA,KAAArjC,IAAAiiC,GACAS,EAAAT,EAAAjiC,GAAAd,EAAA0jC,EAGA,KADArT,EAAArwB,EAAAoM,OACAnM,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtByB,GAAAud,KAAAkkB,KAAAnjC,EAAAC,IACA4jC,EAAA5jC,EAAAyjC,EACAS,EAAAN,GAAAniC,EACAmiC,IAAAI,IACAD,GAAAtiC,EACAmiC,EAAA5jC,EAAAyjC,GAAA,EACAQ,EAAAL,GAAAM,EACAJ,EAAAF,GAAAG,EACAtiC,EAAA,EACAyiC,KAGA,QAAY/3B,OAAA43B,EAAAD,UAAAG,aAKZE,EAAArU,EAAAE,UAAAoU,QACAC,SAAA,SACAC,YACA5S,QAAA,QACA6S,IAAA;AACA1U,QAAA,EAGA2U,KAAA,SAAAx5B,EAAAslB,EAAA9K,GACAvlB,KAAAwkC,QAAAz5B,EACAslB,YAAAzE,SACAyE,GAAevK,OAAAuK,IAEfrwB,KAAAykC,SACAzkC,KAAA0kC,QACA1kC,KAAA2kC,UACA3kC,KAAA4kC,SAAA,MAAAvU,EAAAwU,eAAA,EAAA3uB,SAAAma,EAAAwU,eAAA,GACA,IAIAjkC,GAAAkkC,EAAA/kC,EAAA4iC,EAAAJ,EAJAzc,EAAAuK,EAAAvK,WACAid,KACAgC,EAAAjf,EAAA,GACAkf,EAAA3U,EAAA2U,YAAAzf,EAAA8K,KAAA4U,cAGAjlC,MAAAklC,YAAAF,cAAApZ,OAAAoZ,IAAA,mBAAAA,KAAA,IAAA/I,OAAA+I,IAAA,QACA,KAAApkC,IAAAmkC,GACA/kC,KAAA2kC,OAAA3xB,KAAApS,EAIA,KADAb,EAAAC,KAAA2kC,OAAAz4B,SACAnM,MACAa,EAAAZ,KAAA2kC,OAAA5kC,GAEAC,KAAAmlC,gBAAAnyB,KAAApS,GACAkkC,EAAA9kC,KAAAykC,MAAA7jC,GAAA,kBAAAmK,GAAAnK,GACAmiC,EAAAniC,GAAAkkC,EAAA/5B,EAAAnK,EAAAuqB,QAAA,0BAAApgB,GAAA,MAAAnK,EAAAs7B,OAAA,IAAAt7B,EAAA,MAAAA,EAAAs7B,OAAA,MAAAtd,WAAA7T,EAAAnK,IACA2hC,GAAAQ,EAAAniC,KAAAklB,EAAA,GAAAllB,KACA2hC,EAAAQ,EAMA,IAHA/iC,KAAAolC,SAAA,UAAA/U,EAAA0D,MAAA,cAAA1D,EAAA0D,MAAA,SAAA1D,EAAA0D,KAAA0O,EAAA3c,EAAAiH,MAAAsD,EAAAgR,WAAA,EAAAhR,EAAAgR,WAAA,gBAAAhR,EAAA0D,KAAA1D,EAAAmR,UAAAe,GAAAW,EAAApd,EAAAuK,EAAA0D,KAAAgP,GACA/iC,KAAAqlC,UAAArlC,KAAAolC,SAAAxkC,GAAAsL,OAEAlM,KAAA4kC,SAAA,CACA,GAAAU,GAAA1B,EAAA5jC,KAAAolC,SAAAplC,KAAA4kC,SACA5kC,MAAAulC,QAAAD,EAAAp5B,OACAlM,KAAAwlC,SAAAF,EAAAzB,QACA7jC,KAAAylC,UAAAH,EAAAtB,SACAhkC,KAAA0lC,IAAA1lC,KAAA2lC,IAAA3lC,KAAA4lC,IAAA5lC,KAAA6lC,IAAA,EACA7lC,KAAA8lC,IAAA9lC,KAAAwlC,SAAA,GACAxlC,KAAA+lC,QAAA/lC,KAAAylC,UAAA,GACAzlC,KAAAgmC,IAAAhmC,KAAA+lC,QAAA,GACA/lC,KAAAimC,MAAA,EAAAjmC,KAAA+lC,QAAA75B,OAGA,GAAA84B,EAAAhlC,KAAAklC,YAMA,IALAllC,KAAAkmC,qBACAlB,EAAA,YAAApZ,SACA5rB,KAAAklC,YAAAF,OAEAjlC,EAAAilC,EAAA94B,SACAnM,MAAA,CACA,IAAA4iC,EAAA,EAAmBA,EAAA,EAAOA,IAC1B/hC,EAAAokC,EAAAjlC,GAAA4iC,GACA3iC,KAAAykC,MAAA7jC,GAAA,kBAAAmK,GAAAnK,IAAAmK,EAAAnK,EAAAuqB,QAAA,0BAAApgB,GAAA,MAAAnK,EAAAs7B,OAAA,IAAAt7B,EAAA,MAAAA,EAAAs7B,OAAA,GAEAt7B,GAAAokC,EAAAjlC,GAAA,GACAC,KAAAkmC,kBAAAnmC,IAAAC,KAAAykC,MAAA7jC,GAAAZ,KAAAykC,MAAA7jC,GAAAH,KAAAT,KAAAwkC,SAAAxkC,KAAAwkC,QAAA5jC,KAAA,EACAZ,KAAAmlC,gBAAAnyB,KAAApS,GAIA,MADAZ,MAAAmmC,YAAA5gB,EAAA8K,KAAAuF,aAAA,KACA,GAIAhZ,IAAA,SAAA4c,GACA,GAIA4M,GAAA9S,EAAAvzB,EAAAa,EAAAQ,EAAAq0B,EAAAnoB,EAAA6iB,EAAA0T,EAAAwC,EAJArC,EAAAhkC,KAAAqlC,UACAiB,EAAAtmC,KAAAykC,MACA15B,EAAA/K,KAAAwkC,QACA+B,EAAA/M,IAAAx5B,KAAAmmC,WAEA,IAAAnmC,KAAA4kC,SAGO,CAMP,GALAf,EAAA7jC,KAAAwlC,SACAa,EAAArmC,KAAA+lC,QACAvM,GAAAx5B,KAAAulC,QACAxlC,EAAAC,KAAA2lC,IAEAnM,EAAAx5B,KAAA8lC,KAAA/lC,EAAAikC,EAAA,GAEA,IADA7T,EAAA6T,EAAA,EACAjkC,EAAAowB,IAAAnwB,KAAA8lC,IAAAjC,IAAA9jC,KAAAy5B,IACAx5B,KAAA0lC,IAAA7B,EAAA9jC,EAAA,GACAC,KAAA2lC,IAAA5lC,EACAC,KAAA+lC,QAAAM,EAAArmC,KAAAylC,UAAA1lC,GACAC,KAAAgmC,IAAAK,EAAArmC,KAAA4lC,IAAA5lC,KAAA6lC,IAAA,OACQ,IAAArM,EAAAx5B,KAAA0lC,KAAA3lC,EAAA,GACR,KAAAA,EAAA,IAAAC,KAAA0lC,IAAA7B,IAAA9jC,KAAAy5B,IACA,IAAAz5B,GAAAy5B,EAAAx5B,KAAA0lC,IACA1lC,KAAA0lC,IAAA,EAEA3lC,IAEAC,KAAA8lC,IAAAjC,EAAA9jC,GACAC,KAAA2lC,IAAA5lC,EACAC,KAAA+lC,QAAAM,EAAArmC,KAAAylC,UAAA1lC,GACAC,KAAA4lC,IAAAS,GAAArmC,KAAA6lC,IAAAQ,EAAAn6B,OAAA,SACAlM,KAAAgmC,IAAAK,EAAArmC,KAAA6lC,KAMA,GAJAO,EAAArmC,EAEAy5B,GAAAx5B,KAAA0lC,IACA3lC,EAAAC,KAAA6lC,IACArM,EAAAx5B,KAAAgmC,KAAAjmC,EAAAsmC,EAAAn6B,OAAA,GAEA,IADAikB,EAAAkW,EAAAn6B,OAAA,EACAnM,EAAAowB,IAAAnwB,KAAAgmC,IAAAK,IAAAtmC,KAAAy5B,IACAx5B,KAAA4lC,IAAAS,EAAAtmC,EAAA,GACAC,KAAA6lC,IAAA9lC,MACQ,IAAAy5B,EAAAx5B,KAAA4lC,KAAA7lC,EAAA,GACR,KAAAA,EAAA,IAAAC,KAAA4lC,IAAAS,IAAAtmC,KAAAy5B,IACA,IAAAz5B,GAAAy5B,EAAAx5B,KAAA4lC,IACA5lC,KAAA4lC,IAAA,EAEA7lC,IAEAC,KAAAgmC,IAAAK,EAAAtmC,GACAC,KAAA6lC,IAAA9lC,EAEA01B,GAAA11B,GAAAy5B,EAAAx5B,KAAA4lC,MAAA5lC,KAAAgmC,IAAAhmC,KAAA4lC,MAAA5lC,KAAAimC,OAAA,MA/CAG,GAAA5M,EAAA,IAAAA,GAAA,EAAAwK,EAAA,EAAAA,EAAAxK,GAAA,EACA/D,GAAA+D,EAAA4M,GAAA,EAAApC,KAmDA,KAHA1Q,EAAA,EAAAmC,EAEA11B,EAAAC,KAAA2kC,OAAAz4B,SACAnM,MACAa,EAAAZ,KAAA2kC,OAAA5kC,GACAqB,EAAApB,KAAAolC,SAAAxkC,GAAAwlC,GACA94B,GAAAmoB,IAAAr0B,EAAAi/B,GAAA,EAAA/M,GAAAmC,EAAAr0B,EAAAk/B,GAAAhN,EAAAlyB,EAAAm/B,KAAA9K,EAAAr0B,EAAAtB,EACAE,KAAA0kC,KAAA9jC,KACA0M,EAAAtN,KAAA0kC,KAAA9jC,GAAA0M,EAAAvC,IAEAu7B,EAAA1lC,GACAmK,EAAAnK,GAAA0M,GAEAvC,EAAAnK,GAAA0M,CAIA,IAAAtN,KAAAklC,YAAA,CACA,GACAsB,GAAAC,EAAAC,EAAAC,EAAAC,EAAAr9B,EAAAs9B,EADAC,EAAA9mC,KAAAklC,WAGA,KADAnlC,EAAA+mC,EAAA56B,SACAnM,MACAa,EAAAkmC,EAAA/mC,GAAA,GACAwJ,EAAAu9B,EAAA/mC,GAAA,MACA8mC,EAAAC,EAAA/mC,GAAA,UAAAggC,EACA3+B,EAAApB,KAAAolC,SAAA0B,EAAA/mC,GAAA,IACAymC,EAAAxmC,KAAAolC,SAAA0B,EAAA/mC,GAAA,IAEAqB,GAAAolC,IACAplC,IAAAglC,GACAI,IAAAJ,GAEAK,EAAArlC,EAAAtB,GAAAsB,MAAAtB,GAAA21B,EACAkR,EAAAvlC,OAAAT,EAAAS,KAAAq0B,EACAgR,IAAAE,EAAAF,GAAAhR,EACAkR,IAAAvlC,EAAAT,GAAAS,EAAAI,EAAAJ,EAAAT,GAAA80B,EAAAkR,GAAAlR,EAEAiR,EAAAF,EAAA1mC,GAAA0mC,EAAAplC,EAAAolC,EAAA1mC,GAAA21B,EACAmR,EAAAJ,EAAAplC,GAAAolC,EAAA7lC,EAAA6lC,EAAAplC,GAAAq0B,EACAiR,IAAAE,EAAAF,GAAAjR,EACAmR,IAAAJ,EAAA7lC,GAAA6lC,EAAAhlC,EAAAglC,EAAA7lC,GAAA80B,EAAAmR,GAAAnR,EAEAnoB,EAAAi5B,EAAAxnB,KAAAgoB,MAAAH,EAAAF,EAAAC,EAAAF,GAAAI,EAAAt9B,EAAAvJ,KAAAkmC,kBAAAnmC,GAEAC,KAAA0kC,KAAA9jC,KACA0M,EAAAtN,KAAA0kC,KAAA9jC,GAAA0M,EAAAvC,IAGAu7B,EAAA1lC,GACAmK,EAAAnK,GAAA0M,GAEAvC,EAAAnK,GAAA0M,OAOA1M,EAAAsjC,EAAApjC,SAGAojC,GAAAzB,gBACAyB,EAAAzD,mBACAyD,EAAA8C,UAAA,EACA9C,EAAA+C,iBAAA,SAAAnnC,EAAAsB,EAAAT,GACA,UAAAy/B,GAAAtgC,GAAA,EAAAsB,EAAAtB,GAAA,KAAAsB,EAAAT,GAAA,EAAAA,IAGAujC,EAAAgD,aAAA,WACA,GAAAC,GAAApN,EAAAoN,SACA,IAAAA,EAAA,CAGA,GAAA/V,GAAA+V,EAAA/V,WACAgW,EAAAhW,EAAAgW,cACAC,EAAAjW,EAAAiW,gBACAC,EAAAlW,EAAAkW,YACAlW,GAAAmW,4BAAA,UAAqDC,OAAA,SAAA/R,EAAA51B,EAAA4nC,EAAAC,EAAAnU,EAAA4Q,GACrDtkC,YAAA+rB,SACA/rB,GAAUimB,OAAAjmB,IAEVskC,EAAA,GAAAD,EACA,IAIAnkC,GAAAa,EAAA0rB,EAJAxG,EAAAjmB,EAAAimB,OACAqK,EAAArK,EAAA5Z,OAAA,EACAy7B,KACAnO,IAEA,IAAArJ,EAAA,EACA,MAAAoD,EAEA,KAAAxzB,EAAA,EAAeA,GAAAowB,EAAQpwB,IACvBusB,EAAA8a,EAAA3R,EAAA3P,EAAA/lB,GAAA2nC,EAAAnU,EAAA4Q,EAAAhU,IAAApwB,GACA4nC,EAAA5nC,GAAAusB,EAAA2R,GAEA,KAAAr9B,IAAAf,GACA25B,EAAA54B,GAAAf,EAAAe,EAuBA,OArBA44B,GAAA1T,OAAA6hB,EACApU,EAAA,GAAA+T,GAAA7R,EAAA,aAAAnJ,EAAAiH,GAAA,GACAA,EAAAjH,OACAiH,EAAA4Q,SACA5Q,EAAAqU,SAAAP,EACA,IAAA7N,EAAAwL,aACAxL,EAAAwL,YAAA,IAEAxL,EAAAwL,YAAAxL,EAAAwL,qBAAApZ,SACA7rB,EAAAy5B,EAAAwL,cAAA,IAAA/I,OAAAzC,EAAAwL,YACAxL,EAAAwL,WAAA,MAAA1Y,EAAA2R,IAAAlnB,OAAA,wBAAAhX,GAAA,UAAAusB,EAAA2R,IAAA/e,KAAA,mBAAAnf,GAAA,KAEAy5B,EAAAwL,aACA0C,EAAAG,YACAH,EAAAI,mBAAA,GAEAxb,EAAA0Y,WAAA0C,EAAAlD,QAAAuD,aACAzb,EAAA0b,MAAAtpB,SAAA4N,EAAA0Y,WAAAtmB,UAAA,EACAgpB,EAAAvC,gBAAAnyB,KAAA,aAEAmxB,EAAA8D,aAAA3b,EAAA0b,MAAAxO,EAAAkO,EAAAQ,QACA3U,OAIA3yB,EAAA8jC,KAAA,SAAAyD,GAIA,IAHA,GAEA76B,GAFA86B,EAAApoC,KAAAmlC,gBACAplC,EAAAqoC,EAAAl8B,SAEAnM,MACAuN,EAAA66B,EAAAC,EAAAroC,IACAuN,GAAA,uBACAtN,KAAA0kC,KAAA0D,EAAAroC,IAAAuN,IAKA1M,EAAA88B,MAAA,SAAAyK,GACA,GACAvnC,GAAAb,EADAD,EAAAE,KAAA2kC,MAEA,KAAA/jC,IAAAZ,MAAAolC,SACA,GAAAxkC,IAAAunC,GAIA,UAHAnoC,MAAAolC,SAAAxkC,SACAZ,MAAAykC,MAAA7jC,GACAb,EAAAD,EAAAoM,SACAnM,MACAD,EAAAC,KAAAa,GACAd,EAAAoT,OAAAnT,EAAA,EAMA,IADAD,EAAAE,KAAAklC,YAGA,IADAnlC,EAAAD,EAAAoM,SACAnM,MACAooC,EAAAroC,EAAAC,GAAA,KACAD,EAAAoT,OAAAnT,EAAA,EAIA,OAAAC,MAAAmD,OAAAu6B,MAAAj9B,KAAAT,KAAAmoC,OAuBAtY,EAAAE,UAAA,iEAAAsY,EAAApa,GAGA,GAMAqa,GACAC,EACAC,EACArD,EATAgC,EAAA,WACAkB,EAAA5nC,KAAAT,KAAA,OACAA,KAAAmlC,gBAAAj5B,OAAA,EACAlM,KAAA4nC,SAAAT,EAAArmC,UAAA8mC,UAEA7N,EAAAlK,EAAAE,UAAAiK,QAKAyO,KACA7nC,EAAAumC,EAAArmC,UAAA,GAAAunC,GAAA,MAEAznC,GAAAc,YAAAylC,EACAA,EAAA1V,QAAA,SACA0V,EAAA7C,IAAA,EACA6C,EAAAuB,4BAAA,EACAvB,EAAAwB,gBAAA,cACAxB,EAAAyB,qBAAA,EACAhoC,EAAA,KACAumC,EAAA0B,WAAyB/xB,IAAAlW,EAAAkoC,MAAAloC,EAAAmoC,OAAAnoC,EAAAmW,KAAAnW,EAAA+F,MAAA/F,EAAAgG,OAAAhG,EAAAooC,SAAApoC,EAAAqoC,QAAAroC,EAAAsoC,OAAAtoC,EAAAuoC,YAAAvoC,EAAAwoC,WAAA,GAGzB,IA6BAC,GACAC,EAEAC,EACAC,EACAC,EACAC,EAwBAlF,EACAmF,EA5DAC,EAAA,4BACAC,EAAA,uDACAC,EAAA,mDACAC,EAAA,0CACAC,EAAA,wBACAC,EAAA,uBACAC,EAAA,mBACAC,EAAA,0BACAC,EAAA,aACAC,EAAA,WACAC,EAAA,aACAC,EAAA,yCACAC,EAAA,SAAAnyB,EAAAoyB,GAAgC,MAAAA,GAAAC,eAChCC,EAAA,wBACAC,EAAA,iCACAC,EAAA,sDACAC,EAAA,wBACAC,EAAA,WACAC,EAAAjsB,KAAAsH,GAAA,IACA0Z,EAAA,IAAAhhB,KAAAsH,GACA4kB,KACAC,EAAA/hC,SACAgiC,EAAA,SAAApX,GACA,MAAAmX,GAAAE,gBAAAF,EAAAE,gBAAA,+BAAArX,GAAAmX,EAAA7qB,cAAA0T,IAEAsX,EAAAF,EAAA,OACAG,EAAAH,EAAA,OACA/Z,EAAA+V,EAAA/V,YAAwCqX,iBACxC8C,EAAA53B,UAAAqE,UAQAwzB,EAAA,WACA,GAAAzrC,GAAAwrC,EAAApgB,QAAA,WACArrB,EAAAqrC,EAAA,IAOA,OANA5B,GAAAgC,EAAApgB,QAAA,gBAAAogB,EAAApgB,QAAA,iBAAAprB,QAAAk8B,OAAAsP,EAAArP,OAAAn8B,EAAA,SACA0pC,EAAAF,GAAAtN,OAAAsP,EAAArP,OAAAqP,EAAApgB,QAAA,oBACAqe,EAAA+B,EAAApgB,QAAA,iBACA,8BAAoCje,KAAAq+B,IAAA,uCAAyDr+B,KAAAq+B,MAC7F7B,EAAA9qB,WAAA6sB,OAAAC,OAEA5rC,IAGAA,EAAA+R,MAAA85B,QAAA,uBACA,QAAAj4B,KAAA5T,EAAA+R,MAAA+5B,aAEAC,EAAA,SAAArS,GACA,MAAAyQ,GAAAv2B,KAAA,mBAAA8lB,KAAAsS,aAAAtS,EAAAsS,aAAAC,OAAAvS,EAAA3nB,MAAAk6B,SAAA,IAAAntB,WAAA6sB,OAAAC,IAAA,OAEAM,EAAA,SAAA3zB,GACA5U,OAAAwoC,SAOAC,EAAA,GACAC,EAAA,GAGAC,EAAA,SAAAxrC,EAAAf,GACAA,KAAAwrC,CACA,IACAvrC,GAAAC,EADAsY,EAAAxY,EAAAgS,KAEA,IAAAmZ,SAAA3S,EAAAzX,GACA,MAAAA,EAKA,KAHAA,IAAAo7B,OAAA,GAAA0O,cAAA9pC,EAAAs7B,OAAA,GACAp8B,GAAA,8BACAC,EAAA,IACAA,MAAAirB,SAAA3S,EAAAvY,EAAAC,GAAAa,KACA,MAAAb,IAAA,GACAosC,EAAA,IAAApsC,EAAA,KAAAD,EAAAC,GACAmsC,EAAA,IAAAC,EAAAvhC,cAAA,IACAuhC,EAAAvrC,GAEA,MAGAyrC,EAAAnB,EAAAoB,YAAApB,EAAAoB,YAAAn2B,iBAAA,aAaAo2B,EAAApF,EAAAqF,SAAA,SAAA/W,EAAA70B,EAAA6rC,EAAAC,EAAAC,GACA,GAAAC,EACA,OAAApB,IAAA,YAAA5qC,IAGA8rC,GAAAjX,EAAA5jB,MAAAjR,GACAgsC,EAAAnX,EAAA5jB,MAAAjR,IACK6rC,KAAAJ,EAAA5W,IACLmX,EAAAH,EAAA7rC,IAAA6rC,EAAAp2B,iBAAAzV,IAAA6rC,EAAAp2B,iBAAAzV,EAAAwM,QAAAi9B,EAAA,OAAAz/B,eACK6qB,EAAAqW,eACLc,EAAAnX,EAAAqW,aAAAlrC,IAEA,MAAA+rC,GAAAC,GAAA,SAAAA,GAAA,SAAAA,GAAA,cAAAA,IAAAD,GATAd,EAAApW,IAqBAoX,GAAAzb,EAAA0b,gBAAA,SAAArX,EAAA70B,EAAA44B,EAAAuT,EAAAC,GACA,UAAAD,MAA+B,MAAAvT,EAC/B,aAAAuT,IAAAvT,EAA+B,QAC/B,IAKAyT,GAAAC,EAAAzZ,EALA0Z,EAAAxC,EAAAj3B,KAAA9S,GACAkd,EAAA2X,EACA5jB,EAAAw5B,EAAAx5B,MACAu7B,EAAA5T,EAAA,EACA6T,EAAA,IAAA7T,CAQA,IANA4T,IACA5T,MAEA6T,IACA7T,GAAA,KAEA,MAAAuT,GAAAnsC,EAAAuqB,QAAA,eACA8hB,EAAAzT,EAAA,KAAA2T,EAAA1X,EAAA6X,YAAA7X,EAAA8X,kBACK,CAEL,GADA17B,EAAA85B,QAAA,+BAAyCY,EAAA9W,EAAA,8BACzC,MAAAsX,GAAAjvB,EAAAxM,aAAA,MAAAy7B,EAAA/Q,OAAA,YAAA+Q,EASAl7B,EAAAs7B,EAAA,oCAAA3T,EAAAuT,MATA,CAIA,GAHAjvB,EAAA2X,EAAAoD,YAAAqS,EAAA75B,KACA67B,EAAApvB,EAAA0vB,SACA/Z,EAAAxF,EAAA8D,OAAAnf,MACAs6B,GAAAC,GAAAD,EAAAzZ,SACA,MAAAyZ,GAAAvmC,MAAA6yB,EAAA,GAEA3nB,GAAAs7B,EAAA,kBAAA3T,EAAAuT,EAIAjvB,EAAAxM,YAAA+5B,GACA4B,EAAAruB,WAAAysB,EAAA8B,EAAA,+BACArvB,EAAA2I,YAAA4kB,GACA8B,GAAA,MAAAJ,GAAA5F,EAAAsG,eAAA,IACAP,EAAApvB,EAAA0vB,SAAA1vB,EAAA0vB,aACAN,EAAAzZ,OACAyZ,EAAAvmC,MAAAsmC,EAAAzT,EAAA,KAEA,IAAAyT,GAAAD,IACAC,EAAAJ,GAAApX,EAAA70B,EAAA44B,EAAAuT,GAAA,IAMA,MAHAM,KACAJ,GAAA,KAEAG,GAAAH,KAEAS,GAAAtc,EAAAuc,gBAAA,SAAAlY,EAAA70B,EAAA6rC,GACA,gBAAAF,EAAA9W,EAAA,WAAAgX,GAAsD,QACtD,IAAAmB,GAAA,SAAAhtC,EAAA,aACA44B,EAAA+S,EAAA9W,EAAA,SAAAmY,EAAAnB,EACA,OAAAhX,GAAA,SAAAmY,IAAAf,GAAApX,EAAA70B,EAAAge,WAAA4a,KAAApsB,QAAA48B,EAAA,UAIA6D,GAAA,SAAApY,EAAAgX,GACA,GACA1sC,GAAA+tC,EAAAltC,EADAyX,IAEA,IAAAo0B,KAAAJ,EAAA5W,EAAA,MACA,GAAA11B,EAAA0sC,EAAAvgC,OACA,OAAAnM,MACAa,EAAA6rC,EAAA1sC,GACAa,EAAAuqB,QAAA,oBAAA4iB,KAAAntC,IACAyX,EAAAzX,EAAAwM,QAAAk9B,EAAAE,IAAAiC,EAAAp2B,iBAAAzV,QAIA,KAAAb,IAAA0sC,GACA1sC,EAAAorB,QAAA,mBAAA6iB,KAAAjuC,IACAsY,EAAAtY,GAAA0sC,EAAA1sC,QAIK,IAAA0sC,EAAAhX,EAAAqW,cAAArW,EAAA5jB,MACL,IAAA9R,IAAA0sC,GACA,oBAAAzhB,SAAA3S,EAAAtY,KACAsY,EAAAtY,EAAAqN,QAAAk9B,EAAAE,IAAAiC,EAAA1sC,GAuBA,OAnBAyrC,KACAnzB,EAAAuzB,QAAAC,EAAApW,IAEAqY,EAAAG,GAAAxY,EAAAgX,GAAA,GACAp0B,EAAAqG,SAAAovB,EAAApvB,SACArG,EAAA61B,MAAAJ,EAAAI,MACA71B,EAAA81B,OAAAL,EAAAK,OACA91B,EAAA+1B,OAAAN,EAAAM,OACA/1B,EAAA6G,EAAA4uB,EAAA5uB,EACA7G,EAAA+G,EAAA0uB,EAAA1uB,EACAivB,KACAh2B,EAAAi2B,EAAAR,EAAAQ,EACAj2B,EAAAk2B,UAAAT,EAAAS,UACAl2B,EAAAm2B,UAAAV,EAAAU,UACAn2B,EAAAo2B,OAAAX,EAAAW,QAEAp2B,EAAAq2B,eACAr2B,GAAAq2B,QAEAr2B,GAIAs2B,GAAA,SAAAlZ,EAAAmZ,EAAAC,EAAAxe,EAAAye,GACA,GAEAxhC,GAAA1M,EAAAmuC,EAFAC,KACAn9B,EAAA4jB,EAAA5jB,KAEA,KAAAjR,IAAAiuC,GACA,YAAAjuC,GAAA,WAAAA,GAAAmsB,MAAAnsB,KAAAguC,EAAAhuC,MAAA0M,EAAAuhC,EAAAjuC,KAAAkuC,KAAAluC,OAAAuqB,QAAA,0DACA6jB,EAAApuC,GAAA,SAAA0M,GAAA,SAAA1M,GAAA,QAAAA,EAAA,KAAA0M,GAAA,SAAAA,GAAA,SAAAA,GAAA,gBAAAshC,GAAAhuC,IAAA,KAAAguC,EAAAhuC,GAAAwM,QAAA28B,EAAA,IAAAz8B,EAAA,EAAAogC,GAAAjY,EAAA70B,GACAoqB,SAAAnZ,EAAAjR,KACAmuC,EAAA,GAAAE,IAAAp9B,EAAAjR,EAAAiR,EAAAjR,GAAAmuC,KAIA,IAAA1e,EACA,IAAAzvB,IAAAyvB,GACA,cAAAzvB,IACAouC,EAAApuC,GAAAyvB,EAAAzvB,GAIA,QAAYouC,OAAAE,SAAAH,IAEZI,IAAkBxoC,OAAA,gBAAAC,QAAA,iBAClBwoC,IAAA,uDASAC,GAAA,SAAA5Z,EAAA70B,EAAA6rC,GACA,YAAAhX,EAAAvX,SAAA,IAAAtT,cACA,OAAA6hC,GAAAJ,EAAA5W,IAAA70B,IAAA,CACK,IAAA60B,EAAA6Z,SAAAC,GAAA9Z,GACL,MAAAA,GAAA6Z,UAAA1uC,IAAA,CAEA,IAAA44B,GAAA5a,WAAA,UAAAhe,EAAA60B,EAAA+Z,YAAA/Z,EAAAga,cACA3vC,EAAAqvC,GAAAvuC,GACAb,EAAAD,EAAAoM,MAEA,KADAugC,KAAAJ,EAAA5W,EAAA,QACA11B,MACAy5B,GAAA5a,WAAA2tB,EAAA9W,EAAA,UAAA31B,EAAAC,GAAA0sC,GAAA,OACAjT,GAAA5a,WAAA2tB,EAAA9W,EAAA,SAAA31B,EAAAC,GAAA,QAAA0sC,GAAA,MAEA,OAAAjT,IAIAkW,GAAA,SAAAlW,EAAAmW,GACA,eAAAnW,GAAA,SAAAA,GAAA,cAAAA,EACA,MAAAA,GAAA,GAEA,OAAAA,GAAA,KAAAA,IACAA,EAAA,MAEA,IAGAz5B,GAHAD,EAAA05B,EAAAxT,MAAA,KACA9G,EAAAsa,EAAArO,QAAA,kBAAAqO,EAAArO,QAAA,qBAAArrB,EAAA,GACAsf,EAAAoa,EAAArO,QAAA,iBAAAqO,EAAArO,QAAA,sBAAArrB,EAAA,EAEA,IAAAA,EAAAoM,OAAA,IAAAyjC,EAAA,CAGA,IAFA7vC,EAAA05B,EAAAxT,MAAA,MAAAyT,KAAA,KAAAzT,MAAA,KACAwT,KACAz5B,EAAA,EAAgBA,EAAAD,EAAAoM,OAAcnM,IAC9By5B,EAAAxmB,KAAA08B,GAAA5vC,EAAAC,IAEA,OAAAy5B,GAAAC,KAAA,KAoBA,MAlBA,OAAAra,EACAA,EAAA,WAAAF,EAAA,UACK,WAAAE,IACLA,EAAA,QAEA,WAAAF,GAAA6N,MAAAnO,WAAAM,QAAA,IAAAiM,QAAA,aACAjM,EAAA,OAEAsa,EAAAta,EAAA,IAAAE,GAAAtf,EAAAoM,OAAA,MAAApM,EAAA,OACA6vC,IACAA,EAAAC,IAAA1wB,EAAAiM,QAAA,UACAwkB,EAAAE,IAAAzwB,EAAA+L,QAAA,UACAwkB,EAAAG,IAAA,MAAA5wB,EAAA8c,OAAA,GACA2T,EAAAI,IAAA,MAAA3wB,EAAA4c,OAAA,GACA2T,EAAAK,GAAApxB,WAAAM,EAAA9R,QAAA28B,EAAA,KACA4F,EAAAM,GAAArxB,WAAAQ,EAAAhS,QAAA28B,EAAA,KACA4F,EAAAnW,KAEAmW,GAAAnW,GASA0W,GAAA,SAAArwC,EAAAuB,GAIA,MAHA,uBACAvB,IAAA8pC,EAAAnF,IAEA,0BAAA3kC,EAAAm8B,OAAA,GAAA9lB,SAAArW,EAAAm8B,OAAA,WAAApd,WAAA/e,EAAAq8B,OAAA,IAAAtd,WAAA/e,GAAA+e,WAAAxd,IAAA,GASA+uC,GAAA,SAAA3W,EAAAh4B,GAIA,MAHA,uBACAg4B,IAAAmQ,EAAAnF,IAEA,MAAAhL,EAAAh4B,EAAA,0BAAAg4B,EAAAwC,OAAA,GAAA9lB,SAAAsjB,EAAAwC,OAAA,WAAApd,WAAA4a,EAAA0C,OAAA,IAAA16B,EAAAod,WAAA4a,IAAA,GAWA4W,GAAA,SAAA5W,EAAAh4B,EAAAZ,EAAAyvC,GACA,GACAC,GAAAtqB,EAAAuqB,EAAAppC,EAAAqpC,EADAC,EAAA,IAmCA,OAjCA,uBACAjX,IAAAmQ,EAAAnF,IAEA,MAAAhL,EACAryB,EAAA3F,EACK,mBACL2F,EAAAqyB,GAEA8W,EAAA,IACAtqB,EAAAwT,EAAAxT,MAAA,KACAwqB,EAAA,MAAAhX,EAAAwC,OAAA,GACAuU,GAAAC,EAAAt6B,SAAAsjB,EAAAwC,OAAA,WAAApd,WAAAoH,EAAA,GAAAkW,OAAA,IAAAtd,WAAAoH,EAAA,MAAAwT,EAAArO,QAAA,cAAA4U,IAAAyQ,EAAA,EAAAhvC,GACAwkB,EAAA9Z,SACAmkC,IACAA,EAAAzvC,GAAAY,EAAA+uC,GAEA/W,EAAArO,QAAA,gBACAolB,GAAAD,EACAC,OAAAD,EAAA,KACAC,IAAA,EAAAA,EAAAD,EAAAC,EAAAD,IAGA9W,EAAArO,QAAA,aAAAolB,EAAA,EACAA,KAAA,WAAAD,MAAAC,EAAAD,EAAA,GAAAA,EACO9W,EAAArO,QAAA,aAAAolB,EAAA,IACPA,KAAA,WAAAD,MAAAC,EAAAD,EAAA,GAAAA,IAGAnpC,EAAA3F,EAAA+uC,GAEAppC,EAAAspC,GAAAtpC,GAAAspC,IACAtpC,EAAA,GAEAA,GAGAupC,IAAmBC,MAAA,WACnBC,MAAA,SACAC,QAAA,aACAC,OAAA,OACAC,QAAA,SACAC,MAAA,WACAC,MAAA,SACAC,MAAA,SACAC,OAAA,aACAC,SAAA,WACAC,OAAA,WACAC,QAAA,WACAC,QAAA,WACAC,MAAA,aACAC,QAAA,WACAC,OAAA,SACAC,KAAA,SACAC,MAAA,aACAC,MAAA,WACAC,aAAA,gBAEAC,GAAA,SAAAC,EAAAnQ,EAAAC,GAEA,MADAkQ,KAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EACA,OAAAA,EAAA,EAAAnQ,GAAAC,EAAAD,GAAAmQ,EAAA,EAAAA,EAAA,GAAAlQ,EAAA,EAAAkQ,EAAA,EAAAnQ,GAAAC,EAAAD,IAAA,IAAAmQ,GAAA,EAAAnQ,GAAA,MASAoQ,GAAA9K,EAAA+K,WAAA,SAAA1Y,EAAA2Y,GACA,GAAAryC,GAAAic,EAAA0uB,EAAArpC,EAAA4wC,EAAA35B,EAAA8X,EAAA+N,EAAAuS,EAAAjvC,EAAA4wC,CACA,IAAA5Y,EAEK,sBACL15B,GAAA05B,GAAA,GAAAA,GAAA,UAAAA,OACK,CAIL,GAHA,MAAAA,EAAAwC,OAAAxC,EAAAttB,OAAA,KACAstB,IAAA0C,OAAA,EAAA1C,EAAAttB,OAAA,IAEAwkC,GAAAlX,GACA15B,EAAA4wC,GAAAlX,OACM,UAAAA,EAAAwC,OAAA,GACN,IAAAxC,EAAAttB,SACA6P,EAAAyd,EAAAwC,OAAA,GACAyO,EAAAjR,EAAAwC,OAAA,GACA56B,EAAAo4B,EAAAwC,OAAA,GACAxC,EAAA,IAAAzd,IAAA0uB,IAAArpC,KAEAo4B,EAAAtjB,SAAAsjB,EAAA0C,OAAA,OACAp8B,GAAA05B,GAAA,GAAAA,GAAA,UAAAA,OACM,YAAAA,EAAA0C,OAAA,KAEN,GADAp8B,EAAAsyC,EAAA5Y,EAAAnsB,MAAAu8B,GACAuI,GAYO,GAAA3Y,EAAArO,QAAA,UACP,MAAAqO,GAAAnsB,MAAAw8B,OAZAmI,GAAA/V,OAAAn8B,EAAA,YACAuY,EAAA4jB,OAAAn8B,EAAA,QACAqwB,EAAA8L,OAAAn8B,EAAA,QACA2qC,EAAAta,GAAA,GAAAA,GAAA9X,EAAA,GAAA8X,EAAA9X,EAAA8X,EAAA9X,EACA0D,EAAA,EAAAoU,EAAAsa,EACA3qC,EAAAoM,OAAA,IACApM,EAAA,GAAAm8B,OAAAzC,EAAA,KAEA15B,EAAA,GAAAiyC,GAAAC,EAAA,IAAAj2B,EAAA0uB,GACA3qC,EAAA,GAAAiyC,GAAAC,EAAAj2B,EAAA0uB,GACA3qC,EAAA,GAAAiyC,GAAAC,EAAA,IAAAj2B,EAAA0uB,OAKA3qC,GAAA05B,EAAAnsB,MAAAu8B,IAAA8G,GAAAoB,WAEAhyC,GAAA,GAAAm8B,OAAAn8B,EAAA,IACAA,EAAA,GAAAm8B,OAAAn8B,EAAA,IACAA,EAAA,GAAAm8B,OAAAn8B,EAAA,IACAA,EAAAoM,OAAA,IACApM,EAAA,GAAAm8B,OAAAn8B,EAAA,SA1CAA,GAAA4wC,GAAAI,KAgEA,OAnBAqB,KAAAC,IACAr2B,EAAAjc,EAAA,OACA2qC,EAAA3qC,EAAA,OACAsB,EAAAtB,EAAA,OACAo+B,EAAAnf,KAAAmf,IAAAniB,EAAA0uB,EAAArpC,GACAqvC,EAAA1xB,KAAA0xB,IAAA10B,EAAA0uB,EAAArpC,GACA+uB,GAAA+N,EAAAuS,GAAA,EACAvS,IAAAuS,EACAuB,EAAA35B,EAAA,GAEA7W,EAAA08B,EAAAuS,EACAp4B,EAAA8X,EAAA,GAAA3uB,GAAA,EAAA08B,EAAAuS,GAAAjvC,GAAA08B,EAAAuS,GACAuB,EAAA9T,IAAAniB,GAAA0uB,EAAArpC,GAAAI,GAAAipC,EAAArpC,EAAA,KAAA88B,IAAAuM,GAAArpC,EAAA2a,GAAAva,EAAA,GAAAua,EAAA0uB,GAAAjpC,EAAA,EACAwwC,GAAA,IAEAlyC,EAAA,GAAAkyC,EAAA,KACAlyC,EAAA,OAAAuY,EAAA,KACAvY,EAAA,OAAAqwB,EAAA,MAEArwB,GAEAuyC,GAAA,SAAAh6B,EAAA85B,GACA,GAGApyC,GAAA2G,EAAA4rC,EAHAC,EAAAl6B,EAAAhL,MAAAmlC,QACAC,EAAA,EACAC,EAAAH,EAAArmC,OAAA,GAAAmM,CAEA,KAAAtY,EAAA,EAAeA,EAAAwyC,EAAArmC,OAAmBnM,IAClC2G,EAAA6rC,EAAAxyC,GACAuyC,EAAAj6B,EAAA6jB,OAAAuW,EAAAp6B,EAAA8S,QAAAzkB,EAAA+rC,MACAA,GAAAH,EAAApmC,OAAAxF,EAAAwF,OACAxF,EAAAurC,GAAAvrC,EAAAyrC,GACA,IAAAzrC,EAAAwF,QACAxF,EAAAsM,KAAA,GAEA0/B,GAAAJ,GAAAH,EAAA,QAAAzrC,EAAA,OAAAA,EAAA,QAAAA,EAAA,QAAAA,EAAA,WAAAA,EAAA+yB,KAAA,SAEA,OAAAiZ,GAAAr6B,EAAA6jB,OAAAuW,IAEAD,GAAA,sEAEA,KAAA5xC,IAAA8vC,IACA8B,IAAA,IAAA5xC,EAAA,KAEA4xC,IAAA,GAAA/G,QAAA+G,GAAA,UAEArL,EAAAwL,kBAAA,SAAA7yC,GACA,GACAqyC,GADAS,EAAA9yC,EAAA,GAAAA,EAAA,EAEA0yC,IAAA9+B,KAAAk/B,KACAT,EAAAS,EAAAznB,QAAA,cAAAynB,EAAAznB,QAAA,cACArrB,EAAA,GAAAuyC,GAAAvyC,EAAA,GAAAqyC,GACAryC,EAAA,GAAAuyC,GAAAvyC,EAAA,GAAAqyC,IAEAK,GAAAK,UAAA,GAGA5kB,EAAA6kB,sBACA7kB,EAAA6kB,oBAAA3L,EAAAwL,kBAUA,IAAAI,IAAA,SAAApG,EAAAqG,EAAAC,EAAAC,GACA,SAAAvG,EACA,gBAAAnT,GAAyB,MAAAA,GAEzB,IAOA2Z,GAPAC,EAAAJ,GAAArG,EAAAt/B,MAAAmlC,MAAA,WACAa,EAAA1G,EAAA3mB,MAAAotB,GAAA3Z,KAAA,IAAApsB,MAAAy8B,OACAwJ,EAAA3G,EAAAzQ,OAAA,EAAAyQ,EAAAxhB,QAAAkoB,EAAA,KACAtG,EAAA,MAAAJ,EAAA3Q,OAAA2Q,EAAAzgC,OAAA,UACAqnC,EAAA5G,EAAAxhB,QAAA,kBACAqoB,EAAAH,EAAAnnC,OACAunC,EAAAD,EAAA,EAAAH,EAAA,GAAAjmC,QAAAw8B,EAAA,MAEA,OAAA4J,GAIAL,EADAH,EACA,SAAAxZ,GACA,GAAA9yB,GAAAgtC,EAAA3zC,EAAAD,CACA,uBACA05B,GAAAia,MACO,IAAAP,GAAApI,EAAAp3B,KAAA8lB,GAAA,CAEP,IADA15B,EAAA05B,EAAApsB,QAAA09B,EAAA,KAAA9kB,MAAA,KACAjmB,EAAA,EAAkBA,EAAAD,EAAAoM,OAAcnM,IAChCD,EAAAC,GAAAozC,EAAArzC,EAAAC,GAEA,OAAAD,GAAA25B,KAAA,KAKA,GAHA/yB,GAAA8yB,EAAAnsB,MAAAmlC,MAAAY,IAAA,GACAM,EAAAla,EAAAxT,MAAAtf,GAAA+yB,KAAA,IAAApsB,MAAAy8B,OACA/pC,EAAA2zC,EAAAxnC,OACAsnC,EAAAzzC,IACA,OAAAA,EAAAyzC,GACAE,EAAA3zC,GAAAkzC,EAAAS,GAAA3zC,EAAA,QAAAszC,EAAAtzC,EAGA,OAAAuzC,GAAAI,EAAAja,KAAA8Z,KAAA7sC,EAAAqmC,GAAAvT,EAAArO,QAAA,4BAKA,SAAAqO,GACA,GAAAka,GAAA5zC,EAAAC,CACA,uBACAy5B,GAAAia,MACM,IAAAP,GAAApI,EAAAp3B,KAAA8lB,GAAA,CAEN,IADA15B,EAAA05B,EAAApsB,QAAA09B,EAAA,KAAA9kB,MAAA,KACAjmB,EAAA,EAAiBA,EAAAD,EAAAoM,OAAcnM,IAC/BD,EAAAC,GAAAozC,EAAArzC,EAAAC,GAEA,OAAAD,GAAA25B,KAAA,KAIA,GAFAia,EAAAla,EAAAnsB,MAAAy8B,OACA/pC,EAAA2zC,EAAAxnC,OACAsnC,EAAAzzC,IACA,OAAAA,EAAAyzC,GACAE,EAAA3zC,GAAAkzC,EAAAS,GAAA3zC,EAAA,QAAAszC,EAAAtzC,EAGA,OAAAuzC,GAAAI,EAAAja,KAAA8Z,GAAAxG,GA7CA,SAAAvT,GAAyB,MAAAA,KAuDzBma,GAAA,SAAA7Q,GAEA,MADAA,KAAA9c,MAAA,KACA,SAAAyP,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,GACA,GACAtwB,GADAD,GAAAD,EAAA,IAAAmmB,MAAA,IAGA,KADAqK,KACAtwB,EAAA,EAAgBA,EAAA,EAAOA,IACvBswB,EAAAyS,EAAA/iC,IAAAD,EAAAC,GAAAD,EAAAC,IAAAD,GAAAC,EAAA,QAEA,OAAA2nC,GAAAkM,MAAAne,EAAApF,EAAAkD,EAAA4Q,KAqDA8K,IAhDA7d,EAAAiW,gBAAA,SAAA7N,GACAx5B,KAAAmkC,OAAAyD,SAAApO,EAMA,KALA,GAIAlsB,GAAAimB,EAAAxzB,EAAA8zC,EAAAjzC,EAJAY,EAAAxB,KAAAssB,KACA0b,EAAAxmC,EAAAwmC,MACA+G,EAAAvtC,EAAA0tC,SACAuB,EAAA,KAEA1B,GACAzhC,EAAA06B,EAAA+G,EAAAvV,GACAuV,EAAAhzB,EACAzO,EAAAyR,KAAA+0B,MAAAxmC,GACMA,EAAAmjC,GAAAnjC,GAAAmjC,IACNnjC,EAAA,GAEAyhC,EAAAtZ,EAAAsZ,EAAAnuC,GAAA0M,EACAyhC,IAAAvb,KAMA,IAJAhyB,EAAAwjC,aACAxjC,EAAAwjC,WAAAtmB,SAAAld,EAAAuyC,IAAAvyC,EAAAuyC,IAAA/L,EAAAtpB,SAAA1e,KAAAy1B,GAAAuS,EAAAtpB,UAGA,IAAA8a,GAAA,IAAAA,EAGA,IAFAuV,EAAAvtC,EAAA0tC,SACAtuC,EAAA,IAAA44B,EAAA,QACAuV,GAAA,CAEA,GADAxb,EAAAwb,EAAAtZ,EACAlC,EAAAQ,MAEO,OAAAR,EAAAQ,KAAA,CAEP,IADA8f,EAAAtgB,EAAAygB,IAAAzgB,EAAAlb,EAAAkb,EAAA0gB,IACAl0C,EAAA,EAAkBA,EAAAwzB,EAAApD,EAAUpwB,IAC5B8zC,GAAAtgB,EAAA,KAAAxzB,GAAAwzB,EAAA,MAAAxzB,EAAA,GAEAwzB,GAAA3yB,GAAAizC,OANAtgB,GAAA3yB,GAAA2yB,EAAAlb,EAAAkb,EAAAygB,GAQAjF,KAAAvb,QAaA,SAAAiC,EAAA70B,EAAA44B,EAAAlQ,EAAAvN,GACA/b,KAAAy1B,IACAz1B,KAAAY,IACAZ,KAAAw5B,IACAx5B,KAAA+b,IACAuN,IACAA,EAAAuT,MAAA78B,KACAA,KAAAwzB,MAAAlK,KAyFAge,IAtEAlW,EAAAgW,cAAA,SAAA3R,EAAApF,EAAAqX,EAAAnU,EAAA4Q,EAAA+P,GACA,GAKAn0C,GAAAa,EAAAuzC,EAAApF,EAAAqF,EALAC,EAAA9gB,EACA5d,KACAsoB,KACAjnB,EAAA0wB,EAAAG,WACAyM,EAAArJ,CAgBA,KAdAvD,EAAAG,WAAA,KACAoD,EAAA5a,EACAkD,EAAA6gB,EAAA1M,EAAAkM,MAAAne,EAAApF,EAAAkD,EAAA4Q,GACA8G,EAAAqJ,EAEAJ,IACAxM,EAAAG,WAAA7wB,EACAq9B,IACAA,EAAAxX,MAAA,KACAwX,EAAAxX,QACAwX,EAAAxX,MAAArJ,MAAA,QAIAD,OAAA8gB,GAAA,CACA,GAAA9gB,EAAAQ,MAAA,IACAnzB,EAAA2yB,EAAA3yB,EACAq9B,EAAAr9B,GAAA2yB,EAAAlb,EAAAkb,EAAA5yB,EACAgV,EAAA/U,GAAA2yB,EAAAlb,EACA67B,IACAnF,EAAA,GAAAE,IAAA1b,EAAA,IAAA3yB,EAAAmuC,EAAAxb,EAAAxX,GACAwX,EAAA5yB,EAAA,GAEA,IAAA4yB,EAAAQ,MAEA,IADAh0B,EAAAwzB,EAAApD,IACApwB,EAAA,GACAo0C,EAAA,KAAAp0C,EACAa,EAAA2yB,EAAA3yB,EAAA,IAAAuzC,EACAlW,EAAAr9B,GAAA2yB,EAAAjH,KAAA6nB,GACAx+B,EAAA/U,GAAA2yB,EAAA4gB,GACAD,IACAnF,EAAA,GAAAE,IAAA1b,EAAA4gB,EAAAvzC,EAAAmuC,EAAAxb,EAAAghB,IAAAJ,IAKA5gB,KAAAC,MAEA,OAAYwU,MAAAryB,EAAAsoB,MAAAiR,SAAAH,EAAAxb,GAAA6gB,IAyBZhjB,EAAAkW,aAAA,SAAA7R,EAAA70B,EAAAyX,EAAA1X,EAAA2oB,EAAAyK,EAAAygB,EAAAz4B,EAAA04B,EAAArzC,EAAAvB,GACAG,KAAAy1B,IACAz1B,KAAAY,IACAZ,KAAAqY,IACArY,KAAAW,IACAX,KAAAw0C,KAAA5zC,EACA60B,YAAA6R,KACAnC,EAAAnyB,KAAAhT,KAAAw0C,GAEAx0C,KAAA+b,IACA/b,KAAA+zB,QAAA,EACA0gB,IACAz0C,KAAAy0C,KACAnM,GAAA,GAEAtoC,KAAAoB,EAAA4pB,SAAA5pB,EAAAiX,EAAAjX,EACApB,KAAAH,EAAAmrB,SAAAnrB,EAAAwY,EAAA1X,EAAAd,EACAypB,IACAtpB,KAAAwzB,MAAAlK,EACAA,EAAAuT,MAAA78B,QAIA00C,GAAA,SAAA3pC,EAAA08B,EAAA9xB,EAAAsoB,EAAA3U,EAAAqrB,GACA,GAAAphB,GAAA,GAAA+T,IAAAv8B,EAAA08B,EAAA9xB,EAAAsoB,EAAAtoB,EAAA2T,OAAAqrB,EAGA,OAFAphB,GAAAnyB,EAAAuU,EACA4d,EAAA1zB,EAAA0zB,EAAAygB,IAAA/V,EACA1K,GAqBAqhB,GAAAzN,EAAA0N,aAAA,SAAApf,EAAA70B,EAAAQ,EAAAvB,EAAAi1C,EAAAnI,EAAApZ,EAAAkhB,EAAAtQ,EAAAyD,GAEAxmC,KAAAurC,GAAA,GACA,uBACA9sC,IAAA8pC,EAAAnF,IAEAjR,EAAA,GAAA+T,IAAA7R,EAAA70B,EAAA,IAAA2yB,EAAAqU,EAAA,cAAA6M,EAAArzC,EAAAvB,GACAA,GAAA,GACAi1C,GAAAtC,GAAA9+B,KAAA7T,EAAAuB,KACAvB,GAAAuB,EAAAvB,GACAsnC,EAAAwL,kBAAA9yC,GACAuB,EAAAvB,EAAA,GACAA,IAAA,GAEA,IAIAE,GAAAg1C,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAhD,EAAAiD,EAAA1B,EAAA2B,EAJAjV,EAAAn/B,EAAA4kB,MAAA,MAAAyT,KAAA,KAAAzT,MAAA,KACAyvB,EAAA51C,EAAAmmB,MAAA,MAAAyT,KAAA,KAAAzT,MAAA,KACAmK,EAAAoQ,EAAAr0B,OACAwpC,EAAArM,KAAA,CAeA,KAbAxpC,EAAAsrB,QAAA,WAAA/pB,EAAA+pB,QAAA,YACAoV,IAAA9G,KAAA,KAAArsB,QAAA09B,EAAA,MAAA9kB,MAAA,KACAyvB,IAAAhc,KAAA,KAAArsB,QAAA09B,EAAA,MAAA9kB,MAAA,KACAmK,EAAAoQ,EAAAr0B,QAEAikB,IAAAslB,EAAAvpC,SAEAq0B,GAAAoM,GAAA,IAAA3mB,MAAA,KACAmK,EAAAoQ,EAAAr0B,QAEAqnB,EAAA4Q,SACA5Q,EAAAqU,WACA4K,GAAAK,UAAA,EACA9yC,EAAA,EAAeA,EAAAowB,EAAOpwB,IAKtB,GAJAk1C,EAAA1U,EAAAxgC,GACAm1C,EAAAO,EAAA11C,GACAs1C,EAAAz2B,WAAAq2B,GAEAI,GAAA,IAAAA,EACA9hB,EAAAoiB,WAAA,GAAAN,EAAAnF,GAAAgF,EAAAG,GAAAH,EAAA9nC,QAAAy8B,EAAA,IAAA6L,GAAAR,EAAA/pB,QAAA,mBAGM,IAAA2pB,GAAAtC,GAAA9+B,KAAAuhC,GACNpB,EAAAqB,EAAA/pB,QAAA,OACA0oB,EAAA,KAAAA,EAAAqB,EAAAhZ,OAAA2X,GAAA,IACA2B,EAAAN,EAAA/pB,QAAA,aAAAqgB,EACAyJ,EAAAhD,GAAAgD,EAAAO,GACAN,EAAAjD,GAAAiD,EAAAM,GACAF,EAAAL,EAAA/oC,OAAAgpC,EAAAhpC,OAAA,EACAopC,IAAA9J,GAAA,IAAA0J,EAAA,IACA3hB,EAAA,KAAAA,EAAApD,IAAAoD,EAAApD,EAAA,6BACAoD,EAAA1zB,EAAA0zB,EAAA1zB,EAAAmmB,MAAAyvB,EAAA11C,IAAA05B,KAAA,iBAEA+R,IACA8J,GAAA,GAEAE,EACAjiB,EAAAoiB,WAAAL,EAAA,eAAAL,EAAA,GAAA/E,GAAAgF,EAAA,GAAAD,EAAA,eACAU,WAAA,GAAAV,EAAA,GAAA/E,GAAAgF,EAAA,GAAAD,EAAA,aACAU,WAAA,GAAAV,EAAA,GAAA/E,GAAAgF,EAAA,GAAAD,EAAA,IAAAK,EAAA,SAAAzB,GAAA,GAEAtgB,EAAAoiB,WAAAL,EAAA,eAAAL,EAAA,GAAAC,EAAA,GAAAD,EAAA,cACAU,WAAA,GAAAV,EAAA,GAAAC,EAAA,GAAAD,EAAA,WACAU,WAAA,GAAAV,EAAA,GAAAC,EAAA,GAAAD,EAAA,GAAAK,EAAA,IAAAzB,GAAA,GAGAyB,IACAL,IAAA/oC,OAAA,IAAA+oC,EAAA,GACA1hB,EAAAoiB,WAAA,GAAAV,GAAAC,EAAAhpC,OAAA,IAAAgpC,EAAA,IAAAD,EAAApB,GAAA,KAGArB,GAAAK,UAAA,MAMA,IAHAsC,EAAAF,EAAA5nC,MAAAu8B,GAOO,CAEP,GADAwL,EAAAF,EAAA7nC,MAAAw8B,IACAuL,KAAAlpC,SAAAipC,EAAAjpC,OAEA,MAAAqnB,EAGA,KADAyhB,EAAA,EACAD,EAAA,EAAmBA,EAAAI,EAAAjpC,OAAmB6oC,IACtCQ,EAAAJ,EAAAJ,GACAzC,EAAA2C,EAAA9pB,QAAAoqB,EAAAP,GACAzhB,EAAAoiB,WAAAV,EAAA/Y,OAAA8Y,EAAA1C,EAAA0C,GAAA/Y,OAAAsZ,GAAArF,GAAAkF,EAAAL,GAAAQ,GAAA,GAAAG,GAAA,OAAAT,EAAA/Y,OAAAoW,EAAAiD,EAAArpC,OAAA,OAAA6oC,GACAC,EAAA1C,EAAAiD,EAAArpC,MAEAqnB,GAAA,KAAAA,EAAApD,IAAA8kB,EAAA/Y,OAAA8Y,OAhBAzhB,GAAA,KAAAA,EAAApD,IAAAoD,EAAApD,GAAAoD,EAAA,KAAAA,EAAApD,GAAA,IAAA+kB,GAqBA,IAAAr1C,EAAAsrB,QAAA,WAAAoI,EAAAjH,KAAA,CAEA,IADAunB,EAAAtgB,EAAAygB,IAAAzgB,EAAAjH,KAAAjU,EACAtY,EAAA,EAAgBA,EAAAwzB,EAAApD,EAAUpwB,IAC1B8zC,GAAAtgB,EAAA,KAAAxzB,GAAAwzB,EAAAjH,KAAA,KAAAvsB,EAEAwzB,GAAA1zB,EAAAg0C,EAAAtgB,EAAA,KAAAxzB,GAMA,MAJAwzB,GAAApD,IACAoD,EAAAQ,QACAR,EAAAygB,IAAAzgB,EAAA1zB,GAEA0zB,EAAAqiB,QAAAriB,GAEAxzB,GAAA,CAKA,KAFAa,EAAA0mC,GAAAxmC,UACAF,EAAAuvB,EAAAvvB,EAAA6zC,GAAA,IACA10C,GAAA,GACAa,EAAA,KAAAb,IAAA,EACAa,EAAA,KAAAb,IAAA,EAEAa,GAAAozC,IAAA,GACApzC,EAAA4yB,MAAA5yB,EAAAi8B,MAAAj8B,EAAAg1C,OAAAh1C,EAAA0rB,KAAA1rB,EAAAujC,OAAAvjC,EAAAgnC,SAAAhnC,EAAA2zC,IAAA,KAeA3zC,EAAA+0C,WAAA,SAAArC,EAAAj7B,EAAA1X,EAAAosC,EAAAhxB,EAAA85B,GACA,GAAAtiB,GAAAvzB,KACAmwB,EAAAoD,EAAApD,CAEA,OADAoD,GAAA,KAAApD,IAAA0lB,IAAA1lB,GAAAoD,EAAA,KAAApD,IAAA,IAAAmjB,KAAA,GACA3yC,GAAA,IAAAwvB,GAAAoD,EAAA4Q,QAIA5Q,EAAApD,IACAoD,EAAAQ,KAAAR,EAAAqU,SAAA,IACArU,EAAA,KAAAA,EAAApD,GAAA4c,GAAA,GACA5c,EAAA,GACAoD,EAAAjH,KAAA,KAAA6D,GAAA9X,EAAA1X,EACA4yB,EAAAghB,IAAA,KAAApkB,GAAApU,EACAwX,EAAA,KAAApD,GAAA9X,EACAkb,EAAA4Q,SACA5Q,EAAAqiB,OAAA,GAAAtO,IAAA/T,EAAA,KAAApD,EAAA9X,EAAA1X,EAAA4yB,EAAAqiB,QAAAriB,EAAA,EAAAA,EAAAihB,EAAAz4B,EAAAwX,EAAAkhB,IACAlhB,EAAAqiB,OAAA5B,IAAA,GAEAzgB,IAEAA,EAAAjH,MAAcjU,IAAA1X,GACd4yB,EAAAghB,OACAhhB,EAAAlb,IACAkb,EAAA5yB,IACA4yB,EAAAxX,IACAwX,KArBAA,EAAA,KAAApD,IAAA9X,GAAA00B,GAAA,IACAxZ,GAqCA,IAAAuiB,IAAA,SAAAl1C,EAAAoE,GACAA,QACAhF,KAAAY,EAAAoE,EAAA+wC,OAAA3J,EAAAxrC,QACA6nC,EAAA7nC,GAAA6nC,EAAAzoC,KAAAY,GAAAZ,KACAA,KAAAg2C,OAAAhxC,EAAAmuC,WAAAJ,GAAA/tC,EAAA2nB,aAAA3nB,EAAA0B,MAAA1B,EAAAiuC,YAAAjuC,EAAAkuC,OACAluC,EAAAwiC,SACAxnC,KAAA4zC,MAAA5uC,EAAAwiC,QAEAxnC,KAAA80C,KAAA9vC,EAAA0B,MACA1G,KAAAkzC,MAAAluC,EAAAkuC,MACAlzC,KAAAi2C,QAAAjxC,EAAAixC,QACAj2C,KAAA2sC,KAAA3nC,EAAA2nB,aACA3sB,KAAAy0C,GAAAzvC,EAAAq/B,UAAA,GAIAkD,GAAAnW,EAAAmW,4BAAA,SAAA3mC,EAAAoE,EAAAkxC,GACA,qBACAlxC,GAAgBwiC,OAAA0O,GAEhB,IAEAn2C,GAAAuyC,EAFAxyC,EAAAc,EAAAolB,MAAA,KACAxkB,EAAAwD,EAAA2nB,YAGA,KADAupB,MAAA10C,GACAzB,EAAA,EAAeA,EAAAD,EAAAoM,OAAcnM,IAC7BiF,EAAA+wC,OAAA,IAAAh2C,GAAAiF,EAAA+wC,OACA/wC,EAAA2nB,aAAAupB,EAAAn2C,IAAAyB,EACA8wC,EAAA,GAAAwD,IAAAh2C,EAAAC,GAAAiF,IAKAmxC,GAAA/kB,EAAA+kB,oBAAA,SAAAv1C,GACA,IAAA6nC,EAAA7nC,GAAA,CACA,GAAAw1C,GAAAx1C,EAAAo7B,OAAA,GAAA0O,cAAA9pC,EAAAs7B,OAAA,WACAqL,IAAA3mC,GAAqC4mC,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,GACrC,GAAAgmB,GAAAtc,EAAAuc,IAAAC,UAAAC,QAAAJ,EACA,OAAAC,IAIAA,EAAAnP,eACAuB,EAAA7nC,GAAAgzC,MAAAne,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,KAJA2b,EAAA,UAAAoK,EAAA,wBACA7iB,OASA3yB,GAAAk1C,GAAAh1C,UAYAF,EAAAi0C,aAAA,SAAApf,EAAAr0B,EAAAvB,EAAA0zB,EAAA4Q,EAAAyD,GACA,GACA7nC,GAAAwgC,EAAAkV,EAAAtlB,EAAAsmB,EAAAC,EADAC,EAAA32C,KAAAi2C,OAUA,IAPAj2C,KAAAkzC,QAAApI,EAAAp3B,KAAA7T,IAAAirC,EAAAp3B,KAAAtS,IACAm/B,EAAAn/B,EAAAgM,QAAA09B,EAAA,KAAA9kB,MAAA,KACAyvB,EAAA51C,EAAAuN,QAAA09B,EAAA,KAAA9kB,MAAA,MACI2wB,IACJpW,GAAAn/B,GACAq0C,GAAA51C,KAEA41C,EAAA,CAEA,IADAtlB,EAAAslB,EAAAvpC,OAAAq0B,EAAAr0B,OAAAupC,EAAAvpC,OAAAq0B,EAAAr0B,OACAnM,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtBqB,EAAAm/B,EAAAxgC,GAAAwgC,EAAAxgC,IAAAC,KAAA2sC,KACA9sC,EAAA41C,EAAA11C,GAAA01C,EAAA11C,IAAAC,KAAA2sC,KACAgK,IACAF,EAAAr1C,EAAA+pB,QAAAwrB,GACAD,EAAA72C,EAAAsrB,QAAAwrB,GACAF,IAAAC,IACAA,OACAnW,EAAAxgC,GAAAwgC,EAAAxgC,GAAAimB,MAAA2wB,GAAAld,KAAA,IACQgd,SACRlW,EAAAxgC,IAAA,IAAA42C,IAKAv1C,GAAAm/B,EAAA9G,KAAA,MACA55B,EAAA41C,EAAAhc,KAAA,MAEA,MAAAmb,IAAAnf,EAAAz1B,KAAAY,EAAAQ,EAAAvB,EAAAG,KAAA80C,KAAA90C,KAAA2sC,KAAApZ,EAAAvzB,KAAAy0C,GAAAtQ,EAAAyD,IAgBAhnC,EAAAgzC,MAAA,SAAAne,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,GACA,MAAArwB,MAAA60C,aAAApf,EAAA5jB,MAAA7R,KAAAg2C,OAAAzJ,EAAA9W,EAAAz1B,KAAAY,EAAA4nC,GAAA,EAAAxoC,KAAA2sC,OAAA3sC,KAAAg2C,OAAAn2C,GAAA0zB,EAAA4Q,IA6BAgD,EAAAyP,oBAAA,SAAA34B,EAAA44B,EAAAxS,GACAkD,GAAAtpB,GAAsCupB,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,GACtC,GAAAuc,GAAA,GAAAtF,IAAA7R,EAAA70B,EAAA,IAAA2yB,EAAA,EAAA3yB,IAAA,GAAAyjC,EAGA,OAFAuI,GAAAzI,SACAyI,EAAAhF,SAAAiP,EAAAphB,EAAA51B,EAAA6nC,EAAAQ,OAAAtnC,GACAgsC,GACIvI,cASJ8C,EAAA2P,oBAAAvN,GAAAC,CACA,IAUAuN,IAVAC,GAAA,oGAAAhxB,MAAA,KACAgoB,GAAA5B,EAAA,aACA2B,GAAA7B,EAAA,YACA+K,GAAA7K,EAAA,mBACAiC,GAAA,OAAAjC,EAAA,eACA8K,GAAA9lB,EAAA8lB,UAAA,WACAl3C,KAAAmpC,YAAAvqB,WAAAuoB,EAAAuB,8BAAA,EACA1oC,KAAAm3C,UAAAhQ,EAAAiQ,kBAAA,IAAA/I,MAAAlH,EAAAiQ,gBAAA,SAEAC,GAAA5zC,OAAA6zC,WAIAC,GAAA,SAAAxjB,EAAAyjB,EAAAC,GACA,GAEA72C,GAFAyI,EAAA6hC,EAAAE,gBAAA,6BAAArX,GACA2jB,EAAA,iBAEA,KAAA92C,IAAA62C,GACApuC,EAAAsuC,eAAA,KAAA/2C,EAAAwM,QAAAsqC,EAAA,SAAA9sC,cAAA6sC,EAAA72C,GAGA,OADA42C,GAAAlmC,YAAAjI,GACAA,GAEAuuC,GAAA1M,EAAA90B,gBACAyhC,GAAA,WAEA,GACAC,GAAAC,EAAApxC,EADAgtB,EAAA+V,GAAA,WAAAh2B,KAAA63B,KAAA9nC,OAAAu0C,MAWA,OATA9M,GAAAE,kBAAAzX,IACAmkB,EAAAP,GAAA,MAAAK,IACAG,EAAAR,GAAA,OAAAO,GAAqCnxC,MAAA,IAAAC,OAAA,GAAAsY,EAAA,MACrCvY,EAAAoxC,EAAAE,wBAAAtxC,MACAoxC,EAAAlmC,MAAAolC,IAAA,UACAc,EAAAlmC,MAAAm8B,IAAA,cACAra,EAAAhtB,IAAAoxC,EAAAE,wBAAAtxC,SAAA6iC,GAAA6E,IACAuJ,GAAAnxB,YAAAqxB,IAEAnkB,KAEAukB,GAAA,SAAAr4C,EAAAs4C,EAAAC,EAAAC,EAAAC,EAAAC,GACA,GAEA/e,GAAAta,EAAAE,EAAAo5B,EAAAC,EAAA34C,EAAAsB,EAAAT,EAAAa,EAAAk3C,EAAAC,EAAAC,EAAAC,EAAAC,EAFAC,EAAAl5C,EAAAkoC,aACArnC,EAAAs4C,GAAAn5C,GAAA,EAEAk5C,KACAF,EAAAE,EAAAP,QACAM,EAAAC,EAAAN,WAEAJ,IAAA7e,EAAA6e,EAAAryB,MAAA,MAAA9Z,OAAA,KACA9K,EAAAvB,EAAAyvC,UACA6I,EAAAzI,GAAAyI,GAAAnyB,MAAA,KACAwT,IAAA2e,EAAA,GAAAhtB,QAAA,UAAAvM,WAAAu5B,EAAA,QAAA/2C,EAAAuF,MAAAiY,WAAAu5B,EAAA,KAAA/2C,EAAA8d,GACAi5B,EAAA,GAAAhtB,QAAA,UAAAvM,WAAAu5B,EAAA,QAAA/2C,EAAAwF,OAAAgY,WAAAu5B,EAAA,KAAA/2C,EAAAge,IAEAg5B,EAAAI,UAAA55B,WAAA4a,EAAA,IACA4e,EAAAK,UAAA75B,WAAA4a,EAAA,IACA6e,GAAA33C,IAAAu4C,KACAn5C,EAAAY,EAAA,GACAU,EAAAV,EAAA,GACAC,EAAAD,EAAA,GACAc,EAAAd,EAAA,GACAg4C,EAAAh4C,EAAA,GACAi4C,EAAAj4C,EAAA,GACAk4C,EAAA94C,EAAA0B,EAAAJ,EAAAT,EACAue,EAAAs5B,GAAAh3C,EAAAo3C,GAAAH,IAAA93C,EAAAi4C,IAAAj4C,EAAAg4C,EAAAn3C,EAAAk3C,GAAAE,EACAx5B,EAAAo5B,IAAAp3C,EAAAw3C,GAAAH,GAAA34C,EAAA84C,IAAA94C,EAAA64C,EAAAv3C,EAAAs3C,GAAAE,EACAJ,EAAAJ,EAAAI,QAAAhf,EAAA,GAAAta,EACAu5B,EAAAL,EAAAK,QAAAjf,EAAA,GAAApa,GAEA25B,IACAR,IACAH,EAAAc,QAAAH,EAAAG,QACAd,EAAAe,QAAAJ,EAAAI,QACAJ,EAAAX,GAEAE,QAAA,GAAAnR,EAAAyB,uBAAA,GACA1pB,EAAAs5B,EAAAK,EACAz5B,EAAAq5B,EAAAK,EAIAC,EAAAG,SAAAh6B,EAAAxe,EAAA,GAAA0e,EAAA1e,EAAA,GAAAwe,EACA65B,EAAAI,SAAAj6B,EAAAxe,EAAA,GAAA0e,EAAA1e,EAAA,GAAA0e,GAEA25B,EAAAG,QAAAH,EAAAI,QAAA,GAGAZ,GACA14C,EAAAyM,aAAA,kBAAAktB,EAAAC,KAAA,OAGA2f,GAAA,SAAAv5C,GACA,IACA,MAAAA,GAAAyvC,UACK,MAAAzvC,MAEL0vC,GAAA,SAAA1vC,GACA,SAAAw3C,IAAAx3C,EAAAyvC,SAAAzvC,EAAAw5C,QAAAD,GAAAv5C,QAAAg5B,YAAAh5B,EAAAg5B,WAAAyW,SAAAzvC,EAAAg5B,WAAAwgB,UAEAJ,IAAA,aACAD,GAAA,SAAAn5C,EAAAy5C,GACA,GAGAC,GAAAlhC,EAAA3X,EAAA8zC,EAAAgF,EAAAC,EAHAV,EAAAl5C,EAAAkoC,cAAA,GAAAmP,IACAwC,EAAA,IACA7nC,EAAAhS,EAAAgS,KA8CA,IA5CAm8B,GACA31B,EAAAk0B,EAAA1sC,EAAAkuC,GAAA,SACKluC,EAAAisC,eAELzzB,EAAAxY,EAAAisC,aAAAC,OAAA1+B,MAAAu9B,GACAvyB,KAAA,IAAAA,EAAAnM,QAAAmM,EAAA,GAAA6jB,OAAA,GAAAD,OAAA5jB,EAAA,GAAA6jB,OAAA,IAAAD,OAAA5jB,EAAA,GAAA6jB,OAAA,IAAA7jB,EAAA,GAAA6jB,OAAA,GAAA6c,EAAA75B,GAAA,EAAA65B,EAAA35B,GAAA,GAAAqa,KAAA,SAEA8f,GAAAlhC,GAAA,SAAAA,GAAA,6BAAAA,EACAkhC,GAAAvL,MAAAyL,EAAA,SAAApN,EAAAxsC,GAAAiS,WAAAjS,EAAAg5B,cACA4gB,IACAjF,EAAA3iC,EAAAC,QACAD,EAAAC,QAAA,SAEAjS,EAAAg5B,aACA2gB,EAAA,EACA5B,GAAAtmC,YAAAzR,IAEAwY,EAAAk0B,EAAA1sC,EAAAkuC,GAAA,SACAwL,GAAAlhC,GAAA,SAAAA,GAAA,6BAAAA,EACAm8B,EACA3iC,EAAAC,QAAA0iC,EACMiF,GACNE,GAAA9nC,EAAA,WAEA2nC,GACA5B,GAAAnxB,YAAA5mB,KAGAk5C,EAAAjB,KAAAj4C,EAAAyvC,SAAAC,GAAA1vC,MACA05C,IAAA1nC,EAAAm8B,IAAA,IAAA7iB,QAAA,iBACA9S,EAAAxG,EAAAm8B,IACAuL,EAAA,GAEA74C,EAAAb,EAAAgf,aAAA,aACA06B,GAAA74C,IACAA,EAAAyqB,QAAA,gBACA9S,EAAA3X,EACA64C,EAAA,GACO74C,EAAAyqB,QAAA,oBACP9S,EAAA,kBAAA3X,EAAA2M,MAAA,2BAAAosB,KAAA,SACA8f,EAAA,KAIAA,EACA,MAAAN,GAKA,KAFAv4C,GAAA2X,GAAA,IAAAhL,MAAAu8B,OACA7pC,GAAAW,EAAAwL,SACAnM,OACAy0C,EAAAvY,OAAAv7B,EAAAX,KACAW,EAAAX,KAAAy5C,EAAAhF,MAAA,KAAAgF,EAAAE,GAAAF,EAAA,aAAAE,EAAAlF,GAEA,OAAA8E,IAAA54C,EAAAwL,OAAA,GAAAxL,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAAAA,EAAA,KAAAA,GAWAutC,GAAA7c,EAAAwoB,aAAA,SAAAnkB,EAAAgX,EAAAoN,EAAAjG,GACA,GAAAne,EAAAsS,cAAA8R,IAAAjG,EACA,MAAAne,GAAAsS,YAEA,IAMArnC,GAAAX,EAAAouC,EAAAC,EAAA1vB,EAAAwvB,EANA6K,EAAAc,EAAApkB,EAAAsS,cAAA,GAAAmP,IAAA,GAAAA,IACA4C,EAAAf,EAAA5K,OAAA,EACAsC,EAAA,KACAiJ,EAAA,IACAK,EAAA1L,GAAAzvB,WAAA2tB,EAAA9W,EAAAwhB,GAAAxK,GAAA,WAAAzmB,MAAA,UAAA+yB,EAAAgB,SAAA,IACArR,EAAA9pB,WAAAuoB,EAAAuB,8BAAA,CASA,IANAqQ,EAAAjB,OAAAriB,EAAA6Z,UAAAC,GAAA9Z,IACAsjB,EAAAjB,MACAI,GAAAziB,EAAA8W,EAAA9W,EAAAwhB,GAAAxK,GAAA,gBAAAsM,EAAAtjB,EAAA5W,aAAA,oBACAk4B,GAAA5P,EAAA2P,qBAAAe,IAEAn3C,EAAAs4C,GAAAvjB,GACA/0B,IAAAu4C,GAAA,CAEA,QAAAv4C,EAAAwL,OAAA,CAEA,GAMA8tC,GAAAC,EAAAC,EAAAC,EAAAC,EANAC,EAAA35C,EAAA,GAAA45C,EAAA55C,EAAA,GAAA65C,EAAA75C,EAAA,GAAA85C,EAAA95C,EAAA,GACA+5C,EAAA/5C,EAAA,GAAAg6C,EAAAh6C,EAAA,GAAAi6C,EAAAj6C,EAAA,GAAAk6C,EAAAl6C,EAAA,GACAm6C,EAAAn6C,EAAA,GAAAo6C,EAAAp6C,EAAA,GAAAq6C,EAAAr6C,EAAA,IACAs6C,EAAAt6C,EAAA,IAAAu6C,EAAAv6C,EAAA,IAAAw6C,EAAAx6C,EAAA,IACAy6C,EAAAz6C,EAAA,IACA06C,EAAAr8B,KAAAgoB,MAAA4T,EAAAI,EAIAhC,GAAAgB,UACAmB,GAAAnC,EAAAgB,QACAiB,EAAAH,EAAAK,EAAAx6C,EAAA,IACAu6C,EAAAH,EAAAI,EAAAx6C,EAAA,IACAw6C,EAAAH,EAAAG,EAAAnC,EAAAgB,QAAAr5C,EAAA,KAEAq4C,EAAAxK,UAAA6M,EAAArb,EAEAqb,IACAjB,EAAAp7B,KAAAo7B,KAAAiB,GACAhB,EAAAr7B,KAAAq7B,KAAAgB,GACApB,EAAAS,EAAAN,EAAAU,EAAAT,EACAH,EAAAS,EAAAP,EAAAW,EAAAV,EACAF,EAAAS,EAAAR,EAAAY,EAAAX,EACAS,EAAAJ,GAAAL,EAAAS,EAAAV,EACAW,EAAAJ,GAAAN,EAAAU,EAAAX,EACAY,EAAAJ,GAAAP,EAAAW,EAAAZ,EACAgB,EAAAP,GAAAR,EAAAe,EAAAhB,EACAM,EAAAT,EACAU,EAAAT,EACAU,EAAAT,GAGAkB,EAAAr8B,KAAAgoB,OAAAwT,EAAAQ,GACAhC,EAAAvK,UAAA4M,EAAArb,EACAqb,IACAjB,EAAAp7B,KAAAo7B,KAAAiB,GACAhB,EAAAr7B,KAAAq7B,KAAAgB,GACApB,EAAAK,EAAAF,EAAAU,EAAAT,EACAH,EAAAK,EAAAH,EAAAW,EAAAV,EACAF,EAAAK,EAAAJ,EAAAY,EAAAX,EACAU,EAAAR,EAAAF,EAAAU,EAAAX,EACAY,EAAAR,EAAAH,EAAAW,EAAAZ,EACAgB,EAAAX,EAAAJ,EAAAe,EAAAhB,EACAE,EAAAL,EACAM,EAAAL,EACAM,EAAAL,GAGAkB,EAAAr8B,KAAAgoB,MAAAuT,EAAAD,GACAtB,EAAAr6B,SAAA08B,EAAArb,EACAqb,IACAjB,EAAAp7B,KAAAo7B,KAAAiB,GACAhB,EAAAr7B,KAAAq7B,KAAAgB,GACAf,IAAAF,EAAAM,EAAAL,EACAH,EAAAK,EAAAH,EAAAO,EAAAN,EACAM,EAAAJ,GAAAF,EAAAM,EAAAP,EACAQ,EAAAJ,GAAAH,EAAAO,EAAAR,EACAG,EAAAL,GAGAlB,EAAAxK,WAAAxvB,KAAA4f,IAAAoa,EAAAxK,WAAAxvB,KAAA4f,IAAAoa,EAAAr6B,UAAA,QACAq6B,EAAAxK,UAAAwK,EAAAr6B,SAAA,EACAq6B,EAAAvK,UAAA,IAAAuK,EAAAvK,WAGAuK,EAAA5K,QAAApvB,KAAAkkB,KAAAoX,IAAAC,KAAAZ,EAAA,MAAAA,EACAX,EAAA3K,QAAArvB,KAAAkkB,KAAAyX,IAAAI,KAAApB,EAAA,MAAAA,EACAX,EAAAtK,QAAA1vB,KAAAkkB,KAAA0X,IAAAI,KAAArB,EAAA,MAAAA,EACAX,EAAAxK,WAAAwK,EAAAvK,UACAuK,EAAA7K,MAAA,GAEA6K,EAAA7K,MAAAuM,GAAAC,EAAA37B,KAAAgoB,MAAA0T,EAAAC,GAAA3a,EAAAgZ,EAAAr6B,SAAAq6B,EAAA7K,OAAA,EACAnvB,KAAA4f,IAAAoa,EAAA7K,OAAA,IAAAnvB,KAAA4f,IAAAoa,EAAA7K,OAAA,MACA4L,GACAf,EAAA5K,WACA4K,EAAA7K,OAAA6K,EAAAr6B,UAAA,WACAq6B,EAAAr6B,UAAAq6B,EAAAr6B,UAAA,aAEAq6B,EAAA3K,WACA2K,EAAA7K,OAAA6K,EAAA7K,OAAA,cAIA6K,EAAA5P,YAAAgS,EAAA,GAAAA,EAAA,GAAAA,KAAA,EACApC,EAAA75B,EAAA87B,EACAjC,EAAA35B,EAAA67B,EACAlC,EAAAzK,EAAA4M,EACAnC,EAAAjB,MACAiB,EAAA75B,GAAA65B,EAAAP,SAAAO,EAAAP,QAAA6B,EAAAtB,EAAAN,QAAAgC,GACA1B,EAAA35B,GAAA25B,EAAAN,SAAAM,EAAAN,QAAA6B,EAAAvB,EAAAP,QAAAkC,QAGM,KAAArM,IAAAuF,IAAAlzC,EAAAwL,QAAA6sC,EAAA75B,IAAAxe,EAAA,IAAAq4C,EAAA35B,IAAA1e,EAAA,KAAAq4C,EAAAxK,YAAAwK,EAAAvK,UAAA,CACN,GAAA6M,GAAA36C,EAAAwL,QAAA,EACApM,EAAAu7C,EAAA36C,EAAA,KACAU,EAAAV,EAAA,MACAC,EAAAD,EAAA,MACAc,EAAA65C,EAAA36C,EAAA,IACAq4C,GAAA75B,EAAAxe,EAAA,MACAq4C,EAAA35B,EAAA1e,EAAA,MACAytC,EAAApvB,KAAAkkB,KAAAnjC,IAAAsB,KACAgtC,EAAArvB,KAAAkkB,KAAAzhC,IAAAb,KACA+d,EAAA5e,GAAAsB,EAAA2d,KAAAgoB,MAAA3lC,EAAAtB,GAAAigC,EAAAgZ,EAAAr6B,UAAA,EACAwvB,EAAAvtC,GAAAa,EAAAud,KAAAgoB,MAAApmC,EAAAa,GAAAu+B,EAAArhB,EAAAq6B,EAAA7K,OAAA,EACAnvB,KAAA4f,IAAAuP,GAAA,IAAAnvB,KAAA4f,IAAAuP,GAAA,MACA4L,GACA3L,MACAD,GAAAxvB,GAAA,WACAA,MAAA,aAEA0vB,MACAF,MAAA,aAGA6K,EAAA5K,SACA4K,EAAA3K,SACA2K,EAAAr6B,WACAq6B,EAAA7K,QACAG,KACA0K,EAAAxK,UAAAwK,EAAAvK,UAAAuK,EAAAzK,EAAA,EACAyK,EAAA5P,YAAAT,EACAqQ,EAAAtK,OAAA,GAEAsK,EAAAjB,MACAiB,EAAA75B,GAAA65B,EAAAP,SAAAO,EAAAP,QAAA14C,EAAAi5C,EAAAN,QAAA93C,GACAo4C,EAAA35B,GAAA25B,EAAAN,SAAAM,EAAAP,QAAAp3C,EAAA23C,EAAAN,QAAAj3C,IAGAu3C,EAAAgB,SAEA,KAAAh6C,IAAAg5C,GACAA,EAAAh5C,GAAA0wC,GAAAsI,EAAAh5C,IAAA0wC,IACAsI,EAAAh5C,GAAA,GAmBA,MAdA85C,KACApkB,EAAAsS,aAAAgR,EACAA,EAAAjB,MACAf,IAAAthB,EAAA5jB,MAAAm8B,IACA/f,EAAAiJ,YAAA,gBACAyiB,GAAAlkB,EAAA5jB,MAAAm8B,OAEO+I,IAAAthB,EAAA5W,aAAA,cACPoP,EAAAiJ,YAAA,gBACAzB,EAAA6lB,gBAAA,iBAKAvC,GAIAwC,GAAA,SAAA/hB,GACA,GAUAkV,GAAAphC,EAVAmoB,EAAAz1B,KAAAssB,KACAkvB,GAAA/lB,EAAA/W,SAAAssB,EACA1f,EAAAkwB,EAAA/lB,EAAAyY,MAAAlD,EACA0O,EAAA,IACA55C,GAAAif,KAAAo7B,IAAAqB,GAAA/lB,EAAA0Y,OAAAuL,EAAA,GAAAA,EACAt4C,GAAA2d,KAAAq7B,IAAAoB,GAAA/lB,EAAA0Y,OAAAuL,EAAA,GAAAA,EACA/4C,GAAAoe,KAAAq7B,IAAA9uB,IAAAmK,EAAA2Y,OAAAsL,EAAA,GAAAA,EACAl4C,GAAAud,KAAAo7B,IAAA7uB,GAAAmK,EAAA2Y,OAAAsL,EAAA,GAAAA,EACA7nC,EAAA7R,KAAAy1B,EAAA5jB,MACA46B,EAAAzsC,KAAAy1B,EAAAqW,YAEA,IAAAW,EAAA,CAGAn/B,EAAAlM,EACAA,GAAAT,EACAA,GAAA2M,EACAohC,EAAAjC,EAAAV,OACAl6B,EAAAk6B,OAAA,EACA,IAMA0P,GAAAC,EANAC,EAAA37C,KAAAy1B,EAAA+Z,YACAwC,EAAAhyC,KAAAy1B,EAAAga,aACAmM,EAAA,aAAAnP,EAAAltB,SACA7e,EAAA,gDAAAZ,EAAA,SAAAsB,EAAA,SAAAT,EAAA,SAAAa,EACAwuC,EAAAva,EAAAvW,EAAAy8B,EAAAlmB,EAAAomB,SAAA,IACA5L,EAAAxa,EAAArW,EAAA4yB,EAAAvc,EAAAqmB,SAAA,GA+BA,IA3BA,MAAArmB,EAAAua,KACAyL,GAAAhmB,EAAA,IAAAkmB,EAAAlmB,EAAAua,GAAA,IAAAva,EAAAua,IAAA2L,EAAA,EACAD,GAAAjmB,EAAA,IAAAuc,EAAAvc,EAAAwa,GAAA,IAAAxa,EAAAwa,IAAA+B,EAAA,EACAhC,GAAAyL,KAAA37C,EAAA47C,EAAAt6C,GACA6uC,GAAAyL,GAAAD,EAAA96C,EAAA+6C,EAAAl6C,IAGAo6C,GAGAH,EAAAE,EAAA,EACAD,EAAA1J,EAAA,EAEAtxC,GAAA,SAAA+6C,KAAA37C,EAAA47C,EAAAt6C,GAAA4uC,GAAA,SAAA0L,GAAAD,EAAA96C,EAAA+6C,EAAAl6C,GAAAyuC,GAAA,KALAvvC,GAAA,gCAOAguC,EAAAvjB,QAAA,2CACAtZ,EAAAk6B,OAAA2C,EAAAthC,QAAAy9B,EAAAnqC,GAEAmR,EAAAk6B,OAAArrC,EAAA,IAAAguC,EAIA,IAAAlV,GAAA,IAAAA,GAAA,IAAA15B,GAAA,IAAAsB,GAAA,IAAAT,GAAA,IAAAa,IAAAo6C,GAAAl7C,EAAAyqB,QAAA,oBAAA8e,EAAAv2B,KAAAg7B,IAAA,MAAA9vB,WAAA6sB,OAAAC,KAAAgD,EAAAvjB,QAAAujB,EAAAvjB,QAAA,gBACAtZ,EAAAypC,gBAAA,YAIAM,EAAA,CACA,GACAG,GAAAtU,EAAA8I,EADAyL,EAAAtS,EAAA,MAMA,KAJA+R,EAAAhmB,EAAAwmB,WAAA,EACAP,EAAAjmB,EAAAymB,WAAA,EACAzmB,EAAAwmB,UAAAl9B,KAAA+0B,OAAA6H,IAAA77C,EAAA,GAAAA,KAAA67C,GAAAv6C,EAAA,GAAAA,KAAA4wC,IAAA,EAAAhC,GACAva,EAAAymB,UAAAn9B,KAAA+0B,OAAA9B,IAAAxwC,EAAA,GAAAA,KAAAwwC,GAAArxC,EAAA,GAAAA,KAAAg7C,IAAA,EAAA1L,GACAlwC,GAAA,EAAgBA,GAAA,EAAOA,KACvB0nC,EAAA2H,GAAArvC,IACAg8C,EAAAtP,EAAAhF,GAEAn6B,EAAAyuC,EAAA5wB,QAAA,WAAAvM,WAAAm9B,GAAAlP,GAAA7sC,KAAAy1B,EAAAgS,EAAA7oB,WAAAm9B,KAAA3uC,QAAA48B,EAAA,QAEAuG,EADAjjC,IAAAmoB,EAAAgS,GACA1nC,GAAA,GAAA01B,EAAAwmB,WAAAxmB,EAAAymB,UAEAn8C,GAAA,EAAA07C,EAAAhmB,EAAAwmB,UAAAP,EAAAjmB,EAAAymB,UAEArqC,EAAA41B,IAAAhS,EAAAgS,GAAA1oB,KAAA+0B,MAAAxmC,EAAAijC,GAAA,IAAAxwC,IAAA,IAAAA,GAAA,EAAAi8C,KAAA,QAaAG,GAAA/qB,EAAAgrB,oBAAAhrB,EAAAirB,kBAAA,SAAA7iB,GACA,GAcA6gB,GAAAI,EAAAI,EAAAP,EAAAI,EAAAI,EAAAP,EAAAI,EAAAI,EAAAP,EAAAI,EAAAO,EACApB,EAAAtJ,EAAA0J,EAAAC,EAAAJ,EAAAC,EAAAjjC,EAAAslC,EAAAC,EAAAjxB,EAAAouB,EAfAjkB,EAAAz1B,KAAAssB,KACAza,EAAA7R,KAAAy1B,EAAA5jB,MACAupC,EAAA3lB,EAAA/W,SACA6vB,EAAA9Y,EAAA8Y,UACAC,EAAA/Y,EAAA+Y,UACAgO,EAAA/mB,EAAA0Y,OACAsO,EAAAhnB,EAAA2Y,OACAsO,EAAAjnB,EAAAgZ,OACAvvB,EAAAuW,EAAAvW,EACAE,EAAAqW,EAAArW,EACAkvB,EAAA7Y,EAAA6Y,EACAqO,EAAAlnB,EAAAqiB,IACA3O,EAAA1T,EAAA0T,YACAgO,EAAA1hB,EAAA0hB,OAIA,UAAA3d,GAAA,IAAAA,IAAA,SAAA2d,IAAAn3C,KAAAulB,MAAA4N,aAAAnzB,KAAAulB,MAAA6O,iBAAAp0B,KAAAulB,MAAA4N,cAAAgkB,KAAA7I,IAAAnF,IAAAqF,IAAAD,GAAA,IAAAmO,GAAA3F,IAAA4F,IAAAtO,GAiDA,YA9CA+M,GAAA3lB,EAAAyY,OAAAyO,GACAvB,GAAApQ,EACA1f,EAAAmK,EAAAyY,MAAAlD,EACA0O,EAAA,IACAW,EAAAt7B,KAAAo7B,IAAAiB,GAAAoB,EACAlC,EAAAv7B,KAAAq7B,IAAAgB,GAAAoB,EACA/B,EAAA17B,KAAAq7B,IAAAgB,EAAA9vB,IAAAmxB,EACA/B,EAAA37B,KAAAo7B,IAAAiB,EAAA9vB,GAAAmxB,EACAnxB,GAAA,WAAAmK,EAAAmnB,WACA5C,EAAAj7B,KAAA89B,IAAAvxB,EAAAmK,EAAAqnB,MAAA9R,GACAgP,EAAAj7B,KAAAkkB,KAAA,EAAA+W,KACAS,GAAAT,EACAU,GAAAV,EACAvkB,EAAAqnB,QACA9C,EAAAj7B,KAAA89B,IAAApnB,EAAAqnB,MAAA9R,GACAgP,EAAAj7B,KAAAkkB,KAAA,EAAA+W,KACAK,GAAAL,EACAM,GAAAN,IAGA2C,IACAz9B,GAAAuW,EAAA+iB,SAAA/iB,EAAA+iB,QAAA6B,EAAA5kB,EAAAgjB,QAAAgC,GAAAhlB,EAAAyjB,QACA95B,GAAAqW,EAAAgjB,SAAAhjB,EAAA+iB,QAAA8B,EAAA7kB,EAAAgjB,QAAAiC,GAAAjlB,EAAA0jB,QACApC,KAAAthB,EAAAomB,UAAApmB,EAAAqmB,YACArL,EAAAzwC,KAAAy1B,EAAA6Z,UACApwB,GAAA,IAAAuW,EAAAomB,SAAApL,EAAA9pC,MACAyY,GAAA,IAAAqW,EAAAqmB,SAAArL,EAAA7pC,QAEA6pC,EAAA,KACAvxB,EAAAuxB,GAAAvxB,GAAAuxB,IACAvxB,EAAA,GAEAE,EAAAqxB,GAAArxB,GAAAqxB,IACArxB,EAAA,IAGApI,GAAAqjC,EAAAX,EAAA,GAAAA,EAAA,KAAAY,EAAAZ,EAAA,GAAAA,EAAA,KAAAe,EAAAf,EAAA,GAAAA,EAAA,KAAAgB,EAAAhB,EAAA,GAAAA,EAAA,IAAAx6B,EAAA,IAAAE,EAAA,IACAu9B,GAAA5F,GACA/2C,KAAAy1B,EAAAnpB,aAAA,sBAAA0K,GAGAnF,EAAAm8B,KAAAvY,EAAAomB,UAAApmB,EAAAqmB,SAAA,aAAArmB,EAAAomB,SAAA,KAAApmB,EAAAqmB,SAAA,wBAAA9kC,GAGAnF,EAAAm8B,KAAAvY,EAAAomB,UAAApmB,EAAAqmB,SAAA,aAAArmB,EAAAomB,SAAA,KAAApmB,EAAAqmB,SAAA,wBAAAU,EAAA,QAAAC,EAAA,IAAAv9B,EAAA,IAAAE,EAAA,IAiBA,IAZAoqB,IACAiH,EAAA,KACA+L,EAAA/L,GAAA+L,GAAA/L,IACA+L,EAAAE,EAAA,MAEAD,EAAAhM,GAAAgM,GAAAhM,IACAgM,EAAAC,EAAA,OAEAvT,GAAA1T,EAAA6Y,GAAA7Y,EAAA8Y,WAAA9Y,EAAA+Y,YACArF,EAAA,IAGAiS,GAAA3lB,EAAAyY,MACAkN,GAAApQ,EACAmP,EAAAE,EAAAt7B,KAAAo7B,IAAAiB,GACAhB,EAAAE,EAAAv7B,KAAAq7B,IAAAgB,GACA3lB,EAAAyY,QACAkN,GAAA3lB,EAAAyY,MAAAlD,EACAmP,EAAAp7B,KAAAo7B,IAAAiB,GACAhB,EAAAr7B,KAAAq7B,IAAAgB,GACA,WAAA3lB,EAAAmnB,WACA5C,EAAAj7B,KAAA89B,KAAApnB,EAAAyY,MAAAzY,EAAAqnB,OAAA9R,GACAgP,EAAAj7B,KAAAkkB,KAAA,EAAA+W,KACAG,GAAAH,EACAI,GAAAJ,EACAvkB,EAAAqnB,QACA9C,EAAAj7B,KAAA89B,IAAApnB,EAAAqnB,MAAA9R,GACAgP,EAAAj7B,KAAAkkB,KAAA,EAAA+W,KACAK,GAAAL,EACAM,GAAAN,KAIAS,GAAAL,EACAM,EAAAP,MAEK,MAAA3L,GAAAD,GAAA,IAAAmO,GAAAvT,GAAAwT,GAEL,YADA9qC,EAAAm8B,KAAAvY,EAAAomB,UAAApmB,EAAAqmB,SAAA,aAAArmB,EAAAomB,SAAA,KAAApmB,EAAAqmB,SAAA,kCAAA58B,EAAA,MAAAE,EAAA,MAAAkvB,EAAA,WAAAkO,GAAA,IAAAC,EAAA,UAAAD,EAAA,IAAAC,EAAA,QAGApC,GAAAK,EAAA,EACAD,EAAAH,EAAA,EAsBAS,EAAA,EACAF,EAAAC,EAAAP,EAAAI,EAAAH,EAAAI,EAAA,EACAO,EAAA,KAAAhS,EAAA,EACA4Q,EAAAtkB,EAAAskB,QACAtJ,EAAA,KACA6L,EAAA,IACAC,EAAA,IACAnB,EAAA5M,EAAAxD,EACAoQ,IACAjB,EAAAp7B,KAAAo7B,IAAAiB,GACAhB,EAAAr7B,KAAAq7B,IAAAgB,GACAb,GAAAH,EACAI,EAAAW,GAAAf,EACAS,EAAAR,EAAAD,EACAU,EAAAR,EAAAF,EACAW,EAAAZ,EACAgB,GAAAhB,EACAE,GAAAF,EACAG,GAAAH,GAEAiB,EAAA7M,EAAAvD,EACAoQ,IACAjB,EAAAp7B,KAAAo7B,IAAAiB,GACAhB,EAAAr7B,KAAAq7B,IAAAgB,GACApB,EAAAS,EAAAN,EAAAU,EAAAT,EACAH,EAAAS,EAAAP,EAAAW,EAAAV,EACAO,EAAAI,EAAAX,EACAQ,EAAAO,EAAAf,EACAS,EAAAJ,GAAAL,EAAAS,EAAAV,EACAW,EAAAJ,GAAAN,EAAAU,EAAAX,EACAY,GAAAZ,EACAgB,GAAAhB,EACAM,EAAAT,EACAU,EAAAT,GAEA,IAAAyC,IACA7B,GAAA6B,EACA5B,GAAA4B,EACA3B,GAAA2B,EACAvB,GAAAuB,GAEA,IAAAD,IACAhC,GAAAgC,EACA/B,GAAA+B,EACA9B,GAAA8B,EACA7B,GAAA6B,GAEA,IAAAD,IACAnC,GAAAmC,EACAlC,GAAAkC,EACAjC,GAAAiC,EACAhC,GAAAgC,IAGAzC,GAAA4C,KACA5C,IACA76B,GAAA27B,GAAAd,EACA36B,GAAA07B,GAAAf,EACAzL,GAAAyM,GAAAhB,KAEA4C,IACAz9B,GAAAuW,EAAA+iB,SAAA/iB,EAAA+iB,QAAA6B,EAAA5kB,EAAAgjB,QAAAgC,GAAAhlB,EAAAyjB,QACA95B,GAAAqW,EAAAgjB,SAAAhjB,EAAA+iB,QAAA8B,EAAA7kB,EAAAgjB,QAAAiC,GAAAjlB,EAAA0jB,SAEAj6B,EAAAuxB,GAAAvxB,GAAAuxB,IACAvxB,EAAAq9B,GAEAn9B,EAAAqxB,GAAArxB,GAAAqxB,IACArxB,EAAAm9B,GAEAjO,EAAAmC,GAAAnC,GAAAmC,IACAnC,EAAA,IAKAt3B,EAAAye,EAAAomB,UAAApmB,EAAAqmB,SAAA,aAAArmB,EAAAomB,SAAA,KAAApmB,EAAAqmB,SAAA,2BACA9kC,IAAAqjC,EAAA5J,GAAA4J,GAAA5J,EAAA8L,EAAAlC,GAAAiC,GAAAhC,EAAA7J,GAAA6J,GAAA7J,EAAA8L,EAAAjC,GAAAgC,GAAA/B,EAAA9J,GAAA8J,GAAA9J,EAAA8L,EAAAhC,GACAvjC,GAAAslC,GAAA9B,EAAA/J,GAAA+J,GAAA/J,EAAA8L,EAAA/B,GAAA8B,GAAA7B,EAAAhK,GAAAgK,GAAAhK,EAAA8L,EAAA9B,GAAA6B,GAAA5B,EAAAjK,GAAAiK,GAAAjK,EAAA8L,EAAA7B,GACAnM,GAAAC,GAAA,IAAAkO,GACA1lC,GAAAslC,GAAA3B,EAAAlK,GAAAkK,GAAAlK,EAAA8L,EAAA5B,GAAA2B,GAAA1B,EAAAnK,GAAAmK,GAAAnK,EAAA8L,EAAA3B,GAAA0B,GAAAzB,EAAApK,GAAAoK,GAAApK,EAAA8L,EAAA1B,GACA7jC,GAAAslC,GAAAxB,EAAArK,GAAAqK,GAAArK,EAAA8L,EAAAzB,GAAAwB,GAAAvB,EAAAtK,GAAAsK,GAAAtK,EAAA8L,EAAAxB,GAAAuB,GAAAnB,EAAA1K,GAAA0K,GAAA1K,EAAA8L,EAAApB,GAAAmB,GAEAtlC,GAAA,gBAEAA,GAAAkI,EAAAo9B,EAAAl9B,EAAAk9B,EAAAhO,EAAAgO,GAAAnT,EAAA,GAAAmF,EAAAnF,EAAA,OAEAt3B,EAAAm8B,IAAAh3B,EAGApW,GAAAs2C,GAAAp2C,UACAF,EAAAse,EAAAte,EAAAwe,EAAAxe,EAAA0tC,EAAA1tC,EAAAstC,MAAAttC,EAAAk8C,MAAAl8C,EAAA8d,SAAA9d,EAAA2tC,UAAA3tC,EAAA4tC,UAAA5tC,EAAAm5C,QAAAn5C,EAAAi7C,SAAAj7C,EAAAk7C,SAAAl7C,EAAAs4C,QAAAt4C,EAAAu4C,QAAA,EACAv4C,EAAAutC,OAAAvtC,EAAAwtC,OAAAxtC,EAAA6tC,OAAA,EAEAlH,GAAA,8RAA6TC,OAAA,SAAA/R,EAAA51B,EAAAk9C,EAAArV,EAAAnU,EAAA4Q,EAAA9T,GAC7T,GAAAqX,EAAAsV,uBAAA3sB,EAA4C,MAAAkD,EAC5CmU,GAAAsV,qBAAA3sB,CACA,IAAA4sB,EACA,mBAAA5sB,GAAA0sB,KACAE,EAAA5sB,EAAA0sB,GACA1sB,EAAA0sB,GAAAl9C,EAEA,IASAiiC,GAAAvL,EAAA2mB,EAAAC,EAAAC,EAAAl+B,EAAAE,EAAAi+B,EAAAz8C,EATA08C,EAAA7nB,EAAAsS,aACAl2B,EAAA4jB,EAAA5jB,MACA4+B,EAAA,KACA1wC,EAAAi3C,GAAA9qC,OACAstB,EAAAnJ,EACAktB,KACAC,EAAA,kBACA3b,EAAAoM,GAAAxY,EAAA+S,GAAA,EAAAhP,EAAAikB,gBACAC,EAAAlkB,EAAAxiB,YAAA,kBAAAwiB,GAAA,UAAAA,EAAAxiB,UAAA2yB,EAAAnF,GAAAhL,EAAAxiB,UAGA,IADA0wB,EAAAG,WAAAhG,EACA6b,GAAA,oBAAA1P,GACAzX,EAAA8U,EAAAx5B,MACA0kB,EAAAyX,IAAA0P,EACAnnB,EAAAzkB,QAAA,QACAykB,EAAAhX,SAAA,WACA2rB,EAAA75B,KAAAC,YAAA+5B,GACAvJ,EAAAmM,GAAA5C,EAAA,SACAxJ,EAAAiW,MACA54B,EAAA2iB,EAAA2W,QACAp5B,EAAAyiB,EAAA4W,QACA3W,EAAA5iB,GAAA2iB,EAAAqX,QACApX,EAAA1iB,GAAAyiB,EAAAsX,SACA3f,EAAAmkB,iBAAAnkB,EAAAokB,aACAF,KACAxF,GAAAziB,EAAAia,GAAAlW,EAAAmkB,iBAAAD,EAAAlkB,EAAAokB,UAAApkB,EAAA8e,cAAA,GACAp5B,EAAAw+B,EAAAlF,QACAp5B,EAAAs+B,EAAAjF,QACA3W,EAAA5iB,GAAAw+B,EAAAxE,QAAArX,EAAAqX,QACApX,EAAA1iB,GAAAs+B,EAAAvE,QAAAtX,EAAAsX,UAEAj6B,GAAAE,KACAi+B,EAAArE,GAAA3N,GAAA,GACAvJ,EAAA5iB,QAAAm+B,EAAA,GAAAj+B,EAAAi+B,EAAA,IACAvb,EAAA1iB,MAAAF,EAAAm+B,EAAA,GAAAj+B,EAAAi+B,EAAA,MAGAnS,EAAA75B,KAAAoV,YAAA4kB,GACAvJ,EAAAqH,cACArH,EAAAqH,YAAAtH,EAAAsH,aAEA,MAAA3P,EAAAqiB,WACA/Z,EAAA+Z,SAAA1L,GAAA3W,EAAAqiB,SAAAha,EAAAga,WAEA,MAAAriB,EAAAsiB,WACAha,EAAAga,SAAA3L,GAAA3W,EAAAsiB,SAAAja,EAAAia,eAEI,wBAWJ,GAVAha,GAAUqM,OAAAgC,GAAA,MAAA3W,EAAA2U,OAAA3U,EAAA2U,OAAA3U,EAAA/nB,MAAAowB,EAAAsM,QACVC,OAAA+B,GAAA,MAAA3W,EAAA4U,OAAA5U,EAAA4U,OAAA5U,EAAA/nB,MAAAowB,EAAAuM,QACAK,OAAA0B,GAAA3W,EAAAiV,OAAA5M,EAAA4M,QACAvvB,EAAAixB,GAAA3W,EAAAta,EAAA2iB,EAAA3iB,GACAE,EAAA+wB,GAAA3W,EAAApa,EAAAyiB,EAAAziB,GACAkvB,EAAA6B,GAAA3W,EAAA8U,EAAAzM,EAAAyM,GACAuN,SAAA1L,GAAA3W,EAAAqiB,SAAAha,EAAAga,UACAC,SAAA3L,GAAA3W,EAAAsiB,SAAAja,EAAAia,UACA3S,YAAAgH,GAAA3W,EAAAqkB,qBAAAhc,EAAAsH,cACAiU,EAAA5jB,EAAAskB,oBACA,MAAAV,EACA,sBACA,IAAA7mB,IAAA6mB,GACA5jB,EAAAjD,GAAA6mB,EAAA7mB,OAGAiD,GAAA9a,SAAA0+B,CAGA,iBAAA5jB,GAAA,GAAAA,EAAAta,EAAAiM,QAAA,YACA2W,EAAA5iB,EAAA,EACA4iB,EAAA+Z,SAAA1L,GAAA3W,EAAAta,EAAA2iB,EAAAga,WAEA,gBAAAriB,GAAA,GAAAA,EAAApa,EAAA+L,QAAA,YACA2W,EAAA1iB,EAAA,EACA0iB,EAAAga,SAAA3L,GAAA3W,EAAApa,EAAAyiB,EAAAia,WAGAha,EAAApjB,SAAA0xB,GAAA,YAAA5W,KAAA9a,SAAA,iBAAA8a,KAAAukB,cAAA,sBAAAvkB,KAAAwkB,UAAAnc,EAAAnjB,SAAAmjB,EAAAib,MAAAjb,EAAAnjB,SAAAmjB,EAAAib,MAAA,WAAAS,GACAlP,KACAvM,EAAAyM,UAAA6B,GAAA,aAAA5W,KAAA+U,UAAA,kBAAA/U,KAAAykB,eAAA,SAAApc,EAAA0M,WAAA,EAAA1M,EAAA0M,UAAA,YAAAgP,GACAzb,EAAA0M,UAAA4B,GAAA,aAAA5W,KAAAgV,UAAA,kBAAAhV,KAAA0kB,eAAA,SAAArc,EAAA2M,WAAA,EAAA3M,EAAA2M,UAAA,YAAA+O,IAEAzb,EAAAoM,MAAAkC,GAAA5W,EAAA0U,MAAArM,EAAAqM,MAAArM,EAAAib,QAGAhb,EAAAgb,MAAA1M,GAAA5W,EAAAsjB,MAAAjb,EAAAib,UACAhb,EAAAoM,OAAApM,EAAAgb,MACAhb,EAAApjB,UAAAojB,EAAAgb,OAeA,IAZAzO,IAAA,MAAA7U,EAAA2d,UACAtV,EAAAsV,QAAA3d,EAAA2d,QACAgG,GAAA,GAGAtb,EAAA+a,SAAApjB,EAAAojB,UAAA/a,EAAA+a,UAAAzV,EAAAwB,gBAEAuU,EAAArb,EAAAsV,SAAAtV,EAAAyM,GAAAzM,EAAA0M,WAAA1M,EAAA2M,WAAA1M,EAAAwM,GAAAxM,EAAAyM,WAAAzM,EAAA0M,WAAA1M,EAAAqH,YACA+T,GAAA,MAAA1jB,EAAA/nB,QACAqwB,EAAA2M,OAAA,KAGA1uC,MACAa,EAAAo2C,GAAAj3C,GACA29C,EAAA5b,EAAAlhC,GAAAihC,EAAAjhC,IACA88C,EAAAjN,GAAAiN,GAAAjN,GAAA,MAAAjX,EAAA54B,IAAA,MAAAqqC,EAAArqC,MACAu8C,GAAA,EACA5pB,EAAA,GAAA+T,IAAAzF,EAAAjhC,EAAAihC,EAAAjhC,GAAA88C,EAAAnqB,GACA3yB,IAAA28C,KACAhqB,EAAA1zB,EAAA09C,EAAA38C,IAEA2yB,EAAAygB,IAAA,EACAzgB,EAAA4Q,SACAuD,EAAAvC,gBAAAnyB,KAAAugB,EAAAihB,GAgDA,OA5CAkJ,GAAAlkB,EAAAmkB,gBACA9b,EAAAiW,MAAA4F,GAAAlkB,EAAAokB,aACA1+B,EAAA2iB,EAAAqX;AACA95B,EAAAyiB,EAAAsX,QACAjB,GAAAziB,EAAAia,GAAAgO,GAAA5b,EAAAtI,EAAAokB,UAAApkB,EAAA8e,cACA/kB,EAAAmhB,GAAA7S,EAAA,WAAAyb,EAAAzb,EAAAC,GAAA0W,QAAA1W,EAAA0W,QAAAjlB,EAAAiqB,GACAjqB,EAAAmhB,GAAA7S,EAAA,WAAAyb,EAAAzb,EAAAC,GAAA2W,QAAA3W,EAAA2W,QAAAllB,EAAAiqB,GACAt+B,IAAA2iB,EAAAqX,SAAA95B,IAAAyiB,EAAAsX,UACA5lB,EAAAmhB,GAAA7S,EAAA,UAAAyb,EAAAp+B,EAAA2iB,EAAAqX,QAAArX,EAAAqX,QAAA3lB,EAAAiqB,GACAjqB,EAAAmhB,GAAA7S,EAAA,UAAAyb,EAAAl+B,EAAAyiB,EAAAsX,QAAAtX,EAAAsX,QAAA5lB,EAAAiqB,IAEAE,EAAA3G,GAAA,iBAEA2G,GAAArP,IAAA6O,GAAArb,EAAAkY,WACA/L,IACAmP,GAAA,EACAv8C,EAAAq2C,GACAyG,MAAAnR,EAAA9W,EAAA70B,EAAA4nC,GAAA,iBACAjV,EAAA,GAAA+T,IAAAz1B,EAAAjR,EAAA,IAAA2yB,OAAAiqB,GACAjqB,EAAAnyB,EAAAyQ,EAAAjR,GACA2yB,EAAA4Q,SACAkK,IACA9X,EAAAsL,EAAAkY,QACA2D,IAAA13B,MAAA,KACA6b,EAAAkY,SAAA2D,EAAAxxC,OAAA,QAAAqqB,GAAA,QAAAmnB,EAAA,IAAA9+B,WAAA8+B,EAAA,IAAAnnB,IAAA,EACAhD,EAAAygB,IAAAzgB,EAAA1zB,EAAA69C,EAAA,QAAAA,EAAA,kBACAnqB,EAAA,GAAA+T,IAAAzF,EAAA,cAAAtO,SAAAihB,GACAjhB,EAAAnyB,EAAAm1B,EACAhD,EAAAygB,IAAAzgB,EAAA1zB,EAAAgiC,EAAAkY,SAEAxmB,EAAAygB,IAAAzgB,EAAA1zB,EAAA69C,GAKAhO,GAAAgO,EAAA,GAAA7b,IAGAsb,IACAzV,EAAAyW,eAAAtc,EAAAiW,KAAAf,KAAAmG,GAAA,IAAAl9C,KAAAm+C,eAAA,KAEAlB,IACA5sB,EAAA0sB,GAAAE,GAEA1pB,GACGwiB,QAAA,IAEHxO,GAAA,aAA4C5a,aAAA,uBAAAopB,QAAA,EAAArvC,OAAA,EAAAwsC,OAAA,EAAA+C,QAAA,UAE5C1O,GAAA,gBAA+C5a,aAAA,MAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GAC/CtkC,EAAAG,KAAAg2C,OAAAn2C,EACA,IAEAu+C,GAAAr+C,EAAAs+C,EAAAC,EAAAC,EAAAC,EAAAnJ,EAAAoJ,EAAA9C,EAAA3J,EAAA0M,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAFAjc,GAAA,iGACAjxB,EAAA4jB,EAAA5jB,KAKA,KAHA8pC,EAAA/8B,WAAA6W,EAAA+Z,aACAwC,EAAApzB,WAAA6W,EAAAga,cACA2O,EAAAv+C,EAAAmmB,MAAA,KACAjmB,EAAA,EAAcA,EAAA+iC,EAAA52B,OAAkBnM,IAChCC,KAAAY,EAAAuqB,QAAA,YACA2X,EAAA/iC,GAAAqsC,EAAAtJ,EAAA/iC,KAEAw+C,EAAAD,EAAA/R,EAAA9W,EAAAqN,EAAA/iC,GAAAyoC,GAAA,SACA+V,EAAApzB,QAAA,YACAmzB,EAAAC,EAAAv4B,MAAA,KACAu4B,EAAAD,EAAA,GACAA,IAAA,IAEAE,EAAAH,EAAAD,EAAAr+C,GACAs1C,EAAAz2B,WAAA2/B,GACAI,EAAAJ,EAAAriB,QAAAmZ,EAAA,IAAAnpC,QACA0yC,EAAA,MAAAJ,EAAAxiB,OAAA,GACA4iB,GACAH,EAAAvoC,SAAAsoC,EAAAxiB,OAAA,WACAwiB,IAAAtiB,OAAA,GACAuiB,GAAA7/B,WAAA4/B,GACAE,EAAAF,EAAAtiB,QAAAuiB,EAAA,IAAAvyC,QAAAuyC,EAAA,cAEAA,EAAA7/B,WAAA4/B,GACAE,EAAAF,EAAAtiB,QAAAuiB,EAAA,IAAAvyC,SAEA,KAAAwyC,IACAA,EAAAnW,EAAA3nC,IAAA+9C,GAEAD,IAAAC,IACAE,EAAAhS,GAAApX,EAAA,aAAA4f,EAAAsJ,GACAG,EAAAjS,GAAApX,EAAA,YAAA4f,EAAAsJ,GACA,MAAAD,GACAH,EAAAM,EAAAlD,EAAA,QACA2C,EAAAQ,EAAA9M,EAAA,SACM,OAAA0M,GACNK,EAAAlS,GAAApX,EAAA,qBACA8oB,EAAAM,EAAAE,EAAA,KACAT,EAAAQ,EAAAC,EAAA,OAEAR,EAAAM,EAAA,KACAP,EAAAQ,EAAA,MAEAF,IACAJ,EAAA5/B,WAAA2/B,GAAAE,EAAAC,EACAL,EAAAz/B,WAAA0/B,GAAAG,EAAAC,IAGAnrB,EAAAqhB,GAAA/iC,EAAAixB,EAAA/iC,GAAAw+C,EAAA,IAAAD,EAAAE,EAAA,IAAAH,GAAA,QAAA9qB,EAEA,OAAAA,IACGwiB,QAAA,EAAA5C,UAAAJ,GAAA,2BACHxL,GAAA,2FAA0H5a,aAAA,MAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GAC1H,MAAAyQ,IAAAnf,EAAA5jB,MAAAjR,EAAAZ,KAAAg2C,OAAAzJ,EAAA9W,EAAA70B,EAAA4nC,GAAA,cAAAxoC,KAAAg2C,OAAAn2C,IAAA,QAAA0zB,IACGwiB,QAAA,EAAA5C,UAAAJ,GAAA,mBACHxL,GAAA,sBAAqD5a,aAAA,MAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GACrD,GAIA5D,GAAAkV,EAAA11C,EAAAi/C,EAAAC,EAAAC,EAJAC,EAAA,sBACA1S,EAAAjE,GAAA6D,EAAA5W,EAAA,MACA8oB,EAAAv+C,KAAAg2C,QAAA,EAAAtM,EAAA+C,EAAAp2B,iBAAA8oC,EAAA,UAAA1S,EAAAp2B,iBAAA8oC,EAAA,MAAA1S,EAAAp2B,iBAAA8oC,GAAA1pB,EAAAqW,aAAAsT,oBAAA,IAAA3pB,EAAAqW,aAAAuT,sBAAA,OACAb,EAAAx+C,KAAAg2C,OAAAn2C,EAEA,IAAA0+C,EAAApzB,QAAA,YAAAqzB,EAAArzB,QAAA,YAAAqzB,EAAAx4B,MAAA,KAAA9Z,OAAA,IACAgzC,EAAA3S,EAAA9W,EAAA,mBAAAroB,QAAAm9B,EAAA,IACA2U,GAAA,SAAAA,GAAA,CAKA,IAJA3e,EAAAge,EAAAv4B,MAAA,KACAyvB,EAAA+I,EAAAx4B,MAAA,KACAslB,EAAAh/B,aAAA,MAAA4yC,GACAn/C,EAAA,IACAA,MACAw+C,EAAAhe,EAAAxgC,GACAi/C,EAAAT,EAAApzB,QAAA,UACA6zB,KAAAvJ,EAAA11C,GAAAorB,QAAA,aACA8zB,EAAA,IAAAl/C,EAAA01B,EAAA+Z,YAAAlE,EAAA3kC,MAAA8uB,EAAAga,aAAAnE,EAAA1kC,OACA25B,EAAAxgC,GAAAi/C,EAAApgC,WAAA2/B,GAAA,IAAAU,EAAA,KAAArgC,WAAA2/B,GAAAU,EAAA,QAGAV,GAAAhe,EAAA9G,KAAA,KAGA,MAAAz5B,MAAA60C,aAAApf,EAAA5jB,MAAA0sC,EAAAC,EAAAjrB,EAAA4Q,IACGgP,UAAAzD,KACHnI,GAAA,kBAAiD5a,aAAA,MAAAwmB,UAAA,SAAA3Z,GAEjD,MADAA,IAAA,GACAkW,GAAAlW,EAAArO,QAAA,UAAAqO,EAAA,IAAAA,QAEA+N,GAAA,eAA8C5a,aAAA,MAAAopB,QAAA,IAC9CxO,GAAA,qBAAoD5a,aAAA,UAAAopB,QAAA,IACpDxO,GAAA,kBAAiDwO,QAAA,IACjDxO,GAAA,sBAAqDwO,QAAA,IACrDxO,GAAA,cAA6CwO,QAAA,IAC7CxO,GAAA,UAAyCC,OAAAmM,GAAA,mDACzCpM,GAAA,WAA0CC,OAAAmM,GAAA,uDAC1CpM,GAAA,QAAuC5a,aAAA,wBAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GACvC,GAAA/iC,GAAAqrC,EAAA8G,CAUA,OATA7J,GAAA,GACA+C,EAAAhX,EAAAqW,aACAyH,EAAA7J,EAAA,UACAtoC,EAAA,QAAAqrC,EAAA6S,QAAA/L,EAAA9G,EAAA8S,UAAAhM,EAAA9G,EAAA+S,WAAAjM,EAAA9G,EAAAgT,SAAA,IACA5/C,EAAAG,KAAAg2C,OAAAn2C,GAAAmmB,MAAA,KAAAyT,KAAA8Z,KAEAnyC,EAAApB,KAAAg2C,OAAAzJ,EAAA9W,EAAAz1B,KAAAY,EAAA4nC,GAAA,EAAAxoC,KAAA2sC,OACA9sC,EAAAG,KAAAg2C,OAAAn2C,IAEAG,KAAA60C,aAAApf,EAAA5jB,MAAAzQ,EAAAvB,EAAA0zB,EAAA4Q,MAEAoD,GAAA,cAA6C5a,aAAA,mBAAAjmB,OAAA,EAAAwsC,OAAA,IAC7C3L,GAAA,yBAAwDC,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,GAAoC,MAAAA,MAC5FgU,GAAA,UAAyC5a,aAAA,iBAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GACzC,GAAAub,GAAAnT,EAAA9W,EAAA,iBAAA+S,GAAA,SACAvK,EAAAj+B,KAAAg2C,OAAAn2C,GAAAmmB,MAAA,KACA04B,EAAAzgB,EAAA,GAAA7wB,QAAA48B,EAAA,GAIA,OAHA,OAAA0U,IACAgB,EAAA9gC,WAAA8gC,GAAA7S,GAAApX,EAAA,mBAAAipB,MAEA1+C,KAAA60C,aAAApf,EAAA5jB,MAAA7R,KAAAg2C,OAAA0J,EAAA,IAAAnT,EAAA9W,EAAA,iBAAA+S,GAAA,eAAA+D,EAAA9W,EAAA,iBAAA+S,GAAA,WAAAvK,EAAAxE,KAAA,KAAAlG,EAAA4Q,IACIz9B,OAAA,EAAAysC,UAAA,SAAA3Z,GACJ,GAAA15B,GAAA05B,EAAAxT,MAAA,IACA,OAAAlmB,GAAA,QAAAA,EAAA,kBAAA05B,EAAAnsB,MAAAmlC,MAAA,eAEAjL,GAAA,eAA8CC,OAAAmM,GAAA,uEAC9CpM,GAAA,6BAA4DC,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GAC5D,GAAA9rB,GAAAod,EAAA5jB,MACA41B,EAAA,YAAApvB,GAAA,uBACA,WAAAivB,IAAAjvB,EAAAovB,EAAA,IAAAlU,OAAA3yB,IAAA,KAAAyX,EAAAovB,GAAA5nC,KAIA,IAAA8/C,IAAA,SAAAnmB,GACA,GAGAomB,GAHAnqB,EAAAz1B,KAAAy1B,EACAiZ,EAAAjZ,EAAAsW,QAAAQ,EAAAvsC,KAAAssB,KAAA,cACAhf,EAAAtN,KAAAqY,EAAArY,KAAAW,EAAA64B,EAAA,CAEA,OAAAlsB,IACAohC,EAAAvjB,QAAA,gBAAAujB,EAAAvjB,QAAA,kBAAAujB,EAAAvjB,QAAA,gBACAsK,EAAA6lB,gBAAA,UACAsE,GAAArT,EAAAvsC,KAAAssB,KAAA,YAEAmJ,EAAAsW,OAAA2C,EAAAthC,QAAA+8B,EAAA,IACAyV,GAAA,IAGAA,IACA5/C,KAAA6/C,MACApqB,EAAAsW,OAAA2C,KAAA,iBAAAphC,EAAA,KAEAohC,EAAAvjB,QAAA,eACA,IAAA7d,GAAAtN,KAAA6/C,MACApqB,EAAAsW,OAAA2C,EAAA,kBAAAphC,EAAA,KAGAmoB,EAAAsW,OAAA2C,EAAAthC,QAAA68B,EAAA,WAAA38B,IAIAi6B,IAAA,2BAA0D5a,aAAA,IAAA6a,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,GAC1D,GAAA/iC,GAAAwd,WAAA2tB,EAAA9W,EAAA,UAAA+S,GAAA,QACA32B,EAAA4jB,EAAA5jB,MACAiuC,EAAA,cAAAl/C,CA0BA,OAzBA,0BAAAf,EAAAm8B,OAAA,KACAn8B,GAAA,MAAAA,EAAAm8B,OAAA,SAAApd,WAAA/e,EAAAq8B,OAAA,IAAA96B,GAEA0+C,GAAA,IAAA1+C,GAAA,WAAAmrC,EAAA9W,EAAA,aAAA+S,IAAA,IAAA3oC,IACAuB,EAAA,GAEAoqC,EACAjY,EAAA,GAAA+T,IAAAz1B,EAAA,UAAAzQ,EAAAvB,EAAAuB,EAAAmyB,IAEAA,EAAA,GAAA+T,IAAAz1B,EAAA,cAAAzQ,EAAA,KAAAvB,EAAAuB,GAAAmyB,GACAA,EAAAssB,IAAAC,EAAA,IACAjuC,EAAAkuC,KAAA,EACAxsB,EAAAQ,KAAA,EACAR,EAAAnyB,EAAA,iBAAAmyB,EAAAlb,EAAA,IACAkb,EAAA1zB,EAAA,kBAAA0zB,EAAAlb,EAAAkb,EAAA5yB,GAAA,IACA4yB,EAAAjH,KAAAmJ,EACAlC,EAAA4Q,SACA5Q,EAAAqU,SAAA+X,IAEAG,IACAvsB,EAAA,GAAA+T,IAAAz1B,EAAA,iBAAA0hB,OAAA,gBAAAnyB,EAAA,uBAAAvB,EAAA,oBACA0zB,EAAAygB,IAAA,UACAtM,EAAAvC,gBAAAnyB,KAAAugB,EAAAihB,GACA9M,EAAAvC,gBAAAnyB,KAAApS,IAEA2yB,IAIA,IAAAomB,IAAA,SAAAthC,EAAAzX,GACAA,IACAyX,EAAA2nC,gBACA,OAAAp/C,EAAAs7B,OAAA,iBAAAt7B,EAAAs7B,OAAA,OACAt7B,EAAA,IAAAA,GAEAyX,EAAA2nC,eAAAp/C,EAAAwM,QAAAi9B,EAAA,OAAAz/B,gBAEAyN,EAAAijC,gBAAA16C,KAIAq/C,GAAA,SAAAzmB,GAEA,GADAx5B,KAAAy1B,EAAAyqB,WAAAlgD,KACA,IAAAw5B,GAAA,IAAAA,EAAA,CACAx5B,KAAAy1B,EAAAnpB,aAAA,YAAAktB,EAAAx5B,KAAAoB,EAAApB,KAAAH,EAGA,KAFA,GAAAkvC,GAAA/uC,KAAAssB,KACAjU,EAAArY,KAAAy1B,EAAA5jB,MACAk9B,GACAA,EAAAvV,EAGAnhB,EAAA02B,EAAAnuC,GAAAmuC,EAAAvV,EAFAmgB,GAAAthC,EAAA02B,EAAAnuC,GAIAmuC,IAAAvb,KAEA,KAAAgG,GAAAx5B,KAAAy1B,EAAAyqB,aAAAlgD,OACAA,KAAAy1B,EAAAyqB,WAAA,UAEKlgD,MAAAy1B,EAAA5W,aAAA,WAAA7e,KAAAH,GACLG,KAAAy1B,EAAAnpB,aAAA,QAAAtM,KAAAH,GAGA0nC,IAAA,aAA4CC,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,EAAA4Q,EAAA9T,GAC5C,GAEA8vB,GAAA5B,EAAA6B,EAAAC,EAAAtR,EAFA3tC,EAAAq0B,EAAA5W,aAAA,aACA8sB,EAAAlW,EAAA5jB,MAAA85B,OAUA,IARApY,EAAAmU,EAAA4Y,aAAA,GAAAhZ,IAAA7R,EAAA70B,EAAA,IAAA2yB,EAAA,GACAA,EAAAqU,SAAAqY,GACA1sB,EAAAkhB,OACAnM,GAAA,EACA/U,EAAAnyB,IACAm9C,EAAA1Q,GAAApY,EAAA+S,GAEA4X,EAAA3qB,EAAAyqB,WACA,CAGA,IAFAG,KACAtR,EAAAqR,EAAA9zB,KACAyiB,GACAsR,EAAAtR,EAAAnuC,GAAA,EACAmuC,IAAAvb,KAEA4sB,GAAAxY,SAAA,GAUA,MARAnS,GAAAyqB,WAAA3sB,EACAA,EAAA1zB,EAAA,MAAAA,EAAAm8B,OAAA,GAAAn8B,EAAAuB,EAAAgM,QAAA,GAAAq+B,QAAA,YAAA5rC,EAAAq8B,OAAA,4BAAAr8B,EAAAm8B,OAAA,OAAAn8B,EAAAq8B,OAAA,OACAzG,EAAAnpB,aAAA,QAAAinB,EAAA1zB,GACAsgD,EAAAxR,GAAAlZ,EAAA8oB,EAAA1Q,GAAApY,GAAApF,EAAAgwB,GACA5qB,EAAAnpB,aAAA,QAAAlL,GACAmyB,EAAAjH,KAAA6zB,EAAAjR,SACAzZ,EAAA5jB,MAAA85B,UACApY,IAAAqiB,OAAAlO,EAAAkM,MAAAne,EAAA0qB,EAAAnR,KAAAzb,EAAA4Q,KAKA,IAAAoc,IAAA,SAAA/mB,GACA,QAAAA,GAAA,IAAAA,IAAAx5B,KAAAssB,KAAA6G,aAAAnzB,KAAAssB,KAAA8H,gBAAA,gBAAAp0B,KAAAssB,UAAA,CACA,GAEAxsB,GAAAc,EAAAb,EAAAygD,EAAAxpC,EAFAqB,EAAArY,KAAAy1B,EAAA5jB,MACA4uC,EAAAhY,EAAAzxB,UAAA48B,KAEA,YAAA5zC,KAAAH,EACAwY,EAAAszB,QAAA,GACA6U,GAAA,MAIA,KAFA1gD,EAAAE,KAAAH,EAAAmmB,MAAA,KAAAyT,KAAA,IAAAzT,MAAA,KACAjmB,EAAAD,EAAAoM,SACAnM,MACAa,EAAAd,EAAAC,GACA0oC,EAAA7nC,KACA6nC,EAAA7nC,GAAAgzC,QAAA6M,EACAD,GAAA,EAEA5/C,EAAA,oBAAAA,EAAAq2C,GAAAxO,EAAA7nC,MAGA+4C,GAAAthC,EAAAzX,EAGA4/C,KACA7G,GAAAthC,EAAA21B,IACAh3B,EAAAhX,KAAAy1B,EAAAsS,aACA/wB,IACAA,EAAA8gC,MACA93C,KAAAy1B,EAAA6lB,gBAAA,mBACAt7C,KAAAy1B,EAAA6lB,gBAAA,oBAEAt7C,MAAAy1B,EAAAsS,gBAkBA,KAZAR,GAAA,cAA6CC,OAAA,SAAA/R,EAAA51B,EAAAe,EAAA8mC,EAAAnU,GAO7C,MANAA,GAAA,GAAA+T,IAAA7R,EAAA70B,EAAA,IAAA2yB,EAAA,GACAA,EAAAqU,SAAA2Y,GACAhtB,EAAA1zB,IACA0zB,EAAAkhB,OACAlhB,EAAAjH,KAAAob,EAAAQ,OACAI,GAAA,EACA/U,KAGA3yB,EAAA,2CAAAolB,MAAA,KACAjmB,GAAAa,EAAAsL,OACAnM,MACAo2C,GAAAv1C,EAAAb,IAUAa,GAAAumC,EAAArmC,UACAF,EAAAmyB,SAAAnyB,EAAAo8C,qBAAAp8C,EAAAinC,WAAA,KAGAjnC,EAAAqnC,aAAA,SAAAl9B,EAAAslB,EAAA9K,EAAAoe,GACA,IAAA54B,EAAA21C,SACA,QAEA1gD,MAAAwkC,UAAAz5B,EACA/K,KAAAkoC,OAAA3iB,EACAvlB,KAAA2gD,MAAAtwB,EACAsZ,EAAAhG,EACA0F,EAAAhZ,EAAAqlB,UACApN,GAAA,EACAC,EAAAlY,EAAAwY,WAAA1B,EAAA0B,UACAL,EAAA6D,EAAAthC,EAAA,IACAo6B,EAAAnlC,KAAAmlC,eACA,IACA3L,GAAAjG,EAAAqtB,EAAA7d,EAAA3H,EAAA9R,EAAAu3B,EAAAC,EAAAC,EADAlvC,EAAA9G,EAAA8G,KA4BA,IA1BAy3B,GAAA,KAAAz3B,EAAAgvC,SACArnB,EAAA+S,EAAAxhC,EAAA,SAAAy9B,GACA,SAAAhP,GAAA,KAAAA,GAEAx5B,KAAAghD,YAAAnvC,EAAA,aAIA,qBACAkxB,EAAAlxB,EAAA85B,QACAnS,EAAAqU,GAAA9iC,EAAAy9B,GACA32B,EAAA85B,QAAA5I,EAAA,IAA8B1S,EAC9BmJ,EAAAmV,GAAA5jC,EAAAyuB,EAAAqU,GAAA9iC,IAAAikC,MACAxD,GAAAtB,EAAAx2B,KAAA2c,KACAmJ,EAAAoS,QAAAhtB,WAAA6sB,OAAAC,KAEArb,EAAAmJ,EACA3nB,EAAA85B,QAAA5I,GAGA1S,EAAA4wB,UACAjhD,KAAA+yB,SAAAQ,EAAAkV,EAAAwY,UAAArN,MAAA7oC,EAAAslB,EAAA4wB,UAAA,YAAAjhD,KAAA,UAAAqwB,GAEArwB,KAAA+yB,SAAAQ,EAAAvzB,KAAA4zC,MAAA7oC,EAAAslB,EAAA,MAGArwB,KAAAm+C,eAAA,CAuBA,IAtBA4C,EAAA,IAAA/gD,KAAAm+C,eACAnQ,GAEKzE,IACLD,GAAA,EAEA,KAAAz3B,EAAAgvC,SACAA,EAAAtU,EAAAxhC,EAAA,SAAAy9B,GACA,SAAAqY,GAAA,KAAAA,GACA7gD,KAAAghD,YAAAnvC,EAAA,aAQA43B,GACAzpC,KAAAghD,YAAAnvC,EAAA,2BAAA7R,KAAA2gD,MAAAO,2BAAAH,EAAA,sBAhBAlvC,EAAAkuC,KAAA,EAmBAa,EAAArtB,EACAqtB,KAAAptB,OACAotB,IAAAptB,KAEAstB,GAAA,GAAAxZ,IAAAv8B,EAAA,wBACA/K,KAAAmhD,UAAAL,EAAA,KAAAF,GACAE,EAAAlZ,SAAAoG,GAAAmO,GAAAZ,GACAuF,EAAAx0B,KAAAtsB,KAAA6nC,YAAAoG,GAAAljC,EAAAy9B,GAAA,GACAsY,EAAAv7B,QACAu7B,EAAArM,MACAtP,EAAAic,MAGA,GAAA9Y,EAAA,CAEA,KAAA/U,GAAA,CAGA,IAFAjK,EAAAiK,EAAAC,MACAotB,EAAA7d,EACA6d,KAAAnM,GAAAlhB,EAAAkhB,IACAmM,IAAAptB,OAEAD,EAAAsJ,MAAA+jB,IAAA/jB,MAAAzB,GACA7H,EAAAsJ,MAAArJ,MAAAD,EAEAwP,EAAAxP,GAEAA,EAAAC,MAAAotB,GACAA,EAAA/jB,MAAAtJ,EAEA6H,EAAA7H,EAEAA,EAAAjK,EAEAtpB,KAAA+yB,SAAAgQ,EAEA,UAIAniC,EAAAgzC,MAAA,SAAA7oC,EAAAslB,EAAAkD,EAAA4Q,GACA,GACAvjC,GAAAygD,EAAAhM,EAAAoJ,EAAAF,EAAAC,EAAAG,EAAAD,EAAA4C,EAAA1C,EADA/sC,EAAA9G,EAAA8G,KAEA,KAAAjR,IAAAyvB,GACAmuB,EAAAnuB,EAAAzvB,GACA,uBACA49C,IAAA7U,EAAAnF,IAEA6c,EAAA5Y,EAAA7nC,GACAygD,EACA9tB,EAAA8tB,EAAAzN,MAAA7oC,EAAAyzC,EAAA59C,EAAAZ,KAAAuzB,EAAA4Q,EAAA9T,IAGAkuB,EAAAhS,EAAAxhC,EAAAnK,EAAA4nC,GAAA,GACA8Y,EAAA,mBACA,UAAA1gD,GAAA,SAAAA,GAAA,WAAAA,KAAAuqB,QAAA,eAAAm2B,GAAAlX,EAAA12B,KAAA8qC,IACA8C,IACA9C,EAAAvM,GAAAuM,GACAA,KAAAtyC,OAAA,kBAAAsyC,EAAA/kB,KAAA,UAEAlG,EAAAqhB,GAAA/iC,EAAAjR,EAAA29C,EAAAC,GAAA,gBAAAjrB,EAAA,EAAA4Q,IAEMmd,GAAAvW,EAAAr3B,KAAA8qC,GACNjrB,EAAAqhB,GAAA/iC,EAAAjR,EAAA29C,EAAAC,GAAA,OAAAjrB,EAAA,EAAA4Q,IAGAkR,EAAAz2B,WAAA2/B,GACAI,EAAAtJ,GAAA,IAAAA,EAAAkJ,EAAAriB,QAAAmZ,EAAA,IAAAnpC,QAAA,GAEA,KAAAqyC,GAAA,SAAAA,IACA,UAAA39C,GAAA,WAAAA,GACAy0C,EAAAhG,GAAAtkC,EAAAnK,EAAA4nC,GACAmW,EAAA,MACQ,SAAA/9C,GAAA,QAAAA,GACRy0C,EAAA3H,GAAA3iC,EAAAnK,EAAA4nC,GACAmW,EAAA,OAEAtJ,EAAA,YAAAz0C,EAAA,IACA+9C,EAAA,KAIAC,EAAA0C,GAAA,MAAA9C,EAAAxiB,OAAA,GACA4iB,GACAH,EAAAvoC,SAAAsoC,EAAAxiB,OAAA,WACAwiB,IAAAtiB,OAAA,GACAuiB,GAAA7/B,WAAA4/B,GACAE,EAAAF,EAAApxC,QAAA48B,EAAA,MAEAyU,EAAA7/B,WAAA4/B,GACAE,EAAA4C,EAAA9C,EAAApxC,QAAA48B,EAAA,QAGA,KAAA0U,IACAA,EAAA99C,IAAA2nC,KAAA3nC,GAAA+9C,GAGAH,EAAAC,GAAA,IAAAA,GAAAG,EAAAH,EAAApJ,EAAAoJ,GAAAC,EAAAruB,EAAAzvB,GAGA+9C,IAAAD,GAAA,KAAAA,IAAAD,GAAA,IAAAA,IAAApJ,IACAA,EAAAxI,GAAA9hC,EAAAnK,EAAAy0C,EAAAsJ,GACA,MAAAD,GACArJ,GAAAxI,GAAA9hC,EAAAnK,EAAA,aACAyvB,EAAAkxB,eAAA,IACAhD,EAAAlJ,EAAA,MAGQ,OAAAqJ,GAAA,QAAAA,GAAA,OAAAA,GAAA,OAAAA,EACRrJ,GAAAxI,GAAA9hC,EAAAnK,EAAA,EAAA89C,GAGQ,OAAAA,IACRD,EAAA5R,GAAA9hC,EAAAnK,EAAA69C,EAAAC,GACAA,EAAA,MAEAE,IAAAH,GAAA,IAAAA,KACAD,EAAAC,EAAApJ,EAAAqJ,IAIAE,IACAH,GAAApJ,IAGAA,GAAA,IAAAA,IAAAoJ,GAAA,IAAAA,EAIOzzB,SAAAnZ,EAAAjR,KAAA49C,KAAA,iBAAAA,IAGPjrB,EAAA,GAAA+T,IAAAz1B,EAAAjR,EAAA69C,GAAApJ,GAAA,IAAA9hB,OAAA3yB,IAAA,KAAA29C,EAAAC,GACAjrB,EAAAygB,IAAA,SAAAwK,GAAA,YAAA59C,KAAAuqB,QAAA,cAAAqzB,EAAAD,GAHAvS,EAAA,WAAAprC,EAAA,iBAAAyvB,EAAAzvB,KAJA2yB,EAAA,GAAA+T,IAAAz1B,EAAAjR,EAAAy0C,EAAAoJ,EAAApJ,EAAA9hB,EAAA,EAAA3yB,EAAAyoC,KAAA,WAAAqV,GAAA,WAAA99C,GAAA,EAAA29C,EAAAC,GACAjrB,EAAAygB,IAAA0K,KAWAva,GAAA5Q,MAAA4Q,SACA5Q,EAAA4Q,SAGA,OAAA5Q,IAKA3yB,EAAAgnC,SAAA,SAAApO,GACA,GAEAlsB,GAAAumC,EAAA9zC,EAFAwzB,EAAAvzB,KAAA+yB,SACA0d,EAAA,IAGA,QAAAjX,GAAAx5B,KAAAkoC,OAAAzV,QAAAzyB,KAAAkoC,OAAAjV,WAAA,IAAAjzB,KAAAkoC,OAAAzV,MAwBI,GAAA+G,GAAAx5B,KAAAkoC,OAAAzV,QAAAzyB,KAAAkoC,OAAAjV,WAAA,IAAAjzB,KAAAkoC,OAAAzV,OAAAzyB,KAAAkoC,OAAA1T,qBACJ,KAAAjB,GAAA,CAOA,GANAjmB,EAAAimB,EAAA5yB,EAAA64B,EAAAjG,EAAAlb,EACAkb,EAAAxX,EACAzO,EAAAyR,KAAA+0B,MAAAxmC,GACMA,EAAAmjC,GAAAnjC,GAAAmjC,IACNnjC,EAAA,GAEAimB,EAAAQ,KAEM,OAAAR,EAAAQ,KAEN,GADAh0B,EAAAwzB,EAAApD,EACA,IAAApwB,EACAwzB,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IAAA1gB,EAAAssB,IAAAtsB,EAAAiuB,QACO,QAAAzhD,EACPwzB,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IAAA1gB,EAAAssB,IAAAtsB,EAAAiuB,IAAAjuB,EAAAkuB,IAAAluB,EAAAmuB,QACO,QAAA3hD,EACPwzB,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IAAA1gB,EAAAssB,IAAAtsB,EAAAiuB,IAAAjuB,EAAAkuB,IAAAluB,EAAAmuB,IAAAnuB,EAAAouB,IAAApuB,EAAAquB,QACO,QAAA7hD,EACPwzB,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IAAA1gB,EAAAssB,IAAAtsB,EAAAiuB,IAAAjuB,EAAAkuB,IAAAluB,EAAAmuB,IAAAnuB,EAAAouB,IAAApuB,EAAAquB,IAAAruB,EAAAsuB,IAAAtuB,EAAAuuB,QACO,CAEP,IADAjO,EAAAtgB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IACAl0C,EAAA,EAAkBA,EAAAwzB,EAAApD,EAAUpwB,IAC5B8zC,GAAAtgB,EAAA,KAAAxzB,GAAAwzB,EAAA,MAAAxzB,EAAA,GAEAwzB,GAAAkC,EAAAlC,EAAA3yB,GAAAizC,MAGMtgB,GAAAQ,UACNR,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAygB,IAEMzgB,EAAAqU,UACNrU,EAAAqU,SAAApO,OAvBAjG,GAAAkC,EAAAlC,EAAA3yB,GAAA0M,EAAAimB,EAAAygB,GAyBAzgB,KAAAC,UAKA,MAAAD,GACA,IAAAA,EAAAQ,KACAR,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAnyB,EAEAmyB,EAAAqU,SAAApO,GAEAjG,IAAAC,UApEA,MAAAD,GAAA,CACA,OAAAA,EAAAQ,KACA,GAAAR,EAAAxX,GAAAwX,EAAAQ,UAEA,GADAzmB,EAAAyR,KAAA+0B,MAAAvgB,EAAAlb,EAAAkb,EAAA5yB,GACA4yB,EAAAQ,MAEQ,OAAAR,EAAAQ,KAAA,CAGR,IAFAh0B,EAAAwzB,EAAApD,EACA0jB,EAAAtgB,EAAAygB,IAAA1mC,EAAAimB,EAAA0gB,IACAl0C,EAAA,EAAmBA,EAAAwzB,EAAApD,EAAUpwB,IAC7B8zC,GAAAtgB,EAAA,KAAAxzB,GAAAwzB,EAAA,MAAAxzB,EAAA,GAEAwzB,GAAAkC,EAAAlC,EAAA3yB,GAAAizC,OAPAtgB,GAAAkC,EAAAlC,EAAA3yB,GAAA0M,EAAAimB,EAAAygB,QAUAzgB,GAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA1zB,MAGA0zB,GAAAqU,SAAApO,EAEAjG,KAAAC,QAgEA5yB,EAAAknC,kBAAA,SAAAiZ,GACA/gD,KAAA6nC,WAAA7nC,KAAA6nC,YAAAoG,GAAAjuC,KAAAwkC,QAAAgE,GAAA,GACAxoC,KAAAm+C,eAAAn+C,KAAA6nC,WAAAiQ,KAAAf,KAAAgK,GAAA,IAAA/gD,KAAAm+C,eAAA,IAGA,IAAA4D,IAAA,SAAAvoB,GACAx5B,KAAAy1B,EAAAz1B,KAAAY,GAAAZ,KAAAH,EACAG,KAAAssB,KAAA60B,UAAAnhD,UAAAwzB,MAAA,SAGA5yB,GAAAogD,YAAA,SAAAvrB,EAAA70B,EAAA44B,GACA,GAAAjG,GAAAvzB,KAAA+yB,SAAA,GAAAuU,IAAA7R,EAAA70B,EAAA,IAAAZ,KAAA+yB,SAAA,EACAQ,GAAA1zB,EAAA25B,EACAjG,EAAAqU,SAAAma,GACAxuB,EAAAjH,KAAAtsB,MAIAY,EAAAugD,UAAA,SAAA5tB,EAAAjK,EAAA0U,EAAA7mB,GAsBA,MArBAoc,KACAjK,IACAA,EAAAuT,MAAAtJ,GAEAA,EAAAC,QACAD,EAAAC,MAAAqJ,MAAAtJ,EAAAsJ,OAEAtJ,EAAAsJ,MACAtJ,EAAAsJ,MAAArJ,MAAAD,EAAAC,MACKxzB,KAAA+yB,WAAAQ,IACLvzB,KAAA+yB,SAAAQ,EAAAC,MACArc,GAAA,GAEA6mB,EACAA,EAAAxK,MAAAD,EACKpc,GAAA,OAAAnX,KAAA+yB,WACL/yB,KAAA+yB,SAAAQ,GAEAA,EAAAC,MAAAlK,EACAiK,EAAAsJ,MAAAmB,GAEAzK,GAGA3yB,EAAA8jC,KAAA,SAAAyD,GAEA,IADA,GAAA5U,GAAAvzB,KAAA+yB,SACAQ,GACA,kBAAA4U,GAAA5U,EAAA3yB,IAAAunC,EAAA5U,EAAA3yB,KAAAme,KAAA+0B,QACAvgB,EAAAxX,EAAA,GAEAwX,IAAAC,OAKA5yB,EAAA88B,MAAA,SAAAyK,GACA,GACA5U,GAAA3yB,EAAAg1C,EADArf,EAAA4R,CAEA,IAAAA,EAAA6Z,WAAA7Z,EAAAhqB,MAAA,CACAoY,IACA,KAAA31B,IAAAunC,GACA5R,EAAA31B,GAAAunC,EAAAvnC,EAEA21B,GAAAqV,QAAA,EACArV,EAAAyrB,YACAzrB,EAAA0rB,WAAA,GAgBA,IAbA9Z,EAAA8Y,YAAA1tB,EAAAvzB,KAAAsgD,gBACA1K,EAAAriB,EAAAqiB,OACAA,KAAA/Y,MACA78B,KAAAmhD,UAAAvL,EAAA/Y,MAAAtJ,EAAAC,MAAAoiB,EAAA/Y,aACK+Y,IAAA51C,KAAA+yB,WACL/yB,KAAA+yB,SAAAQ,EAAAC,OAEAD,EAAAC,OACAxzB,KAAAmhD,UAAA5tB,EAAAC,MAAAD,EAAAC,YAAAoiB,EAAA/Y,OAEA78B,KAAAsgD,aAAA,MAEA/sB,EAAAvzB,KAAA+yB,SACAQ,GACAA,EAAA4Q,QAAA5Q,EAAA4Q,SAAAvjC,GAAA2yB,EAAA4Q,OAAAzG,QACAnK,EAAA4Q,OAAAzG,MAAAyK,GACAvnC,EAAA2yB,EAAA4Q,QAEA5Q,IAAAC,KAEA,OAAA6U,GAAAvnC,UAAA48B,MAAAj9B,KAAAT,KAAAu2B,GAMA,IAAA2rB,IAAA,SAAAriD,EAAAijC,EAAAxS,GACA,GAAAnT,GAAApd,EAAA86B,EAAA9G,CACA,IAAAl0B,EAAAqB,MAEA,IADAnB,EAAAF,EAAAqM,SACAnM,MACAmiD,GAAAriD,EAAAE,GAAA+iC,EAAAxS,OAMA,KAFAnT,EAAAtd,EAAAsiD,WACApiD,EAAAod,EAAAjR,SACAnM,MACA86B,EAAA1d,EAAApd,GACAg0B,EAAA8G,EAAA9G,KACA8G,EAAAhpB,QACAixB,EAAA9vB,KAAA66B,GAAAhT,IACAvK,GACAA,EAAAtd,KAAA6nB,IAGA,IAAA9G,GAAA,IAAAA,GAAA,KAAAA,IAAA8G,EAAAsnB,WAAAj2C,QACAg2C,GAAArnB,EAAAiI,EAAAxS,GA0DA,OAnCA6W,GAAAib,UAAA,SAAAr3C,EAAAwO,EAAA8W,GACA,GAMAtwB,GAAAivC,EAAApuC,EAAA+0B,EANApQ,EAAA0I,EAAAR,GAAA1iB,EAAAwO,EAAA8W,GACAgyB,GAAA98B,GACAnkB,KACAvB,KACAywB,KACAgyB,EAAAr0B,EAAAmD,WAAAmxB,aASA,KAPAx3C,EAAAwa,EAAAi9B,UAAAj9B,EAAAxa,OACAm3C,GAAAn3C,EAAA3J,EAAAkvB,GACA/K,EAAAlT,OAAAkH,GAAA,MACA2oC,GAAAn3C,EAAAlL,GACA0lB,EAAAlT,OAAA,SACAkT,EAAAmN,UAAA,GACA3yB,EAAAuwB,EAAApkB,SACAnM,MAEA,GADAivC,EAAAL,GAAAre,EAAAvwB,GAAAqB,EAAArB,GAAAF,EAAAE,IACAivC,EAAAE,SAAA,CACAF,QACA,KAAApuC,IAAAyvB,GACAiyB,EAAA1hD,KACAouC,EAAApuC,GAAAyvB,EAAAzvB,GAGA+0B,KACA,KAAA/0B,IAAAouC,GACArZ,EAAA/0B,GAAAQ,EAAArB,GAAAa,EAEAyhD,GAAArvC,KAAAib,EAAA4H,OAAAvF,EAAAvwB,GAAAwZ,EAAAoc,EAAAqZ,IAGA,MAAAqT,IAGAha,EAAAoa,UAAAtb,IACAA,IAEE,GAiBF,WAEA,GAAAub,GAAA7yB,EAAAE,UAAAoU,QACAC,SAAA,aACA3S,QAAA,QACA4S,YACAC,IAAA,EAGAC,KAAA,SAAAx5B,EAAAgC,EAAAwY,GAEA,MADAvlB,MAAAkoC,OAAA3iB,GACA,KAIAo9B,EAAA,SAAA7kC,GACA,KAAAA,GACAA,EAAA0X,GAAA1X,EAAA8kC,OACA9kC,EAAApd,EAAAqe,KAAA+0B,OAEAh2B,IAAA0V,OAGA5yB,EAAA8hD,EAAA5hD,SAEAF,GAAAiiD,gBAAA,WAOA,IANA,GAKApb,GAAAlU,EAAAjK,EALA/D,EAAAvlB,KAAAkoC,OACA4a,EAAAv9B,EAAA8K,KAAA0yB,WAAA,KAAAx9B,EAAA8K,KAAA0yB,WAAAx9B,EAAA8K,KAAA0yB,WAAA/8B,MAAA,KACAjmB,EAAA+iD,EAAA52C,OACAi8B,KACA6a,EAAAz9B,EAAA09B,YAAAF,aAEAhjD,MACAooC,EAAA2a,EAAA/iD,IAAAgf,KAAA+0B,KAGA,KADA/zC,EAAA+iD,EAAA52C,SACAnM,MAGA,IAFA0nC,EAAAqb,EAAA/iD,GACAwzB,EAAAhO,EAAAwN,SACAQ,GACAjK,EAAAiK,EAAAC,MACAD,EAAA2vB,GACA3vB,EAAAkC,EAAAiP,KAAAyD,GACM5U,EAAAihB,IAAA/M,IACN,IAAAlU,EAAAiC,GAAAjC,EAAAkC,EACAktB,EAAApvB,EAAAkC,EAAA1C,WAEA/yB,KAAAmjD,KAAA5vB,EAAAkC,EAAAgS,EAAAlU,EAAAlb,EAAAkb,EAAA5yB,GAEA2oB,IACAA,EAAAuT,MAAAtJ,EAAAsJ,OAEAtJ,EAAAsJ,MACAtJ,EAAAsJ,MAAArJ,MAAAlK,EACQ/D,EAAAwN,WAAAQ,IACRhO,EAAAwN,SAAAzJ,GAEAiK,EAAAC,MAAAD,EAAAsJ,MAAA,KACAtX,EAAA09B,YAAAxb,GAAAub,IAGAzvB,EAAAjK,CAGA,WAGA1oB,EAAAuiD,KAAA,SAAAp4C,EAAAnK,EAAAyX,EAAA1X,GACAX,KAAAojD,UAAAr4C,EAAAnK,EAAAyX,IAAA1X,EAAAC,EAAAme,KAAA+0B,OACA9zC,KAAAmlC,gBAAAnyB,KAAApS,OAoBA,WAEAivB,EAAAE,UAAAoU,QACAC,SAAA,OACAE,IAAA,EACA7S,QAAA,QAGA8S,KAAA,SAAAx5B,EAAAgC,EAAAwY,EAAAoe,GACA,GAAA/iC,GAAAq9B,CACA,sBAAAlzB,GAAA,aACA,QAEA,KAAAnK,IAAAmM,GACAkxB,EAAAlxB,EAAAnM,GACA,uBACAq9B,IAAA0F,EAAA54B,IAEA/K,KAAAojD,UAAAr4C,EAAA,eAAAA,EAAA8T,aAAAje,GAAA,GAAAq9B,EAAA,GAAAr9B,GAAA,EAAAA,GACAZ,KAAAmlC,gBAAAnyB,KAAApS,EAEA,gBAqBAivB,EAAAE,UAAAoU,QACAC,SAAA,sBACA3S,QAAA,QACA6S,IAAA,EAGAC,KAAA,SAAAx5B,EAAAgC,EAAAwY,EAAAoe,GACA,qBACA52B,GAAa2R,SAAA3R,IAEb/M,KAAAqjD,SACA,IAEAziD,GAAA44B,EAAA7jB,EAAAsoB,EAAAsS,EAAAvqB,EAFAsqB,EAAAvjC,EAAAu2C,cAAA,IAAAvkC,KAAAsH,GAAA,IACAoqB,EAAA,IAEA,KAAA7vC,IAAAmM,GACA,eAAAnM,IACAq9B,EAAAlxB,EAAAnM,GACA,uBACAq9B,IAAA0F,EAAA54B,IAEAib,GAAAiY,EAAA,IAAAjY,MAAA,KACAwT,EAAAxT,EAAA,GACArQ,EAAAiJ,WAAA,kBAAA7T,GAAAnK,GAAAmK,EAAAnK,GAAAmK,EAAAnK,EAAAuqB,QAAA,0BAAApgB,GAAA,MAAAnK,EAAAs7B,OAAA,IAAAt7B,EAAA,MAAAA,EAAAs7B,OAAA,OACA+B,EAAAj+B,KAAAqjD,OAAAziD,GAAA,0BAAA44B,EAAAwC,OAAA,GAAArmB,EAAAO,SAAAsjB,EAAAwC,OAAA,WAAAC,OAAAzC,EAAA0C,OAAA,IAAAD,OAAAzC,IAAA,EACA+W,EAAAtS,EAAAtoB,EACAqQ,EAAA9Z,SACAstB,EAAAxT,EAAAyT,KAAA,KACAD,EAAArO,QAAA,gBACAolB,GAAAD,EACAC,OAAAD,EAAA,KACAC,IAAA,EAAAA,EAAAD,EAAAC,EAAAD,IAGA9W,EAAArO,QAAA,aAAAolB,EAAA,EACAA,KAAA,WAAAD,MAAAC,EAAAD,EAAA,GAAAA,EACO9W,EAAArO,QAAA,aAAAolB,EAAA,IACPA,KAAA,WAAAD,MAAAC,EAAAD,EAAA,GAAAA,KAGAC,EAAAE,GAAAF,GAAAE,KACAzwC,KAAAojD,UAAAr4C,EAAAnK,EAAA+U,IAAA46B,EAAA3vC,GACAZ,KAAAmlC,gBAAAnyB,KAAApS,IAIA,WAIAgc,IAAA,SAAAyV,GACA,GAAAkB,EACA,QAAAlB,EACAryB,KAAAmD,OAAAykC,SAAAnnC,KAAAT,KAAAqyB,OAGA,KADAkB,EAAAvzB,KAAA+yB,SACAQ,GACAA,EAAAiC,EACAjC,EAAAkC,EAAAlC,EAAA3yB,GAAAZ,KAAAqjD,OAAA9vB,EAAA3yB,IAEA2yB,EAAAkC,EAAAlC,EAAA3yB,GAAAZ,KAAAqjD,OAAA9vB,EAAA3yB,GAEA2yB,IAAAC,SAKEwT,UAAA,EAiBFnX,EAAAE,UAAA,uCAAAqO,GAEA,GA4EAmlB,GAAAt0B,EAAAu0B,EA5EA7H,EAAA9rB,EAAA4zB,kBAAA5zB,EACA6zB,EAAA/H,EAAArF,IAAAC,UACAoN,EAAA,EAAA5kC,KAAAsH,GACAu9B,EAAA7kC,KAAAsH,GAAA,EACAw9B,EAAAH,EAAAG,OACAC,EAAA,SAAAtP,EAAAhf,GACA,GAAAuuB,GAAAF,EAAA,UAAArP,EAAA,cAA8C,GAC9C5zC,EAAAmjD,EAAAjjD,UAAA,GAAAs9B,EAGA,OAFAx9B,GAAAc,YAAAqiD,EACAnjD,EAAA+zB,SAAAa,EACAuuB,GAEAC,EAAA5lB,EAAA6lB,UAAA,aACAC,EAAA,SAAAjmC,EAAAkmC,EAAAC,EAAAC,EAAAC,GACA,GAAAP,GAAAF,EAAA,UAAA5lC,GACAsmC,QAAA,GAAAJ,GACA90B,OAAA,GAAA+0B,GACAI,UAAA,GAAAH,KACK,EAEL,OADAL,GAAAD,EAAA9lC,GACA8lC,GAEAU,EAAA,SAAAhxB,EAAA1mB,EAAAuc,GACAtpB,KAAAy1B,EAAAhC,EACAzzB,KAAAw5B,EAAAzsB,EACAuc,IACAtpB,KAAAspB,OACAA,EAAA0U,KAAAh+B,KACAA,KAAAW,EAAA2oB,EAAAkQ,EAAAzsB,EACA/M,KAAA0kD,IAAAp7B,EAAAmM,EAAAhC,IAKAkxB,EAAA,SAAAnQ,EAAAhf,GACA,GAAAuuB,GAAAF,EAAA,UAAArP,EAAA,SAAAoQ,GACA5kD,KAAA6kD,IAAAD,GAAA,IAAAA,IAAA,QACA5kD,KAAA8kD,IAAA,MAAA9kD,KAAA6kD,MACM,GACNjkD,EAAAmjD,EAAAjjD,UAAA,GAAAs9B,EAMA,OALAx9B,GAAAc,YAAAqiD,EACAnjD,EAAA+zB,SAAAa,EACA50B,EAAAouB,OAAA,SAAA41B,GACA,UAAAb,GAAAa,IAEAb,GAGAgB,EAAAb,EAAA,OACAS,EAAA,mBAAA/jD,GACA,OAAAA,GAAA,GAAAA,IAAAZ,KAAA6kD,IAAA,GAAAjkD,EAAAZ,KAAA6kD,KAAA,IAEAF,EAAA,kBAAA/jD,GACA,MAAAA,OAAAZ,KAAA6kD,IAAA,GAAAjkD,EAAAZ,KAAA6kD,OAEAF,EAAA,qBAAA/jD,GACA,OAAAA,GAAA,QAAAA,MAAAZ,KAAA8kD,IAAA,GAAAlkD,EAAAZ,KAAA8kD,KAAA,KAAAlkD,GAAA,GAAAA,IAAAZ,KAAA8kD,IAAA,GAAAlkD,EAAAZ,KAAA8kD,KAAA,MAMA/1B,EAAA80B,EAAA,yBAAAmB,EAAAC,EAAAC,GACAD,KAAA,IAAAA,IAAA,GACA,MAAAD,EACAA,EAAA,GACKA,EAAA,IACLA,EAAA,GAEAhlD,KAAAmlD,GAAA,IAAAH,EAAAC,EAAA,EACAjlD,KAAA6kD,KAAA,EAAAG,GAAA,EACAhlD,KAAA8kD,IAAAE,EACAhlD,KAAAolD,IAAAplD,KAAA6kD,IAAA7kD,KAAA8kD,IACA9kD,KAAA00B,SAAAwwB,KAAA,IACI,GACJtkD,EAAAmuB,EAAAjuB,UAAA,GAAAs9B,EAuPA,OApPAx9B,GAAAc,YAAAqtB,EACAnuB,EAAA+zB,SAAA,SAAA/zB,GACA,GAAAmb,GAAAnb,GAAA,GAAAA,GAAAZ,KAAAmlD,EACA,OAAAvkD,GAAAZ,KAAA6kD,IACA7kD,KAAA00B,SAAA,GAAA9zB,EAAA,EAAAA,EAAAZ,KAAA6kD,KAAAjkD,EAAAmb,GAAAnb,EAAA,EAAAA,EAAAZ,KAAA6kD,KAAAjkD,MAAAmb,EACInb,EAAAZ,KAAAolD,IACJplD,KAAA00B,SAAA,GAAA9zB,KAAAZ,KAAAolD,KAAAplD,KAAA6kD,KAAAjkD,EAAAmb,GAAAnb,EAAAmb,IAAAnb,KAAAZ,KAAAolD,KAAAplD,KAAA6kD,KAAAjkD,MAEAZ,KAAA00B,SAAA,EAAA3Y,GAEAgT,EAAArB,KAAA,GAAAqB,GAAA,OAEAnuB,EAAAouB,OAAAD,EAAAC,OAAA,SAAAg2B,EAAAC,EAAAC,GACA,UAAAn2B,GAAAi2B,EAAAC,EAAAC,IAKA3B,EAAAM,EAAA,8BAAAtgB,GACAA,KAAA,EACAvjC,KAAA6kD,IAAA,EAAAthB,EACAvjC,KAAA8kD,IAAAvhB,EAAA,IACI,GACJ3iC,EAAA2iD,EAAAziD,UAAA,GAAAs9B,GACAx9B,EAAAc,YAAA6hD,EACA3iD,EAAA+zB,SAAA,SAAA/zB,GAMA,MALAA,GAAA,EACAA,EAAA,EACIA,GAAA,IACJA,EAAA,aAEAZ,KAAA8kD,IAAAlkD,GAAA,GAAAZ,KAAA6kD,KAEAjkD,EAAAouB,OAAAu0B,EAAAv0B,OAAA,SAAAuU,GACA,UAAAggB,GAAAhgB,IAKAtU,EAAA40B,EAAA,4BAAAxzB,GACAA,OAWA,KAVA,GASAnR,GAAAE,EAAAimC,EAAAvL,EAAAjX,EAAAyiB,EATAh2B,EAAAe,EAAAf,OAAA,OACAxvB,KACA83B,EAAA,EACA7O,EAAA,GAAAsH,EAAAtH,QAAA,IACAhpB,EAAAgpB,EACAwG,EAAAc,EAAAd,aAAA,EACAC,EAAAa,EAAAb,SAAA,EACAL,EAAAkB,EAAAlB,mBAAAiP,GAAA/N,EAAAlB,SAAA,KACAD,EAAA,gBAAAmB,GAAA,YAAAA,EAAAnB,SAAA,KAEAnvB,MACAmf,EAAAqQ,EAAAxQ,KAAAE,SAAA,EAAA8J,EAAAhpB,EACAqf,EAAA+P,IAAAwF,SAAAzV,KACA,SAAAoQ,EACA+1B,EAAAn2B,EACK,QAAAI,GACLwqB,EAAA,EAAA56B,EACAmmC,EAAAvL,IAAA5qB,GACK,OAAAI,EACL+1B,EAAAnmC,IAAAgQ,EACKhQ,EAAA,IACL46B,EAAA,EAAA56B,EACAmmC,EAAAvL,IAAA,GAAA5qB,IAEA4qB,EAAA,KAAA56B,GACAmmC,EAAAvL,IAAA,GAAA5qB,GAEAK,EACAnQ,GAAAL,KAAAE,SAAAomC,EAAA,GAAAA,EACKtlD,EAAA,EACLqf,GAAA,GAAAimC,EAEAjmC,GAAA,GAAAimC,EAEA71B,IACApQ,EAAA,EACAA,EAAA,EACMA,EAAA,IACNA,EAAA,IAGAtf,EAAA83B,MAAgB1Y,IAAAE,IAQhB,KANAtf,EAAA+/B,KAAA,SAAA//B,EAAAsB,GACA,MAAAtB,GAAAof,EAAA9d,EAAA8d,IAGAomC,EAAA,GAAAb,GAAA,UACA1kD,EAAAgpB,IACAhpB,MACA8iC,EAAA/iC,EAAAC,GACAulD,EAAA,GAAAb,GAAA5hB,EAAA3jB,EAAA2jB,EAAAzjB,EAAAkmC,EAGAtlD,MAAA68B,MAAA,GAAA4nB,GAAA,QAAAa,EAAA7vB,EAAA6vB,IAAAh8B,QACG,GACH1oB,EAAAquB,EAAAnuB,UAAA,GAAAs9B,GACAx9B,EAAAc,YAAAutB,EACAruB,EAAA+zB,SAAA,SAAA/zB,GACA,GAAA0kD,GAAAtlD,KAAA68B,KACA,IAAAj8B,EAAA0kD,EAAA7vB,EAAA,CACA,KAAA6vB,EAAAh8B,MAAA1oB,GAAA0kD,EAAA7vB,GACA6vB,IAAAh8B,IAEAg8B,KAAAtnB,SAEA,MAAAsnB,EAAAtnB,MAAAp9B,GAAA0kD,EAAA7vB,GACA6vB,IAAAtnB,IAIA,OADAh+B,MAAA68B,MAAAyoB,EACAA,EAAA9rB,GAAA54B,EAAA0kD,EAAA7vB,GAAA6vB,EAAAZ,IAAAY,EAAA3kD,GAEAC,EAAAouB,OAAA,SAAAqB,GACA,UAAApB,GAAAoB,IAEApB,EAAAvB,KAAA,GAAAuB,GAIAi1B,EAAA,SACAJ,EAAA,qBAAAljD,GACA,MAAAA,GAAA,OACA,OAAAA,IACKA,EAAA,OACL,QAAAA,GAAA,UAAAA,EAAA,IACKA,EAAA,SACL,QAAAA,GAAA,WAAAA,EAAA,MAEA,QAAAA,GAAA,YAAAA,EAAA,UAEAkjD,EAAA,oBAAAljD,GACA,OAAAA,EAAA,EAAAA,GAAA,OACA,SAAAA,IACKA,EAAA,OACL,WAAAA,GAAA,UAAAA,EAAA,KACKA,EAAA,SACL,WAAAA,GAAA,WAAAA,EAAA,OAEA,WAAAA,GAAA,YAAAA,EAAA,WAEAkjD,EAAA,uBAAAljD,GACA,GAAA2kD,GAAA3kD,EAAA,EAeA,OAbAA,GADA2kD,EACA,IAAA3kD,EAEA,EAAAA,EAAA,EAGAA,EADAA,EAAA,OACA,OAAAA,IACKA,EAAA,OACL,QAAAA,GAAA,UAAAA,EAAA,IACKA,EAAA,SACL,QAAAA,GAAA,WAAAA,EAAA,MAEA,QAAAA,GAAA,YAAAA,EAAA,QAEA2kD,EAAA,MAAA3kD,GAAA,GAAAA,EAAA,MAMAsjD,EAAA,OACAJ,EAAA,mBAAAljD,GACA,MAAAme,MAAAkkB,KAAA,GAAAriC,GAAA,GAAAA,KAEAkjD,EAAA,kBAAAljD,GACA,QAAAme,KAAAkkB,KAAA,EAAAriC,KAAA,KAEAkjD,EAAA,qBAAAljD,GACA,OAAAA,GAAA,UAAAme,KAAAkkB,KAAA,EAAAriC,KAAA,OAAAme,KAAAkkB,KAAA,GAAAriC,GAAA,GAAAA,GAAA,MAMA4iD,EAAA,SAAAhP,EAAAhf,EAAAgwB,GACA,GAAAzB,GAAAF,EAAA,UAAArP,EAAA,SAAAiR,EAAAC,GACA1lD,KAAA6kD,IAAAY,GAAA,EAAAA,EAAA,EACAzlD,KAAA8kD,KAAAY,GAAAF,IAAAC,EAAA,EAAAA,EAAA,GACAzlD,KAAAolD,IAAAplD,KAAA8kD,IAAAnB,GAAA5kC,KAAA4mC,KAAA,EAAA3lD,KAAA6kD,MAAA,GACA7kD,KAAA8kD,IAAAnB,EAAA3jD,KAAA8kD,MACK,GACLlkD,EAAAmjD,EAAAjjD,UAAA,GAAAs9B,EAMA,OALAx9B,GAAAc,YAAAqiD,EACAnjD,EAAA+zB,SAAAa,EACA50B,EAAAouB,OAAA,SAAAy2B,EAAAC,GACA,UAAA3B,GAAA0B,EAAAC,IAEA3B,GAEAG,EAAA,UACAV,EAAA,sBAAA5iD,GACA,MAAAZ,MAAA6kD,IAAA9lC,KAAAiV,IAAA,MAAApzB,GAAAme,KAAAq7B,KAAAx5C,EAAAZ,KAAAolD,KAAAplD,KAAA8kD,KAAA,GACI,IACJtB,EAAA,qBAAA5iD,GACA,QAAAZ,KAAA6kD,IAAA9lC,KAAAiV,IAAA,MAAApzB,GAAA,IAAAme,KAAAq7B,KAAAx5C,EAAAZ,KAAAolD,KAAAplD,KAAA8kD,OACI,IACJtB,EAAA,wBAAA5iD,GACA,OAAAA,GAAA,UAAAZ,KAAA6kD,IAAA9lC,KAAAiV,IAAA,MAAApzB,GAAA,IAAAme,KAAAq7B,KAAAx5C,EAAAZ,KAAAolD,KAAAplD,KAAA8kD,MAAA9kD,KAAA6kD,IAAA9lC,KAAAiV,IAAA,OAAApzB,GAAA,IAAAme,KAAAq7B,KAAAx5C,EAAAZ,KAAAolD,KAAAplD,KAAA8kD,KAAA,MACI,MAKJZ,EAAA,OACAJ,EAAA,mBAAAljD,GACA,SAAAme,KAAAiV,IAAA,MAAApzB,KAEAkjD,EAAA,kBAAAljD,GACA,MAAAme,MAAAiV,IAAA,MAAApzB,EAAA,WAEAkjD,EAAA,qBAAAljD,GACA,OAAAA,GAAA,QAAAme,KAAAiV,IAAA,MAAApzB,EAAA,UAAAme,KAAAiV,IAAA,OAAApzB,EAAA,QAMAsjD,EAAA,OACAJ,EAAA,mBAAAljD,GACA,MAAAme,MAAAq7B,IAAAx5C,EAAAgjD,KAEAE,EAAA,kBAAAljD,GACA,OAAAme,KAAAo7B,IAAAv5C,EAAAgjD,GAAA,IAEAE,EAAA,qBAAAljD,GACA,WAAAme,KAAAo7B,IAAAp7B,KAAAsH,GAAAzlB,GAAA,MAIAijD,EAAA,qBACA+B,KAAA,SAAAvtC,GACA,MAAA+lB,GAAAhc,IAAA/J,MAEI,GAGJ2rC,EAAArI,EAAA5sB,OAAA,kBACAi1B,EAAA/0B,EAAA,qBACA+0B,EAAAT,EAAA,uBAEAwB,IAEE,KAKFl1B,EAAAE,WAAyBF,EAAAC,SAAAsxB,QAiBzB,SAAA39C,EAAAoiD,GAEA,YACA,IAAAC,MACA/rB,EAAAt2B,EAAAggD,iBAAAhgD,EAAAggD,kBAAAhgD,CACA,KAAAs2B,EAAA9L,UAAA,CAGA,GAyBAnuB,GAAAC,EAAAa,EAAAmlD,EAAAC,EAzBAC,EAAA,SAAAC,GACA,GACAnmD,GADAD,EAAAomD,EAAAlgC,MAAA,KACAplB,EAAAm5B,CACA,KAAAh6B,EAAA,EAAeA,EAAAD,EAAAoM,OAAcnM,IAC7Ba,EAAAd,EAAAC,IAAAa,IAAAd,EAAAC,OAEA,OAAAa,IAEA8iD,EAAAuC,EAAA,iBACA/0B,EAAA,MACAhB,EAAA,SAAApwB,GACA,GAEAC,GAFAqB,KACA+uB,EAAArwB,EAAAoM,MAEA,KAAAnM,EAAA,EAAeA,IAAAowB,EAAS/uB,EAAA4R,KAAAlT,EAAAC,OACxB,MAAAqB,IAEA+kD,EAAA,aACA50B,EAAA,WACA,GAAArjB,GAAArN,OAAAC,UAAAoN,SACAk4C,EAAAl4C,EAAAzN,QACA,iBAAAoiC,GACA,aAAAA,gBAAAjX,QAAA,sBAAAiX,EAAA7vB,MAAA9E,EAAAzN,KAAAoiC,KAAAujB,OAIAC,KAmCAC,EAAA,SAAAJ,EAAAK,EAAAjgB,EAAA1W,GACA5vB,KAAA0a,GAAA2rC,EAAAH,GAAAG,EAAAH,GAAAxrC,MACA2rC,EAAAH,GAAAlmD,KACAA,KAAAwmD,QAAA,KACAxmD,KAAAsmC,MACA,IAAAmgB,KACAzmD,MAAA0mD,MAAA,SAAAniB,GAIA,IAHA,GAEApB,GAAArjC,EAAA00C,EAAAmS,EAAAC,EAFA7mD,EAAAwmD,EAAAr6C,OACA26C,EAAA9mD,IAEAA,OACAojC,EAAAkjB,EAAAE,EAAAxmD,KAAA,GAAAumD,GAAAC,EAAAxmD,QAAAymD,SACAC,EAAA1mD,GAAAojC,EAAAqjB,QACAK,KACOtiB,GACPpB,EAAAzoB,GAAA1H,KAAAhT,KAGA,QAAA6mD,GAAAvgB,EAAA,CAMA,GALAxmC,GAAA,iBAAAomD,GAAAlgC,MAAA,KACAwuB,EAAA10C,EAAAshD,MACAuF,EAAAV,EAAAnmD,EAAA25B,KAAA,MAAA+a,GAAAx0C,KAAAwmD,QAAAlgB,EAAAjlC,MAAAilC,EAAAmgB,GAGA72B,EAGA,GAFAmK,EAAAya,GAAAsR,EAAAtR,GAAAmS,EACAC,EAAA,uBAAAtmD,EAAAD,SACAumD,GAAAzmD,EAAA,IACAuvB,KAAAC,EAAA,WAAqH,MAAAg3B,IAAatlD,MAAAhB,EAAAqvB,KAAA1E,SAAA2E,IAAArvB,EAAAD,QAAAsvB,QAC1H,IAAAi3B,EACR,GAAAV,IAAAL,EAAA,CACAvlD,EAAAD,QAAAylD,EAAAD,GAAAc,CACA,KAAA5mD,IAAA+lD,GACAa,EAAA5mD,GAAA+lD,EAAA/lD,OAES+lD,GAAAD,KACTC,EAAAD,GAAArR,GAAAmS,EAIA,KAAA5mD,EAAA,EAAiBA,EAAAC,KAAA0a,GAAAxO,OAAoBnM,IACrCC,KAAA0a,GAAA3a,GAAA2mD,UAIA1mD,KAAA0mD,OAAA,IAIA32B,EAAAtsB,EAAAssB,UAAA,SAAAm2B,EAAAK,EAAAjgB,EAAA1W,GACA,UAAA02B,GAAAJ,EAAAK,EAAAjgB,EAAA1W,IAIAi0B,EAAAH,EAAAG,OAAA,SAAAqC,EAAA5f,EAAA1W,GAGA,MAFA0W,MAAA,aACAvW,EAAAm2B,KAAA,WAAiC,MAAA5f,IAAe1W,GAChD0W,EAGAvW,GAAAiK,QAAAD,CASA,IAAA+sB,IAAA,SAEA1oB,EAAAylB,EAAA,uBAAAvd,EAAAygB,EAAAhzB,EAAAkxB,GACAjlD,KAAAykC,MAAA6B,EACAtmC,KAAAgnD,MAAAjzB,GAAA,EACA/zB,KAAAinD,OAAAhC,GAAA,EACAjlD,KAAAknD,QAAAH,EAAAD,EAAAxlD,OAAAylD,GAAAD,IACI,GACJK,EAAA/oB,EAAAhc,OACA4hC,EAAA5lB,EAAA6lB,SAAA,SAAAv2B,EAAA05B,EAAAC,EAAA1lD,GAKA,IAJA,GAGA9B,GAAAoe,EAAA0kB,EAAA5O,EAHAuzB,EAAAF,EAAAphC,MAAA,KACAjmB,EAAAunD,EAAAp7C,OACAq7C,GAAAF,GAAA,4BAAArhC,MAAA,OAEAjmB,MAIA,IAHAke,EAAAqpC,EAAAvnD,GACAF,EAAA8B,EAAAkiD,EAAA,UAAA5lC,EAAA,SAAAylC,EAAA8D,OAAAvpC,OACA0kB,EAAA4kB,EAAAr7C,SACAy2B,MACA5O,EAAAwzB,EAAA5kB,GACAwkB,EAAAlpC,EAAA,IAAA8V,GAAAozB,EAAApzB,EAAA9V,GAAApe,EAAAk0B,GAAArG,EAAAiH,SAAAjH,IAAAqG,IAAA,GAAArG,GA8BA,KAzBA9sB,EAAAw9B,EAAAt9B,UACAF,EAAA8zB,UAAA,EACA9zB,EAAA+zB,SAAA,SAAA/zB,GACA,GAAAZ,KAAAykC,MAEA,MADAzkC,MAAAknD,QAAA,GAAAtmD,EACAZ,KAAAykC,MAAApjC,MAAA,KAAArB,KAAAknD,QAEA,IAAAzxB,GAAAz1B,KAAAgnD,MACAS,EAAAznD,KAAAinD,OACAlrC,EAAA,IAAA0Z,EAAA,EAAA70B,EAAA,IAAA60B,EAAA70B,IAAA,KAAAA,EAAA,KAAAA,EAUA,OATA,KAAA6mD,EACA1rC,KACI,IAAA0rC,EACJ1rC,OACI,IAAA0rC,EACJ1rC,SACI,IAAA0rC,IACJ1rC,YAEA,IAAA0Z,EAAA,EAAA1Z,EAAA,IAAA0Z,EAAA1Z,EAAAnb,EAAA,GAAAmb,EAAA,IAAAA,EAAA,GAIAjc,GAAA,gDACAC,EAAAD,EAAAoM,SACAnM,MACAa,EAAAd,EAAAC,GAAA,SAAAA,EACAikD,EAAA,GAAA5lB,GAAA,YAAAr+B,GAAAa,EAAA,cACAojD,EAAA,GAAA5lB,GAAA,YAAAr+B,GAAAa,EAAA,cAAAb,EAAA,iBACAikD,EAAA,GAAA5lB,GAAA,YAAAr+B,GAAAa,EAAA,YAEAumD,GAAAO,OAAAhE,EAAA8D,OAAAG,OAAAt4B,OACA83B,EAAAS,MAAAlE,EAAA8D,OAAAK,KAAArD,SAQA,IAAAsD,GAAAjE,EAAA,kCAAA94C,GACA/K,KAAA+nD,cACA/nD,KAAAgoD,aAAAj9C,GAAA/K,MAEAY,GAAAknD,EAAAhnD,UAEAF,EAAAmR,iBAAA,SAAAgiB,EAAAF,EAAAuD,EAAA6wB,EAAA5jB,GACAA,KAAA,CACA,IAEA6jB,GAAAnoD,EAFAooD,EAAAnoD,KAAA+nD,WAAAh0B,GACA4P,EAAA,CASA,KAPA3jC,OAAA+lD,GAAAC,GACAD,EAAAqC,OAEA,MAAAD,IACAnoD,KAAA+nD,WAAAh0B,GAAAo0B,MAEApoD,EAAAooD,EAAAj8C,SACAnM,MACAmoD,EAAAC,EAAApoD,GACAmoD,EAAAvnD,IAAAkzB,GAAAq0B,EAAA7vC,IAAA+e,EACA+wB,EAAAj1C,OAAAnT,EAAA,GACK,IAAA4jC,GAAAukB,EAAAzT,GAAApQ,IACLV,EAAA5jC,EAAA,EAGAooD,GAAAj1C,OAAAywB,EAAA,GAA0BhjC,EAAAkzB,EAAAxb,EAAA+e,EAAAixB,GAAAJ,EAAAxT,GAAApQ,KAG1BzjC,EAAA0nD,oBAAA,SAAAv0B,EAAAF,GACA,GAAA9zB,GAAAooD,EAAAnoD,KAAA+nD,WAAAh0B,EACA,IAAAo0B,EAEA,IADApoD,EAAAooD,EAAAj8C,SACAnM,MACA,GAAAooD,EAAApoD,GAAAY,IAAAkzB,EAEA,WADAs0B,GAAAj1C,OAAAnT,EAAA,IAOAa,EAAAyU,cAAA,SAAA0e,GACA,GACAh0B,GAAA01B,EAAAyyB,EADAC,EAAAnoD,KAAA+nD,WAAAh0B,EAEA,IAAAo0B,EAMA,IALApoD,EAAAooD,EAAAj8C,OACAnM,EAAA,IACAooD,IAAAjnD,MAAA,IAEAu0B,EAAAz1B,KAAAgoD,eACAjoD,MACAmoD,EAAAC,EAAApoD,GACAmoD,IACAA,EAAAG,GACAH,EAAAvnD,EAAAF,KAAAynD,EAAA7vC,GAAAod,GAAyC1B,OAAAhpB,OAAA0qB,IAEzCyyB,EAAAvnD,EAAAF,KAAAynD,EAAA7vC,GAAAod,IAaA,IAAA8yB,GAAA9kD,EAAA6O,sBACAk2C,EAAA/kD,EAAAglD,qBACAC,EAAAr9C,KAAAs9C,KAAA,WAAsC,UAAAt9C,OAAAwO,WACtC+uC,EAAAF,GAKA,KAFA5oD,GAAA,yBACAC,EAAAD,EAAAoM,SACAnM,OAAAwoD,GACAA,EAAA9kD,EAAA3D,EAAAC,GAAA,yBACAyoD,EAAA/kD,EAAA3D,EAAAC,GAAA,yBAAA0D,EAAA3D,EAAAC,GAAA,8BAGA8jD,GAAA,kBAAAgF,EAAAC,GACA,GAMAC,GAAAC,EAAAC,EAAAC,EAAAC,EANAC,EAAAppD,KACA4Z,EAAA8uC,IACAW,IAAAP,KAAA,IAAAP,IAAA,OACAe,EAAA,IACAC,EAAA,GACAC,EAAA,OAEAC,EAAA,SAAAC,GACA,GACAzK,GAAA0K,EADAC,EAAAlB,IAAAE,CAEAgB,GAAAN,IACA1vC,GAAAgwC,EAAAL,GAEAX,GAAAgB,EACAR,EAAA31B,MAAAm1B,EAAAhvC,GAAA,IACAqlC,EAAAmK,EAAA31B,KAAA01B,IACAJ,GAAA9J,EAAA,GAAAyK,KAAA,KACAN,EAAAx2C,QACAu2C,GAAAlK,MAAAiK,EAAA,KAAAA,EAAAjK,GACA0K,GAAA,GAEAD,KAAA,IACAT,EAAAD,EAAAS,IAEAE,GACAP,EAAA/zC,cAAAm0C,GAIA1B,GAAArnD,KAAA2oD,GACAA,EAAA31B,KAAA21B,EAAAx2C,MAAA,EACAw2C,EAAAS,KAAA,WACAJ,GAAA,IAGAL,EAAAt3B,aAAA,SAAAiS,EAAA+lB,GACAR,EAAAvlB,GAAA,EAAA7S,EACAq4B,EAAAxqC,KAAA0xB,IAAAqZ,EAAAR,EAAA,IAGAF,EAAAW,MAAA,WACA,MAAAd,IAGAI,GAAAb,EAGAA,EAAAS,GAFAhvC,aAAAgvC,GAIAD,EAAA7C,EACA8C,EAAA,KACAG,IAAArD,IACAC,GAAA,KAIAoD,EAAAhB,KAAA,SAAAxlB,GACA,OAAAqmB,EACAG,EAAAW,QACKnnB,EACLhpB,IAAAgvC,KAAAF,KACKU,EAAAx2C,MAAA,KACLg2C,EAAAF,IAAAY,EAAA,GAEAN,EAAA,IAAAD,EAAA5C,EAAAkD,GAAAd,EAAsJA,EAAtJ,SAAA/yB,GAAmF,MAAAlgB,YAAAkgB,EAAA,KAAA2zB,EAAAC,EAAA31B,MAAA,MACnF21B,IAAArD,IACAC,GAAA,GAEAyD,EAAA,IAGAL,EAAAP,IAAA,SAAA97C,GACA,MAAA3J,WAAA8I,QAGA68C,EAAAh8C,EACAm8C,EAAA,GAAAH,GAAA,IACAI,EAAAnpD,KAAAyzB,KAAAy1B,MACAE,GAAAhB,QALAW,GAQAK,EAAAN,OAAA,SAAA/7C,GACA,MAAA3J,WAAA8I,QAGAk9C,EAAAW,QACAV,EAAAt8C,MACAq8C,GAAAP,IAAAE,IAJAM,GAMAD,EAAAP,OAGAvzC,WAAA,WACA,SAAA+zC,GAAAD,EAAAx2C,MAAA,cAAAzJ,SAAA6gD,iBACAZ,EAAAN,QAAA,IAEI,QAGJloD,EAAA8iD,EAAAuG,OAAAnpD,UAAA,GAAA4iD,GAAAwG,OAAApC,gBACAlnD,EAAAc,YAAAgiD,EAAAuG,MAQA,IAAAj6B,GAAA6zB,EAAA,0BAAAtqC,EAAA8W,GASA,GARArwB,KAAAqwB,aACArwB,KAAAizB,UAAAjzB,KAAAo0B,eAAA7a,GAAA,EACAvZ,KAAA4yB,OAAAqJ,OAAA5L,EAAA9C,QAAA,EACAvtB,KAAAi5B,WAAA,EACAj5B,KAAA+0B,QAAA1E,EAAAkC,mBAAA,EACAvyB,KAAAssB,KAAA+D,EAAA/D,KACAtsB,KAAA40B,UAAAvE,EAAA85B,YAAA,EAEApyB,EAAA,CAGAiuB,GACAD,EAAAqC,MAGA,IAAAzvB,GAAA34B,KAAAqwB,KAAAhD,UAAA2K,EAAAD,CACAY,GAAApvB,IAAAvJ,KAAA24B,EAAAlG,OAEAzyB,KAAAqwB,KAAAtW,QACA/Z,KAAA+Z,QAAA,KAIAgsC,GAAA/1B,EAAA+B,OAAA,GAAA2xB,GAAAuG,OACArpD,EAAAovB,EAAAlvB,UACAF,EAAAqwB,OAAArwB,EAAA8wB,IAAA9wB,EAAAiyB,SAAAjyB,EAAAiY,SAAA,EACAjY,EAAAuyB,WAAAvyB,EAAA6xB,MAAA,EACA7xB,EAAA4zB,gBACA5zB,EAAA4yB,MAAA5yB,EAAAy6B,MAAAz6B,EAAAs0B,UAAAt0B,EAAA4xB,UAAA5xB,EAAAiuB,SAAA,KACAjuB,EAAAiY,SAAA,CAIA,IAAAuxC,GAAA,WACApE,GAAA0C,IAAAE,EAAA,KACA7C,EAAAqC,OAEA9yC,WAAA80C,EAAA,KAEAA,KAGAxpD,EAAAy7B,KAAA,SAAA1G,EAAAjC,GAIA,MAHA,OAAAiC,GACA31B,KAAAm8B,KAAAxG,EAAAjC,GAEA1zB,KAAAmqD,UAAA,GAAApwC,QAAA,IAGAnZ,EAAAoZ,MAAA,SAAAqwC,EAAA32B,GAIA,MAHA,OAAA22B,GACArqD,KAAAm8B,KAAAkuB,EAAA32B,GAEA1zB,KAAA+Z,QAAA,IAGAnZ,EAAA0pD,OAAA,SAAA30B,EAAAjC,GAIA,MAHA,OAAAiC,GACA31B,KAAAm8B,KAAAxG,EAAAjC,GAEA1zB,KAAA+Z,QAAA,IAGAnZ,EAAAu7B,KAAA,SAAA1I,EAAAC,GACA,MAAA1zB,MAAAu4B,UAAA0D,OAAAxI,GAAAC,KAAA,IAGA9yB,EAAAkqB,QAAA,SAAAy/B,EAAA72B,GACA,MAAA1zB,MAAAmqD,UAAA,GAAApwC,QAAA,GAAAwe,UAAAgyB,GAAAvqD,KAAA4yB,OAAA,EAAAc,KAAA,OAGA9yB,EAAAi2B,QAAA,SAAAlB,EAAAjC,GAIA,MAHA,OAAAiC,GACA31B,KAAAm8B,KAAAxG,GAAA31B,KAAAm0B,gBAAAT,GAEA1zB,KAAAmqD,UAAA,GAAApwC,QAAA,IAGAnZ,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,KAIA/yB,EAAAoxB,WAAA,WAOA,MANAhyB,MAAAyyB,MAAAzyB,KAAAmzB,WAAA,EACAnzB,KAAA6yB,SAAA7yB,KAAA0xB,KAAA,EACA1xB,KAAAw0B,iBACAx0B,KAAA0xB,KAAA1xB,KAAA6uB,UACA7uB,KAAA0yB,UAAA,GAEA1yB,MAGAY,EAAA6+B,SAAA,WACA,GAEAzE,GAFArC,EAAA34B,KAAAwyB,UACAg4B,EAAAxqD,KAAA4Z,UAEA,QAAA+e,IAAA34B,KAAA0xB,MAAA1xB,KAAA6Y,SAAA8f,EAAA8G,aAAAzE,EAAArC,EAAAqC,YAAAwvB,GAAAxvB,EAAAwvB,EAAAxqD,KAAAm0B,gBAAAn0B,KAAAi5B,YAGAr4B,EAAA8xB,SAAA,SAAAkL,EAAAC,GAaA,MAZAmoB,IACAD,EAAAqC,OAEApoD,KAAA0xB,KAAAkM,EACA59B,KAAA+0B,QAAA/0B,KAAAy/B,WACA5B,KAAA,IACAD,IAAA59B,KAAA6uB,SACA7uB,KAAAwyB,UAAAjpB,IAAAvJ,UAAA4Z,WAAA5Z,KAAA4yB,SACKgL,GAAA59B,KAAA6uB,UACL7uB,KAAAwyB,UAAAmI,QAAA36B,MAAA,KAGA,GAIAY,EAAA88B,MAAA,SAAArN,EAAAtlB,GACA,MAAA/K,MAAA0yB,UAAA,OAGA9xB,EAAAwqB,KAAA,SAAAiF,EAAAtlB,GAEA,MADA/K,MAAA09B,MAAArN,EAAAtlB,GACA/K,MAGAY,EAAAqxB,SAAA,SAAAw4B,GAEA,IADA,GAAAllC,GAAAklC,EAAAzqD,UAAA6uB,SACAtJ,GACAA,EAAA0L,QAAA,EACA1L,IAAAsJ,QAEA,OAAA7uB,OAGAY,EAAA84B,kBAAA,SAAAvC,GAGA,IAFA,GAAAp3B,GAAAo3B,EAAAjrB,OACAqqB,EAAAY,EAAA71B,WACAvB,MACA,WAAAo3B,EAAAp3B,KACAw2B,EAAAx2B,GAAAC,KAGA,OAAAu2B,IAGA31B,EAAAu0B,UAAA,SAAApB,GACA,GAAAyF,GAAAx5B,KAAAqwB,KACAwD,EAAA2F,EAAAzF,GACAoD,EAAAqC,EAAAzF,EAAA,UACAqD,EAAAoC,EAAAzF,EAAA,UAAAyF,EAAAzL,eAAA/tB,KACAmwB,EAAAgH,IAAAjrB,OAAA,CACA,QAAAikB,GACA,OAAA0D,EAAApzB,KAAA22B,EAAiC,MACjC,QAAAvD,EAAApzB,KAAA22B,EAAAD,EAAA,GAA4C,MAC5C,QAAAtD,EAAApzB,KAAA22B,EAAAD,EAAA,GAAAA,EAAA,GAAuD,MACvD,SAAAtD,EAAAxyB,MAAA+1B,EAAAD,KAMAv2B,EAAAitB,cAAA,SAAAkG,EAAAF,EAAAsD,EAAAC,GACA,WAAArD,GAAA,IAAAmI,OAAA,MACA,GAAA1C,GAAAx5B,KAAAqwB,IACA,QAAAjtB,UAAA8I,OACA,MAAAstB,GAAAzF,EAEA,OAAAF,QACA2F,GAAAzF,IAEAyF,EAAAzF,GAAAF,EACA2F,EAAAzF,EAAA,UAAAxC,EAAA4F,MAAAsC,KAAA,IAAAtO,QAAA,eAA8EnrB,KAAA05B,kBAAAvC,KAC9EqC,EAAAzF,EAAA,SAAAqD,GAEA,aAAArD,IACA/zB,KAAAk1B,UAAArB,GAGA,MAAA7zB,OAGAY,EAAA2sB,MAAA,SAAAxgB,GACA,MAAA3J,WAAA8I,QAGAlM,KAAAwyB,UAAA6G,mBACAr5B,KAAAwqD,UAAAxqD,KAAA4Z,WAAA7M,EAAA/M,KAAA4yB,QAEA5yB,KAAA4yB,OAAA7lB,EACA/M,MANAA,KAAA4yB,QASAhyB,EAAA2Y,SAAA,SAAAxM,GACA,MAAA3J,WAAA8I,QAIAlM,KAAAizB,UAAAjzB,KAAAo0B,eAAArnB,EACA/M,KAAAiyB,UAAA,GACAjyB,KAAAwyB,UAAA6G,mBAAAr5B,KAAAyyB,MAAA,GAAAzyB,KAAAyyB,MAAAzyB,KAAAizB,WAAA,IAAAlmB,GACA/M,KAAAu4B,UAAAv4B,KAAAmzB,YAAApmB,EAAA/M,KAAAizB,YAAA,GAEAjzB,OARAA,KAAAixB,QAAA,EACAjxB,KAAAizB,YAUAryB,EAAAuzB,cAAA,SAAApnB,GAEA,MADA/M,MAAAixB,QAAA,EACA7tB,UAAA8I,OAAAlM,KAAAuZ,SAAAxM,GAAA/M,KAAAo0B,gBAGAxzB,EAAA6yB,KAAA,SAAA1mB,EAAA2mB,GACA,MAAAtwB,WAAA8I,QAGAlM,KAAAixB,QACAjxB,KAAAm0B,gBAEAn0B,KAAAu4B,UAAAxrB,EAAA/M,KAAAizB,UAAAjzB,KAAAizB,UAAAlmB,EAAA2mB,IALA1zB,KAAAyyB,OAQA7xB,EAAA23B,UAAA,SAAA9E,EAAAC,EAAAoK,GAIA,GAHAkoB,GACAD,EAAAqC,QAEAhlD,UAAA8I,OACA,MAAAlM,MAAAmzB,UAEA,IAAAnzB,KAAAwyB,UAAA,CAIA,GAHAiB,EAAA,IAAAqK,IACArK,GAAAzzB,KAAAm0B,iBAEAn0B,KAAAwyB,UAAA6G,kBAAA,CACAr5B,KAAAixB,QACAjxB,KAAAm0B,eAEA,IAAAA,GAAAn0B,KAAAo0B,eACAuE,EAAA34B,KAAAwyB,SASA,IARAiB,EAAAU,IAAA2J,IACArK,EAAAU,GAEAn0B,KAAA4Z,YAAA5Z,KAAA6Y,QAAA7Y,KAAAi7B,WAAAtC,EAAAlG,QAAAzyB,KAAA40B,UAAAT,EAAAV,KAAAzzB,KAAAi5B,WACAN,EAAA1H,QACAjxB,KAAAiyB,UAAA,GAGA0G,EAAAnG,UACA,KAAAmG,EAAAnG,WACAmG,EAAAnG,UAAAC,SAAAkG,EAAA/e,WAAA+e,EAAAxF,YAAAwF,EAAAM,YACAN,EAAAJ,UAAAI,EAAAxF,YAAA,GAEAwF,IAAAnG,UAIAxyB,KAAA0xB,KACA1xB,KAAA0yB,UAAA,MAEA1yB,KAAAmzB,aAAAM,GAAA,IAAAzzB,KAAAizB,YACA2G,EAAA1tB,QACA2tB,KAEA75B,KAAAqS,OAAAohB,EAAAC,GAAA,GACAkG,EAAA1tB,QACA2tB,MAIA,MAAA75B,OAGAY,EAAAs4B,SAAAt4B,EAAAu4B,cAAA,SAAApsB,EAAA2mB,GACA,GAAAna,GAAAvZ,KAAAuZ,UACA,OAAAnW,WAAA8I,OAAAlM,KAAAu4B,UAAAhf,EAAAxM,EAAA2mB,GAAAna,EAAAvZ,KAAAyyB,MAAAlZ,EAAAvZ,KAAAqyB,OAGAzxB,EAAA4pD,UAAA,SAAAz9C,GACA,MAAA3J,WAAA8I,QAGAa,IAAA/M,KAAA4Z,aACA5Z,KAAA4Z,WAAA7M,EACA/M,KAAA6uB,UAAA7uB,KAAA6uB,SAAAyK,eACAt5B,KAAA6uB,SAAAtlB,IAAAvJ,KAAA+M,EAAA/M,KAAA4yB,SAGA5yB,MARAA,KAAA4Z,YAWAhZ,EAAAk8B,QAAA,SAAA4tB,GACA,MAAA1qD,MAAA4Z,YAAA,GAAA8wC,EAAA1qD,KAAAm0B,gBAAAn0B,KAAAuZ,YAAAvZ,KAAAi5B,YAGAr4B,EAAAm9B,UAAA,SAAAhxB,GACA,IAAA3J,UAAA8I,OACA,MAAAlM,MAAAi5B,UAGA,IADAlsB,KAAAmkB,EACAlxB,KAAAwyB,WAAAxyB,KAAAwyB,UAAA6G,kBAAA,CACA,GAAAsxB,GAAA3qD,KAAAi7B,WACAxF,EAAAk1B,GAAA,IAAAA,IAAA3qD,KAAAwyB,UAAA+F,WACAv4B,MAAA4Z,WAAA6b,KAAAz1B,KAAA4Z,YAAA5Z,KAAAi5B,WAAAlsB,EAGA,MADA/M,MAAAi5B,WAAAlsB,EACA/M,KAAAiyB,UAAA,IAGArxB,EAAAupD,SAAA,SAAAp9C,GACA,MAAA3J,WAAA8I,QAGAa,GAAA/M,KAAA40B,YACA50B,KAAA40B,UAAA7nB,EACA/M,KAAAu4B,UAAAv4B,KAAAwyB,YAAAxyB,KAAAwyB,UAAA6G,kBAAAr5B,KAAAm0B,gBAAAn0B,KAAAmzB,WAAAnzB,KAAAmzB,YAAA,IAEAnzB,MANAA,KAAA40B,WASAh0B,EAAAmZ,OAAA,SAAAhN,GACA,IAAA3J,UAAA8I,OACA,MAAAlM,MAAA6Y,OAEA,IACA+xC,GAAAhB,EADAjxB,EAAA34B,KAAAwyB,SAuBA,OArBAzlB,IAAA/M,KAAA6Y,SAAA8f,IACAqtB,GAAAj5C,GACAg5C,EAAAqC,OAEAwC,EAAAjyB,EAAAqC,UACA4uB,EAAAgB,EAAA5qD,KAAAi7B,YACAluB,GAAA4rB,EAAAU,oBACAr5B,KAAA4Z,YAAAgwC,EACA5pD,KAAAiyB,UAAA,IAEAjyB,KAAAi7B,WAAAluB,EAAA69C,EAAA,KACA5qD,KAAA6Y,QAAA9L,EACA/M,KAAA+0B,QAAA/0B,KAAAy/B,YACA1yB,GAAA,IAAA68C,GAAA5pD,KAAA6yB,UAAA7yB,KAAAuZ,aACAqxC,EAAAjyB,EAAAU,kBAAAr5B,KAAAmzB,YAAAy3B,EAAA5qD,KAAA4Z,YAAA5Z,KAAAi5B,WACAj5B,KAAAqS,OAAAu4C,MAAA5qD,KAAAmzB,YAAA,KAGAnzB,KAAA0xB,MAAA3kB,GACA/M,KAAA0yB,UAAA,MAEA1yB,KASA,IAAAiwB,GAAA4zB,EAAA,+BAAAxzB,GACAL,EAAAvvB,KAAAT,KAAA,EAAAqwB,GACArwB,KAAA60B,mBAAA70B,KAAAq5B,mBAAA,GAGAz4B,GAAAqvB,EAAAnvB,UAAA,GAAAkvB,GACApvB,EAAAc,YAAAuuB,EACArvB,EAAAwqB,OAAAsG,KAAA,EACA9wB,EAAAi3B,OAAAj3B,EAAAy6B,MAAAz6B,EAAAy8B,QAAA,KACAz8B,EAAA04B,eAAA,EAEA14B,EAAA2I,IAAA3I,EAAA+xB,OAAA,SAAAkI,EAAAtb,EAAAoa,EAAAxD,GACA,GAAA00B,GAAAC,CAaA,IAZAjwB,EAAAjhB,WAAAqiB,OAAA1c,GAAA,GAAAsb,EAAAjI,OACAiI,EAAAhiB,SAAA7Y,OAAA66B,EAAArI,YACAqI,EAAAI,WAAAJ,EAAAjhB,YAAA5Z,KAAAg7B,UAAAH,EAAAjhB,YAAAihB,EAAA5B,YAEA4B,EAAAhM,UACAgM,EAAAhM,SAAA8L,QAAAE,GAAA,GAEAA,EAAAhM,SAAAgM,EAAArI,UAAAxyB,KACA66B,EAAAnJ,KACAmJ,EAAAnI,UAAA,MAEAm4B,EAAA7qD,KAAAq7B,MACAr7B,KAAAs5B,cAEA,IADAwxB,EAAAjwB,EAAAjhB,WACAixC,KAAAjxC,WAAAkxC,GACAD,IAAAhuB,KAoBA,OAjBAguB,IACAhwB,EAAArH,MAAAq3B,EAAAr3B,MACAq3B,EAAAr3B,MAAAqH,IAEAA,EAAArH,MAAAxzB,KAAA63B,OACA73B,KAAA63B,OAAAgD,GAEAA,EAAArH,MACAqH,EAAArH,MAAAqJ,MAAAhC,EAEA76B,KAAAq7B,MAAAR,EAEAA,EAAAgC,MAAAguB,EACA7qD,KAAAq9B,QAAAxC,EACA76B,KAAAwyB,WACAxyB,KAAAiyB,UAAA,GAEAjyB,MAGAY,EAAA+5B,QAAA,SAAApV,EAAA4V,GAyBA,MAxBA5V,GAAAsJ,WAAA7uB,OACAm7B,GACA5V,EAAAmN,UAAA,MAGAnN,EAAAsX,MACAtX,EAAAsX,MAAArJ,MAAAjO,EAAAiO,MACKxzB,KAAA63B,SAAAtS,IACLvlB,KAAA63B,OAAAtS,EAAAiO,OAEAjO,EAAAiO,MACAjO,EAAAiO,MAAAqJ,MAAAtX,EAAAsX,MACK78B,KAAAq7B,QAAA9V,IACLvlB,KAAAq7B,MAAA9V,EAAAsX,OAEAtX,EAAAiO,MAAAjO,EAAAsX,MAAAtX,EAAAsJ,SAAA,KACAtJ,IAAAvlB,KAAAq9B,UACAr9B,KAAAq9B,QAAAr9B,KAAAq7B,OAGAr7B,KAAAwyB,WACAxyB,KAAAiyB,UAAA,IAGAjyB,MAGAY,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,GACA,GACArK,GADA/D,EAAAvlB,KAAA63B,MAGA,KADA73B,KAAAmzB,WAAAnzB,KAAAyyB,MAAAzyB,KAAAw0B,aAAAf,EACAlO,GACA+D,EAAA/D,EAAAiO,OACAjO,EAAAwP,SAAAtB,GAAAlO,EAAA3L,aAAA2L,EAAA1M,WACA0M,EAAAqP,UAGArP,EAAAlT,QAAAkT,EAAA0L,OAAA1L,EAAA4O,gBAAA5O,EAAA6O,iBAAAX,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,GAFApO,EAAAlT,QAAAohB,EAAAlO,EAAA3L,YAAA2L,EAAA0T,WAAAvF,EAAAC,IAKApO,EAAA+D,GAIA1oB,EAAAo6B,QAAA,WAIA,MAHAgrB,IACAD,EAAAqC,OAEApoD,KAAAmzB,WAQA,IAAAlF,GAAA41B,EAAA,qBAAA94C,EAAAwO,EAAA8W,GAIA,GAHAL,EAAAvvB,KAAAT,KAAAuZ,EAAA8W,GACArwB,KAAAqS,OAAA4b,EAAAntB,UAAAuR,OAEA,MAAAtH,EACA,kCAGA/K,MAAA+K,SAAA,mBAAAA,EAAAkjB,EAAA2I,SAAA7rB,KAEA,IAEAhL,GAAAgrD,EAAAz6B,EAFAgB,EAAAvmB,EAAAigD,QAAAjgD,EAAAmB,QAAAnB,IAAAtH,GAAAsH,EAAA,KAAAA,EAAA,KAAAtH,GAAAsH,EAAA,GAAA21C,UAAA31C,EAAA,GAAA8G,QAAA9G,EAAA21C,UACAlpB,EAAAx3B,KAAAqwB,KAAAmH,SAKA,IAFAx3B,KAAAirD,WAAAzzB,EAAA,MAAAA,EAAA0zB,EAAAj9B,EAAAk9B,kBAAA,mBAAA3zB,GAAA,EAAA0zB,EAAA1zB,IAEAlG,GAAAvmB,YAAA6gB,QAAA7gB,EAAAiI,MAAAue,EAAAxmB,KAAA,gBAAAA,GAAA,GAIA,IAHA/K,KAAAwiD,SAAAlyB,EAAAJ,EAAAnlB,GACA/K,KAAAijD,eACAjjD,KAAAorD,aACArrD,EAAA,EAAgBA,EAAAuwB,EAAApkB,OAAoBnM,IACpCgrD,EAAAz6B,EAAAvwB,GACAgrD,EAGO,mBAMAA,EAAA7+C,QAAA6+C,IAAAtnD,GAAAsnD,EAAA,KAAAA,EAAA,KAAAtnD,GAAAsnD,EAAA,GAAArK,UAAAqK,EAAA,GAAAl5C,QAAAk5C,EAAArK,WACPpwB,EAAApd,OAAAnT,IAAA,GACAC,KAAAwiD,SAAAlyB,IAAAhvB,OAAA4uB,EAAA66B,MAGA/qD,KAAAorD,UAAArrD,GAAAsrD,GAAAN,EAAA/qD,MAAA,GACA,IAAAw3B,GAAAx3B,KAAAorD,UAAArrD,GAAAmM,OAAA,GACAo/C,GAAAP,EAAA/qD,KAAA,OAAAA,KAAAorD,UAAArrD,MAZAgrD,EAAAz6B,EAAAvwB,KAAAkuB,EAAA2I,SAAAm0B,GACA,oBACAz6B,EAAApd,OAAAnT,EAAA,MALAuwB,EAAApd,OAAAnT,IAAA,OAoBAC,MAAAijD,eACAjjD,KAAAorD,UAAAC,GAAAtgD,EAAA/K,MAAA,GACA,IAAAw3B,GAAAx3B,KAAAorD,UAAAl/C,OAAA,GACAo/C,GAAAvgD,EAAA/K,KAAA,OAAAA,KAAAorD,YAGAprD,KAAAqwB,KAAAkC,iBAAA,IAAAhZ,GAAA,IAAAvZ,KAAA4yB,QAAA5yB,KAAAqwB,KAAAkC,mBAAA,KACAvyB,KAAAyyB,OAAAvB,EACAlxB,KAAAqS,OAAA0M,KAAA0xB,IAAA,GAAAzwC,KAAA4yB,YAEI,GACJvB,EAAA,SAAAmI,GACA,MAAAA,MAAAttB,QAAAstB,IAAA/1B,GAAA+1B,EAAA,KAAAA,EAAA,KAAA/1B,GAAA+1B,EAAA,GAAAknB,UAAAlnB,EAAA,GAAA3nB,QAAA2nB,EAAAknB,WAEA1Z,EAAA,SAAA3W,EAAAtlB,GACA,GACAnK,GADA2qD,IAEA,KAAA3qD,IAAAyvB,GACAiyB,EAAA1hD,QAAAmK,IAAA,cAAAnK,GAAA,MAAAA,GAAA,MAAAA,GAAA,UAAAA,GAAA,WAAAA,GAAA,cAAAA,GAAA,WAAAA,MAAA4qD,EAAA5qD,IAAA4qD,EAAA5qD,IAAA4qD,EAAA5qD,GAAAomC,YACAukB,EAAA3qD,GAAAyvB,EAAAzvB,SACAyvB,GAAAzvB;AAGAyvB,EAAAk7B,MAGA3qD,GAAAqtB,EAAAntB,UAAA,GAAAkvB,GACApvB,EAAAc,YAAAusB,EACArtB,EAAAwqB,OAAAsG,KAAA,EAIA9wB,EAAAyxB,MAAA,EACAzxB,EAAAmyB,SAAAnyB,EAAA4hD,SAAA5hD,EAAA6qD,kBAAA7qD,EAAA00B,SAAA,KACA10B,EAAAkyB,wBAAAlyB,EAAAy0B,OAAA,EAEApH,EAAAwD,QAAA,SACAxD,EAAAy9B,YAAA9qD,EAAA6zB,MAAA,GAAA2J,GAAA,eACAnQ,EAAAk9B,iBAAA,OACAl9B,EAAA8D,OAAAg0B,EACA93B,EAAA09B,UAAA,IACA19B,EAAA6D,aAAA,SAAAiS,EAAA+lB,GACA/D,EAAAj0B,aAAAiS,EAAA+lB,IAGA77B,EAAA2I,SAAAnzB,EAAAmoD,GAAAnoD,EAAAooD,QAAA,SAAAhsD,GACA,GAAA+2B,GAAAnzB,EAAAmoD,GAAAnoD,EAAAooD,MACA,OAAAj1B,IACA3I,EAAA2I,WACAA,EAAA/2B,IAEA,6BAAAA,EAAAsJ,SAAAkD,iBAAAlD,SAAAkD,iBAAAxM,GAAAsJ,SAAAC,eAAA,MAAAvJ,EAAAm8B,OAAA,GAAAn8B,EAAAq8B,OAAA,GAAAr8B,GAGA,IAAA+5B,MACAkyB,KACAC,EAAA,iDAEAC,EAAA,SAAAxyB,GAIA,IAHA,GAEAlsB,GAFAimB,EAAAvzB,KAAA+yB,SACA0d,EAAA,KAEAld,GACAjmB,EAAAimB,EAAAqvB,KAAAppB,EAAAx5B,KAAAy5B,KAAA,IAAAz5B,KAAA2V,MAAA4d,EAAA5yB,EAAA64B,EAAAjG,EAAAlb,EACAkb,EAAA7yB,EACA4M,EAAAimB,EAAA7yB,EAAA4M,EAAAtN,KAAAwkC,SAAAjR,EAAAkC,GACMnoB,EAAAmjC,GAAAnjC,GAAAmjC,IACNnjC,EAAA,GAEAimB,EAAAiC,EAEMjC,EAAA04B,GACN14B,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA04B,GAAA3+C,GAEAimB,EAAAkC,EAAAlC,EAAA3yB,GAAA0M,GAJAimB,EAAAkC,EAAAlC,EAAA3yB,GAAA0M,EAMAimB,IAAAC,OAIA04B,EAAA,SAAAv2C,EAAAsoB,EAAA8N,EAAAxY,GACA,GAIA44B,GAAAC,EAAAC,EAAAtsD,EAAAowB,EAAAm8B,EAAAC,EAJAzsD,GAAA6V,EAAAsoB,GACAwU,EAAA,EACAp6B,EAAA,GACA3R,EAAA,CAiBA,KAfA5G,EAAA6V,QACAo2B,IACAA,EAAAjsC,GACA6V,EAAA7V,EAAA,GACAm+B,EAAAn+B,EAAA,IAEAA,EAAAoM,OAAA,EACAigD,EAAAx2C,EAAAtI,MAAA0+C,OACAK,EAAAnuB,EAAA5wB,MAAA0+C,OACAx4B,IACAA,EAAAC,MAAA,KACAD,EAAAqvB,KAAA,EACA9iD,EAAAizB,SAAAjzB,EAAA0sD,SAAAj5B,GAEApD,EAAAi8B,EAAAlgD,OACAnM,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtBwsD,EAAAH,EAAArsD,GACAusD,EAAAruB,EAAA/B,OAAAuW,EAAAxU,EAAA9S,QAAAohC,EAAA9Z,MACAp6B,GAAAi0C,IAAAvsD,EAAAusD,EAAA,IACA7Z,GAAA6Z,EAAApgD,OACAxF,EACAA,KAAA,KACM,UAAA4lD,EAAApwB,aACNx1B,EAAA,GAEA6lD,IAAAJ,EAAApsD,IAAAosD,EAAAjgD,QAAAnM,EACAsY,GAAAk0C,GAEAl0C,IACAvY,EAAAkT,KAAAqF,GACAA,EAAA,IAEAg0C,EAAAztC,WAAAutC,EAAApsD,IACAD,EAAAkT,KAAAq5C,GACAvsD,EAAAizB,UAAoBS,MAAA1zB,EAAAizB,SAAA0C,EAAA31B,EAAAc,EAAAd,EAAAoM,OAAA,EAAAmM,EAAAg0C,EAAA1rD,GAAA,MAAA4rD,EAAAvwB,OAAA,GAAA9lB,SAAAq2C,EAAAvwB,OAAA,WAAApd,WAAA2tC,EAAArwB,OAAA,IAAAtd,WAAA2tC,GAAAF,IAAA,EAAA72B,EAAA,EAAA90B,EAAAgG,KAAA,EAAAqY,KAAA+0B,MAAA,IAGpBrB,GAAA8Z,EAAArgD,MAOA,OALAmM,IAAA4lB,EAAA/B,OAAAuW,GACAp6B,GACAvY,EAAAkT,KAAAqF,GAEAvY,EAAA8nC,SAAAokB,EACAlsD,GAGA2sD,EAAA,SAAA1hD,EAAA08B,EAAA9xB,EAAAsoB,EAAA0W,EAAAZ,EAAA2Y,EAAAC,EAAAhpB,GACA,uBACA1F,IAAA0F,GAAA,EAAA54B,GAEA,IAIA63C,GAAAgK,EAJAv0C,EAAA,QAAA1C,EAAA5K,EAAA08B,GAAA9xB,EACAoe,QAAAhpB,GAAA08B,GACA+I,EAAA,0BAAAvS,EAAAjC,OAAA,GACAzI,GAAWkC,EAAA1qB,EAAAnK,EAAA6mC,EAAApvB,IAAAmd,EAAA,aAAAzB,EAAAmvB,GAAA,EAAA1O,EAAAG,GAAAlN,EAAA/mC,EAAAqzC,EAAA,qBAAAA,EAAAh1B,KAAA+0B,MAAA,EAAAW,GAAA,EAAA9zC,EAAA6vC,EAAAt6B,SAAA+nB,EAAAjC,OAAA,WAAApd,WAAAqf,EAAA/B,OAAA,IAAAtd,WAAAqf,GAAA5lB,GAAA,EAiBX,IAfA,WAAA0b,IACA,aAAAA,GAAA,QAAApe,IACAi3C,EAAAnlB,EAAAtc,QAAA,0BAAApgB,GAAA,MAAA08B,EAAAvL,OAAA,IAAAuL,EAAA,MAAAA,EAAAvL,OAAA,GACA3I,EAAAlb,IAAAq0C,EAAA3hD,EAAA6hD,GAAAF,GAAA3hD,EAAA6hD,MAEA,qBAAAF,GAAA3/B,MAAA1U,KAEAkb,EAAA04B,GAAAS,EACA9J,EAAAsJ,EAAA7zC,EAAA4lB,EAAA0uB,GAAA1+B,EAAA6kB,oBAAAvf,GACAA,GAAYkC,EAAAmtB,EAAAhiD,EAAA,WAAAyX,EAAA,EAAA1X,EAAA,EAAA60B,EAAA,EAAA0tB,GAAA,EAAA1O,EAAAG,GAAAlN,EAAAgN,GAAA,EAAA/zC,EAAA,IACN8vC,IACNjd,EAAAlb,EAAAuG,WAAAvG,GACAkb,EAAA5yB,EAAAie,WAAAqf,GAAA1K,EAAAlb,GAAA,IAGAkb,EAAA5yB,EAKA,OAJA4yB,EAAAC,MAAAxzB,KAAA+yB,YACAQ,EAAAC,MAAAqJ,MAAAtJ,GAEAvzB,KAAA+yB,SAAAQ,EACAA,GAGAnC,EAAAnD,EAAAmD,YAAwCxE,QAAA2E,EAAAD,WAAAD,EAAA+D,WAAAwE,EAAAizB,QAAAX,GACxCV,EAAAv9B,EAAAu9B,YACAsB,EAAA17B,EAAAwH,eACAm0B,EAAA,EACAzK,EAAAlxB,EAAAmxB,eAAgD70B,KAAA,EAAAH,MAAA,EAAAiK,UAAA,EAAAf,WAAA,EAAAY,iBAAA,EAAAX,gBAAA,EAAArJ,UAAA,EAAAuI,aAAA,EAAAI,QAAA,EAAAuD,SAAA,EAAAyzB,eAAA,EAAAC,cAAA,EAAA13B,QAAA,EAAA23B,cAAA,EAAAC,aAAA,EAAA71B,kBAAA,EAAAC,wBAAA,EAAA61B,uBAAA,EAAA13B,SAAA,EAAA23B,eAAA,EAAAC,cAAA,EAAAC,WAAA,EAAA38B,KAAA,EAAA2B,gBAAA,EAAAzB,OAAA,EAAAE,YAAA,EAAA1E,KAAA,EAAAvS,OAAA,EAAAowC,SAAA,EAAAqD,QAAA,EAAA14B,KAAA,EAAA24B,YAAA,EAAA1/B,cAAA,EAAA4+B,aAAA,EAAApsD,GAAA,GAChD2qD,GAAuBzR,KAAA,EAAAja,IAAA,EAAAkuB,KAAA,EAAAC,WAAA,EAAAC,WAAA,EAAAC,YAAA,EAAAC,OAAA,EAAAC,QAAA,GACvB/1B,EAAAhI,EAAAgI,oBAAA,GAAA/H,GACA8H,EAAA/H,EAAA+H,cAAA,GAAA9H,GACA+9B,EAAA,GACAn0B,GAAAzI,EAAA0I,WAAA,WACA,GACAvU,GADAxlB,EAAA65B,EAAA1tB,MAGA,KADA4/C,OACA/rD,MACAwlB,EAAAqU,EAAA75B,GACAwlB,KAAA8P,SAAA,IACA9P,EAAAlT,OAAAkT,EAAA8P,MAAA,GAAA9P,EAAA8P,MAAA,OACA9P,EAAA8P,OAAA,EAGAuE,GAAA1tB,OAAA,EAGA6rB,GAAAne,WAAAmsC,EAAAtyB,KACAuE,EAAApe,WAAAmsC,EAAAnzC,MACAmlB,EAAAhD,QAAAiD,EAAAjD,SAAA,EACAzf,WAAAukB,GAAA,GAEA7J,EAAAi+B,YAAAhgC,EAAA5b,OAAA,WACA,GAAAtS,GAAAD,EAAAc,CASA,IARAg5B,EAAA1tB,QACA2tB,KAEA9B,EAAA1lB,QAAA0zC,EAAAtyB,KAAAsE,EAAAne,YAAAme,EAAAkB,YAAA,MACAjB,EAAA3lB,QAAA0zC,EAAAnzC,MAAAolB,EAAApe,YAAAoe,EAAAiB,YAAA,MACAW,EAAA1tB,QACA2tB,KAEAksB,EAAAnzC,OAAAo7C,EAAA,CACAA,EAAAjI,EAAAnzC,OAAAsD,SAAA+X,EAAA09B,UAAA,SACA,KAAA/qD,IAAAksD,GAAA,CAGA,IAFAhtD,EAAAgtD,EAAAlsD,GAAAwkB,OACArlB,EAAAD,EAAAoM,SACAnM,MACAD,EAAAC,GAAA2xB,KACA5xB,EAAAoT,OAAAnT,EAAA,EAGA,KAAAD,EAAAoM,cACA4gD,GAAAlsD,GAKA,GADAA,EAAAm3B,EAAAF,SACAj3B,KAAAiY,UAAAoV,EAAA09B,YAAA3zB,EAAAH,QAAA,IAAAkuB,EAAAgC,WAAA8B,KAAA39C,OAAA,CACA,KAAAtL,KAAAiY,SACAjY,IAAA4yB,KAEA5yB,IACAmlD,EAAAgE,WAMAhE,EAAAh0C,iBAAA,OAAAie,EAAAi+B,YAEA,IAAA5C,IAAA,SAAAtgD,EAAAwa,EAAA2oC,GACA,GAAApuD,GAAAC,EAAAQ,EAAAwK,EAAAojD,UAIA,IAHArB,EAAAvsD,IAAAwK,EAAAojD,WAAA5tD,EAAA,IAAAwsD,QACAD,EAAAvsD,IAAyBwK,SAAAqa,YAEzBG,IACAzlB,EAAAgtD,EAAAvsD,GAAA6kB,OACAtlB,EAAAC,EAAAD,EAAAoM,QAAAqZ,EACA2oC,GACA,OAAAnuD,MACAD,EAAAC,KAAAwlB,GACAzlB,EAAAoT,OAAAnT,EAAA,EAKA,OAAA+sD,GAAAvsD,GAAA6kB,QAEAgpC,GAAA,SAAAC,EAAAC,EAAAvjD,EAAAwjD,GACA,GAAArsB,GAAAC,EAAAmE,EAAA+nB,EAAAh+B,KAAAo9B,WAQA,OAPAnnB,KACApE,EAAAoE,EAAA+nB,EAAAC,EAAAvjD,EAAAwjD,IAEAjoB,EAAArY,EAAAw/B,YACAnnB,IACAnE,EAAAmE,EAAA+nB,EAAAC,EAAAvjD,EAAAwjD,IAEArsB,KAAA,GAAAC,KAAA,GAEAmpB,GAAA,SAAAvgD,EAAAwa,EAAAud,EAAA0rB,EAAAC,GACA,GAAA1uD,GAAA49B,EAAA+wB,EAAAv+B,CACA,QAAAq+B,MAAA,GAEA,IADAr+B,EAAAs+B,EAAAviD,OACAnM,EAAA,EAAgBA,EAAAowB,EAAOpwB,IACvB,IAAA2uD,EAAAD,EAAA1uD,MAAAwlB,EACAmpC,EAAAh9B,KACAg9B,EAAAhxB,MAAA,KAAA3yB,EAAAwa,KACAoY,GAAA,OAGO,QAAA6wB,EACP,KAGA,OAAA7wB,GAGA,GAIAgxB,GAJAnE,EAAAjlC,EAAA3L,WAAAsX,EACA09B,KACAC,EAAA,EACAC,EAAA,IAAAvpC,EAAA0N,SAGA,KADAlzB,EAAA0uD,EAAAviD,SACAnM,OACA2uD,EAAAD,EAAA1uD,MAAAwlB,GAAAmpC,EAAAh9B,KAAAg9B,EAAA71C,UAEM61C,EAAAl8B,YAAAjN,EAAAiN,WACNm8B,KAAAI,GAAAxpC,EAAA,EAAAupC,GACA,IAAAC,GAAAL,EAAAC,EAAAG,KACAF,EAAAC,KAAAH,IAEMA,EAAA90C,YAAA4wC,GAAAkE,EAAA90C,WAAA80C,EAAAv6B,gBAAAu6B,EAAAz1B,WAAAuxB,KAAAsE,IAAAJ,EAAA77B,WAAA23B,EAAAkE,EAAA90C,YAAA,QACNg1C,EAAAC,KAAAH,IAKA,KADA3uD,EAAA8uD,IACA9uD,MAKA,GAJA2uD,EAAAE,EAAA7uD,GACA,IAAAyuD,GAAAE,EAAAhxB,MAAAoF,EAAA/3B,EAAAwa,KACAoY,GAAA,GAEA,IAAA6wB,IAAAE,EAAA37B,UAAA27B,EAAA77B,SAAA,CACA,OAAA27B,IAAAJ,GAAAM,EAAAnpC,GACA,QAEAmpC,GAAAh8B,UAAA,QACAiL,GAAA,GAIA,MAAAA,IAEAoxB,GAAA,SAAAxpC,EAAAypC,EAAAF,GAIA,IAHA,GAAAn2B,GAAApT,EAAAiN,UACAy8B,EAAAt2B,EAAAM,WACAxD,EAAAlQ,EAAA3L,WACA+e,EAAAnG,WAAA,CAGA,GAFAiD,GAAAkD,EAAA/e,WACAq1C,GAAAt2B,EAAAM,WACAN,EAAA9f,QACA,UAEA8f,KAAAnG,UAGA,MADAiD,IAAAw5B,EACAx5B,EAAAu5B,EAAAv5B,EAAAu5B,EAAAF,GAAAr5B,IAAAu5B,IAAAzpC,EAAAsN,UAAA4C,EAAAu5B,EAAA,EAAA99B,KAAAuE,GAAAlQ,EAAA4O,gBAAA5O,EAAA0T,WAAAg2B,GAAAD,EAAA99B,EAAA,EAAAuE,EAAAu5B,EAAA99B,EAMAtwB,GAAAwyB,MAAA,WACA,GAKArzB,GAAAmvD,EAAA37B,EAAA3yB,EAAAuuD,EAAAh/B,EALAqJ,EAAAx5B,KAAAqwB,KACA+X,EAAApoC,KAAAyrD,kBACA1sB,EAAA/+B,KAAAizB,UACAX,IAAAkH,EAAAjH,gBACA7E,EAAA8L,EAAA9L,IAEA,IAAA8L,EAAAxD,QAAA,CACAh2B,KAAAs1B,WACAt1B,KAAAs1B,SAAAjjB,WAAA,GACArS,KAAAs1B,SAAAlK,QAEA+jC,IACA,KAAAvuD,IAAA44B,GAAAxD,QACAm5B,EAAAvuD,GAAA44B,EAAAxD,QAAAp1B,EAOA,IALAuuD,EAAA33B,WAAA,EACA23B,EAAA58B,iBAAA,EACA48B,EAAAr6B,KAAAxC,GAAAkH,EAAA1E,QAAA,EACAq6B,EAAAn5B,QAAAm5B,EAAA5hC,MAAA,KACAvtB,KAAAs1B,SAAArH,EAAAR,GAAAztB,KAAA+K,OAAA,EAAAokD,GACA78B,EACA,GAAAtyB,KAAAyyB,MAAA,EACAzyB,KAAAs1B,SAAA,SACM,QAAAyJ,EACN,WAGI,IAAAvF,EAAA5D,cAAA,IAAAmJ,EAEJ,GAAA/+B,KAAAs1B,SACAt1B,KAAAs1B,SAAAjjB,WAAA,GACArS,KAAAs1B,SAAAlK,OACAprB,KAAAs1B,SAAA,SACK,CACL,IAAAt1B,KAAAyyB,QACAH,GAAA,GAEAiB,IACA,KAAA3yB,IAAA44B,GACA8oB,EAAA1hD,IAAA,YAAAA,IACA2yB,EAAA3yB,GAAA44B,EAAA54B,GAQA,IALA2yB,EAAAiE,UAAA,EACAjE,EAAAjH,KAAA,cACAiH,EAAAuB,KAAAxC,GAAAkH,EAAA1E,QAAA,EACAvB,EAAAhB,gBAAAD,EACAtyB,KAAAs1B,SAAArH,EAAAR,GAAAztB,KAAA+K,OAAA,EAAAwoB,GACAjB,GAMM,OAAAtyB,KAAAyyB,MACN,WANAzyB,MAAAs1B,SAAAlC,QACApzB,KAAAs1B,SAAA5C,UAAA,GACA1yB,KAAAqwB,KAAAkC,kBACAvyB,KAAAs1B,SAAA,MAeA,GARAt1B,KAAAy0B,MAAA/G,gBAAA0Q,GAAA1Q,EAAA,wBAAA0Q,GAAA1Q,EAAA8L,EAAA+zB,YAAApG,EAAAz5B,IAAAO,EAAAy9B,YAAAz9B,EAAAy9B,YACAlyB,EAAA+zB,qBAAA3hC,QAAA8B,EAAAsB,SACAhvB,KAAAy0B,MAAA/G,EAAAsB,OAAA3tB,MAAAqsB,EAAA8L,EAAA+zB,aAEAvtD,KAAAg1B,UAAAh1B,KAAAy0B,MAAAuyB,MACAhnD,KAAAi1B,WAAAj1B,KAAAy0B,MAAAwyB,OACAjnD,KAAA+yB,SAAA,KAEA/yB,KAAAwiD,SAEA,IADAryB,EAAAnwB,KAAAwiD,SAAAt2C,OACAnM,EAAA,EAAeA,EAAAowB,EAAOpwB,IACtBC,KAAAovD,WAAApvD,KAAAwiD,SAAAziD,GAAAC,KAAAijD,YAAAljD,MAAsEC,KAAAorD,UAAArrD,GAAAqoC,IAAAroC,GAAA,KAAAA,KACtEmvD,GAAA,OAIAA,GAAAlvD,KAAAovD,WAAApvD,KAAA+K,OAAA/K,KAAAijD,YAAAjjD,KAAAorD,UAAAhjB,EAAA,EASA,IANA8mB,GACAjhC,EAAA+E,eAAA,kBAAAhzB,MAEAooC,IAAApoC,KAAA+yB,UAAA,kBAAA/yB,MAAA,QACAA,KAAA0yB,UAAA,OAEA8G,EAAA5D,aAEA,IADArC,EAAAvzB,KAAA+yB,SACAQ,GACAA,EAAAlb,GAAAkb,EAAA5yB,EACA4yB,EAAA5yB,GAAA4yB,EAAA5yB,EACA4yB,IAAAC,KAGAxzB,MAAAk1B,UAAAsE,EAAAD,SACAv5B,KAAA6yB,UAAA,GAGAjyB,EAAAwuD,WAAA,SAAArkD,EAAAskD,EAAAZ,EAAAa,EAAA3rB,GACA,GAAA/iC,GAAAb,EAAAmvD,EAAA/qB,EAAA5Q,EAAAiG,CACA,UAAAzuB,EACA,QAGA+gD,GAAA/gD,EAAAojD,aACAt0B,KAGA75B,KAAAqwB,KAAAk7B,KAAAxgD,EAAA8G,OAAA9G,IAAAtH,GAAAsH,EAAA21C,UAAA8K,EAAAD,KAAAvrD,KAAAqwB,KAAAm9B,WAAA,GACAxmB,EAAAhnC,KAAAqwB,KAAAtlB,EAEA,KAAAnK,IAAAZ,MAAAqwB,KAEA,GADAmJ,EAAAx5B,KAAAqwB,KAAAzvB,GACA0hD,EAAA1hD,GACA44B,gBAAA5N,QAAA4N,EAAAxmB,MAAAue,EAAAiI,OAAAC,KAAA,IAAAtO,QAAA,iBACAnrB,KAAAqwB,KAAAzvB,GAAA44B,EAAAx5B,KAAA05B,kBAAAF,EAAAx5B,WAGK,IAAAwrD,EAAA5qD,KAAAujC,EAAA,GAAAqnB,GAAA5qD,IAAAqnC,aAAAl9B,EAAA/K,KAAAqwB,KAAAzvB,GAAAZ,KAAA2jC,GAAA,CAaL,IAFA3jC,KAAA+yB,SAAAQ,GAA2BC,MAAAxzB,KAAA+yB,SAAA0C,EAAA0O,EAAAvjC,EAAA,WAAAyX,EAAA,EAAA1X,EAAA,EAAA60B,EAAA,EAAAgf,EAAA5zC,EAAAsiD,GAAA,EAAAzO,GAAAtQ,EAAAorB,UAAA7uD,EAAA,GAC3BX,EAAAokC,EAAAgB,gBAAAj5B,SACAnM,MACAsvD,EAAAlrB,EAAAgB,gBAAAplC,IAAAC,KAAA+yB,UAEAoR,EAAAorB,WAAAprB,EAAA0e,mBACAqM,GAAA,IAEA/qB,EAAAqrB,YAAArrB,EAAAsrB,aACAzvD,KAAA8yB,yBAAA,GAEAS,EAAAC,QACAD,EAAAC,MAAAqJ,MAAAtJ,OAIA87B,GAAAzuD,GAAA6rD,EAAAhsD,KAAAT,KAAA+K,EAAAnK,EAAA,MAAA44B,EAAA54B,EAAA,OAAAZ,KAAAqwB,KAAAs8B,aAAAhpB,EAIA,OAAA2rB,IAAAtvD,KAAA09B,MAAA4xB,EAAAvkD,GACA/K,KAAAovD,WAAArkD,EAAAskD,EAAAZ,EAAAa,EAAA3rB,GAEA3jC,KAAAirD,WAAA,GAAAjrD,KAAA+yB,UAAA07B,EAAAviD,OAAA,GAAAo/C,GAAAvgD,EAAA/K,KAAAqvD,EAAArvD,KAAAirD,WAAAwD,IACAzuD,KAAA09B,MAAA2xB,EAAAtkD,GACA/K,KAAAovD,WAAArkD,EAAAskD,EAAAZ,EAAAa,EAAA3rB,KAEA3jC,KAAA+yB,WAAA/yB,KAAAqwB,KAAAyE,QAAA,GAAA90B,KAAAizB,WAAAjzB,KAAAqwB,KAAAyE,OAAA90B,KAAAizB,aACA64B,EAAA/gD,EAAAojD,aAAA,GAEAe,IAGAtuD,EAAAyR,OAAA,SAAAohB,EAAAC,EAAAC,GACA,GAGAC,GAAAC,EAAAN,EAAAU,EAHAf,EAAAlzB,KAAAyyB,MACAlZ,EAAAvZ,KAAAizB,UACAsB,EAAAv0B,KAAAw0B,YAEA,IAAAf,GAAAla,EAAA,KACAvZ,KAAAmzB,WAAAnzB,KAAAyyB,MAAAlZ,EACAvZ,KAAAqyB,MAAAryB,KAAAy0B,MAAAC,SAAA10B,KAAAy0B,MAAAE,SAAA,KACA30B,KAAA40B,YACAhB,GAAA,EACAC,EAAA,aACAF,KAAA3zB,KAAAwyB,UAAAqC,oBAEA,IAAAtb,IAAAvZ,KAAA6yB,WAAA7yB,KAAAqwB,KAAAyE,MAAAnB,KACA3zB,KAAA4Z,aAAA5Z,KAAAwyB,UAAAS,YACAQ,EAAA,IAEAc,EAAA,GAAAd,GAAA,GAAAA,UAAAc,IAAArD,GAAA,YAAAlxB,KAAAssB,OAAAiI,IAAAd,IACAE,GAAA,EACAY,EAAArD,IACA2C,EAAA,sBAGA7zB,KAAAw0B,aAAAP,GAAAP,GAAAD,GAAAc,IAAAd,IAAAvC,OAGI,IAAAuC,EAAA,KACJzzB,KAAAmzB,WAAAnzB,KAAAyyB,MAAA,EACAzyB,KAAAqyB,MAAAryB,KAAAy0B,MAAAC,SAAA10B,KAAAy0B,MAAAE,SAAA,MACA,IAAAzB,GAAA,IAAA3Z,GAAAgb,EAAA,KACAV,EAAA,oBACAD,EAAA5zB,KAAA40B,WAEAnB,EAAA,IACAzzB,KAAA+0B,SAAA,EACA,IAAAxb,IAAAvZ,KAAA6yB,WAAA7yB,KAAAqwB,KAAAyE,MAAAnB,KACAY,GAAA,IAAAA,IAAArD,GAAA,YAAAlxB,KAAAssB,QACAqH,GAAA,GAEA3zB,KAAAw0B,aAAAP,GAAAP,GAAAD,GAAAc,IAAAd,IAAAvC,IAGAlxB,KAAA6yB,WACAc,GAAA,OAKA,IAFA3zB,KAAAmzB,WAAAnzB,KAAAyyB,MAAAgB,EAEAzzB,KAAAg1B,UAAA,CACA,GAAAjZ,GAAA0X,EAAAla,EAAAwa,EAAA/zB,KAAAg1B,UAAAhB,EAAAh0B,KAAAi1B,YACA,IAAAlB,GAAA,IAAAA,GAAAhY,GAAA,MACAA,EAAA,EAAAA,GAEA,IAAAgY,IACAhY,GAAA,GAEA,IAAAiY,EACAjY,KACM,IAAAiY,EACNjY,OACM,IAAAiY,EACNjY,SACM,IAAAiY,IACNjY,YAGA,IAAAgY,EACA/zB,KAAAqyB,MAAA,EAAAtW,EACM,IAAAgY,EACN/zB,KAAAqyB,MAAAtW,EACM0X,EAAAla,EAAA,GACNvZ,KAAAqyB,MAAAtW,EAAA,EAEA/b,KAAAqyB,MAAA,EAAAtW,EAAA,MAIA/b,MAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAAlB,EAAAla,EAIA,IAAAvZ,KAAAyyB,QAAAS,GAAAS,EAAA,CAEI,IAAA3zB,KAAA6yB,SAAA,CAEJ,GADA7yB,KAAAozB,SACApzB,KAAA6yB,UAAA7yB,KAAA0xB,IACA,MACK,KAAAiC,GAAA3zB,KAAA+yB,WAAA/yB,KAAAqwB,KAAAyE,QAAA,GAAA90B,KAAAizB,WAAAjzB,KAAAqwB,KAAAyE,OAAA90B,KAAAizB,WAKL,MAJAjzB,MAAAyyB,MAAAzyB,KAAAmzB,WAAAD,EACAlzB,KAAAw0B,aAAAD,EACAqF,EAAA5mB,KAAAhT,WACAA,KAAAq1B,OAAA5B,EAAAC,GAIA1zB,MAAAyyB,QAAAmB,EACA5zB,KAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAA30B,KAAAyyB,MAAAlZ,GACKqa,GAAA5zB,KAAAy0B,MAAAC,WACL10B,KAAAqyB,MAAAryB,KAAAy0B,MAAAE,SAAA,IAAA30B,KAAAyyB,MAAA,MAsBA,IAnBAzyB,KAAAq1B,SAAA,IACAr1B,KAAAq1B,OAAA,GAEAr1B,KAAA+0B,UAAA/0B,KAAA6Y,SAAA7Y,KAAAyyB,QAAAS,GAAAO,GAAA,IACAzzB,KAAA+0B,SAAA,GAEA,IAAA7B,IACAlzB,KAAAs1B,WACA7B,GAAA,EACAzzB,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GACME,IACNA,EAAA,aAGA7zB,KAAAqwB,KAAAkF,UAAA,IAAAv1B,KAAAyyB,OAAA,IAAAlZ,GAAAma,GACA1zB,KAAAm1B,UAAA,aAGA5B,EAAAvzB,KAAA+yB,SACAQ,GACAA,EAAAiC,EACAjC,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA5yB,EAAAX,KAAAqyB,MAAAkB,EAAAlb,GAEAkb,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAA5yB,EAAAX,KAAAqyB,MAAAkB,EAAAlb,EAEAkb,IAAAC,KAGAxzB,MAAAk1B,YACAzB,EAAA,GAAAzzB,KAAAs1B,UAAA7B,WACAzzB,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GAEAD,IAAA1zB,KAAAyyB,QAAAS,GAAAU,GAAAD,IACA3zB,KAAAm1B,UAAA,aAGAtB,IAAA7zB,KAAA0xB,MAAAiC,IACAF,EAAA,GAAAzzB,KAAAs1B,WAAAt1B,KAAAk1B,WAAAzB,WACAzzB,KAAAs1B,SAAAjjB,OAAAohB,EAAAC,EAAAC,GAEAC,IACA5zB,KAAAwyB,UAAAqC,oBACA70B,KAAA0yB,UAAA,MAEA1yB,KAAA+0B,SAAA,IAEArB,GAAA1zB,KAAAqwB,KAAAwD,IACA7zB,KAAAm1B,UAAAtB,GAEA,IAAAta,GAAAvZ,KAAAw0B,eAAAtD,GAAA+C,IAAA/C,IACAlxB,KAAAw0B,aAAA,OAKA5zB,EAAA88B,MAAA,SAAArN,EAAAtlB,EAAAujD,GAIA,GAHA,QAAAj+B,IACAA,EAAA,MAEA,MAAAA,IAAA,MAAAtlB,OAAA/K,KAAA+K,QAEA,MADA/K,MAAAq1B,OAAA,EACAr1B,KAAA0yB,UAAA,KAEA3nB,GAAA,mBAAAA,GAAA/K,KAAAwiD,UAAAxiD,KAAA+K,OAAAkjB,EAAA2I,SAAA7rB,KACA,IACAhL,GAAAuvD,EAAA1uD,EAAA2yB,EAAA87B,EAAA1xB,EAAA+xB,EAAAC,EAAAC,EADAC,EAAAvB,GAAAtuD,KAAAyyB,OAAA67B,EAAA10C,aAAA5Z,KAAA4Z,YAAA5Z,KAAAwyB,YAAA87B,EAAA97B,SAEA,KAAAjB,EAAAxmB,IAAAsmB,EAAAtmB,KAAA,gBAAAA,GAAA,GAEA,IADAhL,EAAAgL,EAAAmB,SACAnM,MACAC,KAAA09B,MAAArN,EAAAtlB,EAAAhL,GAAAuuD,KACA3wB,GAAA,OAGI,CACJ,GAAA39B,KAAAwiD,UAEA,IADAziD,EAAAC,KAAAwiD,SAAAt2C,SACAnM,MACA,GAAAgL,IAAA/K,KAAAwiD,SAAAziD,GAAA,CACAsvD,EAAArvD,KAAAijD,YAAAljD,OACAC,KAAAyrD,kBAAAzrD,KAAAyrD,sBACA6D,EAAAtvD,KAAAyrD,kBAAA1rD,GAAAswB,EAAArwB,KAAAyrD,kBAAA1rD,OAA4F,KAC5F,YAGK,IAAAgL,IAAA/K,KAAA+K,OACL,QAEAskD,GAAArvD,KAAAijD,YACAqM,EAAAtvD,KAAAyrD,kBAAAp7B,EAAArwB,KAAAyrD,sBAAoF,MAGpF,GAAA4D,EAAA,CAGA,GAFAK,EAAAr/B,GAAAg/B,EACAM,EAAAt/B,IAAAi/B,GAAA,QAAAA,GAAAj/B,IAAAg/B,IAAA,qBAAAh/B,EAAAy/B,WACAxB,IAAArgC,EAAAw/B,aAAAztD,KAAAqwB,KAAAo9B,aAAA,CACA,IAAA7sD,IAAA8uD,GACAL,EAAAzuD,KACAgvD,IACAA,MAEAA,EAAA58C,KAAApS,GAGA,KAAAgvD,IAAAv/B,KAAA+9B,GAAApuD,KAAAsuD,EAAAvjD,EAAA6kD,GACA,SAIA,IAAAhvD,IAAA8uD,IACAn8B,EAAA87B,EAAAzuD,MACAivD,IACAt8B,EAAAiC,EACAjC,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAlb,GAEAkb,EAAAkC,EAAAlC,EAAA3yB,GAAA2yB,EAAAlb,EAEAslB,GAAA,GAEApK,EAAA2vB,IAAA3vB,EAAAkC,EAAAiI,MAAAgyB,KACA/xB,GAAA,GAEApK,EAAA2vB,IAAA,IAAA3vB,EAAAkC,EAAA0P,gBAAAj5B,SACAqnB,EAAAsJ,MACAtJ,EAAAsJ,MAAArJ,MAAAD,EAAAC,MACSD,IAAAvzB,KAAA+yB,WACT/yB,KAAA+yB,SAAAQ,EAAAC,OAEAD,EAAAC,QACAD,EAAAC,MAAAqJ,MAAAtJ,EAAAsJ,OAEAtJ,EAAAC,MAAAD,EAAAsJ,MAAA,YAEAwyB,GAAAzuD,IAEA+uD,IACAL,EAAA1uD,GAAA,IAGAZ,KAAA+yB,UAAA/yB,KAAA6yB,UACA7yB,KAAA0yB,UAAA,OAIA,MAAAiL,IAGA/8B,EAAAoxB,WAAA,WAYA,MAXAhyB,MAAA8yB,yBACA7E,EAAA+E,eAAA,aAAAhzB,MAEAA,KAAA+yB,SAAA/yB,KAAAyrD,kBAAAzrD,KAAAs1B,SAAAt1B,KAAAk1B,UAAA,KACAl1B,KAAA8yB,wBAAA9yB,KAAA+0B,QAAA/0B,KAAAq1B,OAAA,EACAr1B,KAAAijD,YAAAjjD,KAAA,eACAgwB,EAAAlvB,UAAAkxB,WAAAvxB,KAAAT,MACAA,KAAAqwB,KAAAkC,kBACAvyB,KAAAyyB,OAAAvB,EACAlxB,KAAAqS,OAAA0M,KAAA0xB,IAAA,GAAAzwC,KAAA4yB,UAEA5yB,MAGAY,EAAA8xB,SAAA,SAAAkL,EAAAC,GAIA,GAHAmoB,GACAD,EAAAqC,OAEAxqB,GAAA59B,KAAA0xB,IAAA,CACA,GACA3xB,GADAuwB,EAAAtwB,KAAAwiD,QAEA,IAAAlyB,EAEA,IADAvwB,EAAAuwB,EAAApkB,SACAnM,MACAC,KAAAorD,UAAArrD,GAAAsrD,GAAA/6B,EAAAvwB,GAAAC,MAAA,OAGAA,MAAAorD,UAAAC,GAAArrD,KAAA+K,OAAA/K,MAAA,GAIA,MADAgwB,GAAAlvB,UAAA4xB,SAAAjyB,KAAAT,KAAA49B,EAAAC,MACA79B,KAAA8yB,0BAAA9yB,KAAA+yB,WACA9E,EAAA+E,eAAA4K,EAAA,yBAAA59B,OAQAiuB,EAAAR,GAAA,SAAA1iB,EAAAwO,EAAA8W,GACA,UAAApC,GAAAljB,EAAAwO,EAAA8W,IAGApC,EAAA0H,KAAA,SAAA5qB,EAAAwO,EAAA8W,GAGA,MAFAA,GAAAuF,cAAA,EACAvF,EAAAkC,gBAAA,GAAAlC,EAAAkC,gBACA,GAAAtE,GAAAljB,EAAAwO,EAAA8W,IAGApC,EAAA4H,OAAA,SAAA9qB,EAAAwO,EAAAuc,EAAAC,GAGA,MAFAA,GAAAC,QAAAF,EACAC,EAAAxD,gBAAA,GAAAwD,EAAAxD,iBAAA,GAAAuD,EAAAvD,gBACA,GAAAtE,GAAAljB,EAAAwO,EAAAwc,IAGA9H,EAAAiJ,YAAA,SAAA3J,EAAAsG,EAAAsD,EAAAC,EAAA/J,GACA,UAAAY,GAAA4F,EAAA,GAAsCtG,QAAAkJ,WAAA5C,EAAAwD,iBAAAF,EAAApJ,cAAAqJ,EAAAE,kBAAAzD,EAAA0D,wBAAAJ,EAAA5E,iBAAA,EAAAuC,MAAA,EAAAzH,YAAAmK,UAAA,KAGtCvJ,EAAArR,IAAA,SAAA7R,EAAAslB,GACA,UAAApC,GAAAljB,EAAA,EAAAslB,IAGApC,EAAA4D,YAAA,SAAA9mB,EAAAglD,GACA,SAAAhlD,EAAwB,QACxBA,GAAA,mBAAAA,EAAAkjB,EAAA2I,SAAA7rB,KACA,IAAAhL,GAAAD,EAAA6iC,EAAAlN,CACA,KAAAlE,EAAAxmB,IAAAsmB,EAAAtmB,KAAA,gBAAAA,GAAA,IAGA,IAFAhL,EAAAgL,EAAAmB,OACApM,OACAC,MACAD,IAAAwB,OAAA2sB,EAAA4D,YAAA9mB,EAAAhL,GAAAgwD,GAIA,KAFAhwD,EAAAD,EAAAoM,SAEAnM,MAGA,IAFA01B,EAAA31B,EAAAC,GACA4iC,EAAA5iC,IACA4iC,MACAlN,IAAA31B,EAAA6iC,IACA7iC,EAAAoT,OAAAnT,EAAA,OAOA,KAFAD,EAAAurD,GAAAtgD,GAAAzJ,SACAvB,EAAAD,EAAAoM,SACAnM,OACAD,EAAAC,GAAA2xB,KAAAq+B,IAAAjwD,EAAAC,GAAA0/B,aACA3/B,EAAAoT,OAAAnT,EAAA,EAIA,OAAAD,IAGAmuB,EAAA0D,aAAA1D,EAAA2D,mBAAA,SAAA7mB,EAAAglD,EAAA1/B,GACA,qBACAA,EAAA0/B,EACAA,GAAA,EAIA,KAFA,GAAAjwD,GAAAmuB,EAAA4D,YAAA9mB,EAAAglD,GACAhwD,EAAAD,EAAAoM,SACAnM,MACAD,EAAAC,GAAA29B,MAAArN,EAAAtlB,GAWA,IAAAs9B,IAAAwb,EAAA,+BAAA/gB,EAAAuB,GACArkC,KAAAmlC,iBAAArC,GAAA,IAAA9c,MAAA,KACAhmB,KAAAgwD,UAAAhwD,KAAAmlC,gBAAA,GACAnlC,KAAAuvD,UAAAlrB,GAAA,EACArkC,KAAAmD,OAAAklC,GAAAvnC,YACK,EAiIL,IA/HAF,EAAAynC,GAAAvnC,UACAunC,GAAA5W,QAAA,SACA4W,GAAA/D,IAAA,EACA1jC,EAAAmyB,SAAA,KACAnyB,EAAAwiD,UAAAqJ,EACA7rD,EAAAgnC,SAAAokB,EAEAprD,EAAA88B,MAAA,SAAAyK,GACA,GAEApoC,GAFAD,EAAAE,KAAAmlC,gBACA5R,EAAAvzB,KAAA+yB,QAEA,UAAAoV,EAAAnoC,KAAAgwD,WACAhwD,KAAAmlC,uBAGA,KADAplC,EAAAD,EAAAoM,SACAnM,MACA,MAAAooC,EAAAroC,EAAAC,KACAD,EAAAoT,OAAAnT,EAAA,EAIA,MAAAwzB,GACA,MAAA4U,EAAA5U,EAAAihB,KACAjhB,EAAAC,QACAD,EAAAC,MAAAqJ,MAAAtJ,EAAAsJ,OAEAtJ,EAAAsJ,OACAtJ,EAAAsJ,MAAArJ,MAAAD,EAAAC,MACAD,EAAAsJ,MAAA,MACM78B,KAAA+yB,WAAAQ,IACNvzB,KAAA+yB,SAAAQ,EAAAC,QAGAD,IAAAC,KAEA,WAGA5yB,EAAA8jC,KAAA9jC,EAAAqvD,YAAA,SAAA9nB,GAGA,IAFA,GACA76B,GADAimB,EAAAvzB,KAAA+yB,SAEAQ,GACAjmB,EAAA66B,EAAAnoC,KAAAgwD,YAAA,MAAAz8B,EAAAihB,GAAArM,EAAA5U,EAAAihB,EAAAxuB,MAAAhmB,KAAAgwD,UAAA,KAAAv2B,KAAA,KACAnsB,GAAA,uBACA,IAAAimB,EAAAiC,EACAjC,EAAAkC,EAAA+2B,SAAA9rD,EAAA4M,EAEAimB,EAAA7yB,EAAA4M,GAGAimB,IAAAC,OAIAvF,EAAA+E,eAAA,SAAAe,EAAAxO,GACA,GACAoY,GAAAijB,EAAA7d,EAAA3H,EAAA9R,EADAiK,EAAAhO,EAAAwN,QAEA,wBAAAgB,EAAA,CAEA,KAAAR,GAAA,CAGA,IAFAjK,EAAAiK,EAAAC,MACAotB,EAAA7d,EACA6d,KAAAnM,GAAAlhB,EAAAkhB,IACAmM,IAAAptB,OAEAD,EAAAsJ,MAAA+jB,IAAA/jB,MAAAzB,GACA7H,EAAAsJ,MAAArJ,MAAAD,EAEAwP,EAAAxP,GAEAA,EAAAC,MAAAotB,GACAA,EAAA/jB,MAAAtJ,EAEA6H,EAAA7H,EAEAA,EAAAjK,EAEAiK,EAAAhO,EAAAwN,SAAAgQ,EAEA,KAAAxP,GACAA,EAAA2vB,IAAA,kBAAA3vB,GAAAkC,EAAA1B,IAAAR,EAAAkC,EAAA1B,OACA4J,GAAA,GAEApK,IAAAC,KAEA,OAAAmK,IAGA0K,GAAAoa,SAAA,SAAAjM,GAEA,IADA,GAAAz2C,GAAAy2C,EAAAtqC,SACAnM,MACAy2C,EAAAz2C,GAAAukC,MAAA+D,GAAA/D,MACAknB,GAAA,GAAAhV,GAAAz2C,IAAAiwD,WAAAxZ,EAAAz2C,GAGA,WAIAgwB,EAAAoU,OAAA,SAAAnV,GACA,KAAAA,KAAAoV,UAAApV,EAAAuV,MAAAvV,EAAAsV,KAAoE,iCACpE,IAUAmD,GAVArD,EAAApV,EAAAoV,SACAC,EAAArV,EAAAqV,UAAA,EACA6rB,EAAAlhC,EAAAkhC,eACA9tC,GAAWmiB,KAAA,eAAA3nB,IAAA,WAAAwO,KAAA,QAAA0oB,MAAA,OAAAC,IAAA,OAAAoc,QAAA,mBACXC,EAAAvM,EAAA,WAAAzf,EAAApI,OAAA,GAAA0O,cAAAtG,EAAAlI,OAAA,YACA,WACAmM,GAAA5nC,KAAAT,KAAAokC,EAAAC,GACArkC,KAAAmlC,gBAAA+qB,OACMlhC,EAAAY,UAAA,GACNhvB,EAAAwvD,EAAAtvD,UAAA,GAAAunC,IAAAjE,EAEAxjC,GAAAc,YAAA0uD,EACAA,EAAA9rB,IAAAtV,EAAAsV,GACA,KAAAmD,IAAArlB,GACA,kBAAA4M,GAAAyY,KACA7mC,EAAAwhB,EAAAqlB,IAAAzY,EAAAyY,GAKA,OAFA2oB,GAAA3+B,QAAAzC,EAAAyC,QACA4W,GAAAoa,UAAA2N,IACAA,GAKAtwD,EAAA2D,EAAAqsB,SACA,CACA,IAAA/vB,EAAA,EAAcA,EAAAD,EAAAoM,OAAcnM,IAC5BD,EAAAC,IAEA,KAAAa,IAAAylD,GACAA,EAAAzlD,GAAA0lC,MACA7iC,EAAAwoC,QAAA7zB,IAAA,wCAAAxX,GAKAolD,GAAA,IAEC,uBAAA1lD,EAAAD,SAAA,sBAAAuvB,EAAA5vB,MAAAyD,OAAA,clBwwG6BhD,KAAKJ,EAAU,WAAa,MAAOL,WAI3D,SAASM,EAAQD,ImBn4VvB,SAAAgwD,GAAA/vD,EAAAD,QAAAgwD,InBu4V8B5vD,KAAKJ,OAI7B,SAASC,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MoBj5VpFG,EAAAzB,EAA2B,GAC3B0sB,EAAA1sB,EAAgC,IAEhCsvB,EAAA,SAAAtsB,GAAgC5B,EAAAkuB,WAAAtsB,EAgB5B,SAAAssB,YAAYlvB,EAAY+rB,EAAc0C,GAClC7rB,EAAA1C,KAAAT,MAPIA,KAAA+rD,YAAc,iDACd/rD,KAAAswD,YAAc,mDACdtwD,KAAAuwD,YAAc,gCACdvwD,KAAAwwD,iBAAmB,WACnBxwD,KAAAywD,aAAe,6CAKnBzwD,KAAKO,GAAKA,EACNA,IACAssB,EAAAuR,KAAKhc,IAAI7hB,GAAMP,MAGnBA,KAAK00B,UAAW,EAChB10B,KAAK20B,SAAW30B,KAAK0wD,UAErB1wD,KAAK2wD,QAAQrkC,EAAM0C,GA+X3B,MA5XYS,YAAA3uB,UAAA8vD,gBAAR,SACInqB,EACAC,EACAC,EACAC,EACAiqB,EACAC,EACAC,EACAC,EACAjtB,EACAhb,EACA4a,GAEA,GAgBIz3B,GAhBA+kD,GAAOxqB,EAAKE,GAAM,EAClBuqB,GAAOxqB,EAAKE,GAAM,EAClBuqB,GAAOxqB,EAAKkqB,GAAM,EAClBO,GAAOxqB,EAAKkqB,GAAM,EAClBO,GAAOR,EAAKE,GAAM,EAClBO,GAAOR,EAAKE,GAAM,EAClBO,GAAQN,EAAME,GAAO,EACrBK,GAAQN,EAAME,GAAO,EACrBK,GAAQN,EAAME,GAAO,EACrBK,GAAQN,EAAME,GAAO,EACrBK,GAASJ,EAAOE,GAAQ,EACxBG,GAASJ,EAAOE,GAAQ,EACxBjW,EAAKsV,EAAKtqB,EACViV,EAAKsV,EAAKtqB,EACVmrB,EAAK9yC,KAAK4f,KAAKgI,EAAKoqB,GAAMrV,GAAM9U,EAAKoqB,GAAMvV,GAC3CqW,EAAK/yC,KAAK4f,KAAKkyB,EAAKE,GAAMrV,GAAMoV,EAAKE,GAAMvV,EA4B/C,OAzBK1yB,KACDA,IACM7J,EAAGunB,EAAIrnB,EAAGsnB,IACVxnB,EAAG6xC,EAAI3xC,EAAG4xC,IAEhBrtB,EAAQ,GAEZ5a,EAAO7V,OAAOywB,GAAS5a,EAAO7c,OAAS,EAAG,GAAKgT,EAAGyyC,EAAOvyC,EAAGwyC,KACvDC,EAAKC,IAAOD,EAAKC,GAAM/tB,GAAa0X,EAAKA,EAAKC,EAAKA,KACpDxvC,EAAS6c,EAAO7c,OAChBlM,KAAK4wD,gBAAgBnqB,EAAIC,EAAIuqB,EAAKC,EAAKK,EAAMC,EAAMG,EAAOC,EAAO7tB,EAAWhb,EAAQ4a,GACpF3jC,KAAK4wD,gBACDe,EACAC,EACAH,EACAC,EACAL,EACAC,EACAP,EACAC,EACAjtB,EACAhb,EACA4a,EAAQ,GAAK5a,EAAO7c,OAASA,KAG9B6c,GAGH0G,WAAA3uB,UAAAixD,kBAAR,SAA0BvwD,GACtB,GAcIzB,GACAmf,EACAE,EACA4yC,EACAxhB,EACAyhB,EACAC,EACAC,EACAC,EACAC,EACAC,EAxBAxyD,GACC0B,EAAI,IACA4L,QAAQpN,KAAKuwD,YAAa,SAAU7vD,GACjC,GAAI8zC,IAAK9zC,EACLyG,EAASqtC,EAAI,MAAUA,QAAc,EAAIA,CAC7C,OAAOrtC,GAAO+G,aAEjBb,MAAMrN,KAAKswD,iBAEhBxnC,KACAypC,EAAY,EACZC,EAAY,EACZC,EAAW3yD,EAAEoM,OACbikB,EAAI,CAYR,KAAKpwB,EAAI,EAAGA,EAAI0yD,EAAU1yD,IAmBtB,GAlBAqyD,EAAcJ,EACVjlC,MAAMnO,WAAW9e,EAAEC,MACnBiyD,EAAUlyD,EAAEC,GAAG2qC,cACf8F,EAAawhB,IAAYlyD,EAAEC,IAG3BA,IAEJmf,GAAKpf,EAAEC,EAAI,GACXqf,GAAKtf,EAAEC,EAAI,GACPywC,IACAtxB,GAAKqzC,EACLnzC,GAAKozC,GAEJzyD,IACDmyD,EAAShzC,EACTizC,EAAS/yC,GAEG,MAAZ4yC,EACIC,GAAWA,EAAQ/lD,OAAS,IAE5B4c,EAAK5c,QAAU,EACfikB,EAAI,GAERoiC,EAAYL,EAAShzC,EACrBszC,EAAYL,EAAS/yC,EACrB6yC,GAAW/yC,EAAGE,GACd+Q,EAAI,EACJrH,EAAK9V,KAAKi/C,GACVlyD,GAAK,EACLiyD,EAAU,QACP,IAAgB,MAAZA,EACFC,IACDA,GAAW,EAAG,IAElBA,EAAQ9hC,KAAOjR,EACf+yC,EAAQ9hC,KAAO/Q,EACVoxB,IACD+hB,EAAYC,EAAY,GAE5BP,EAAQ9hC,KAAOoiC,EAAY3zC,WAAW9e,EAAEC,EAAI,IAC5CkyD,EAAQ9hC,KAAOqiC,EAAY5zC,WAAW9e,EAAEC,EAAI,IAC5CkyD,EAAQ9hC,KAAOoiC,GAAwB3zC,WAAW9e,EAAEC,EAAI,IACxDkyD,EAAQ9hC,KAAOqiC,GAAwB5zC,WAAW9e,EAAEC,EAAI,IACxDA,GAAK,MACF,IAAgB,MAAZiyD,EACa,MAAhBI,GAAuC,MAAhBA,GACvBC,EAAOE,EAAYN,EAAQ9hC,EAAI,GAC/BmiC,EAAOE,EAAYP,EAAQ9hC,EAAI,GAC/B8hC,EAAQ9hC,KAAOoiC,EAAYF,EAC3BJ,EAAQ9hC,KAAOqiC,EAAYF,IAE3BL,EAAQ9hC,KAAOoiC,EACfN,EAAQ9hC,KAAOqiC,GAEnBP,EAAQ9hC,KAAOjR,EACf+yC,EAAQ9hC,KAAO/Q,EACVoxB,IACD+hB,EAAYC,EAAY,GAE5BP,EAAQ9hC,KAAOoiC,GAAwB3zC,WAAW9e,EAAEC,EAAI,IACxDkyD,EAAQ9hC,KAAOqiC,GAAwB5zC,WAAW9e,EAAEC,EAAI,IACxDA,GAAK,MACF,IAAgB,MAAZiyD,GAA+B,MAAZA,EAoB1B,KAAMhyD,MAAKywD,YAnBK,OAAZuB,IACA9yC,EAAIgzC,EACJ9yC,EAAI+yC,EACJF,EAAQS,QAAS,IAEL,MAAZV,GAAmBjzC,KAAK4f,IAAI4zB,EAAYrzC,GAAK,IAAOH,KAAK4f,IAAI6zB,EAAYpzC,GAAK,MAC9E6yC,EAAQ9hC,KAAOoiC,GAAarzC,EAAIqzC,GAAa,EAC7CN,EAAQ9hC,KAAOqiC,GAAapzC,EAAIozC,GAAa,EAC7CP,EAAQ9hC,KAAOoiC,EAA+B,GAAjBrzC,EAAIqzC,GAAkB,EACnDN,EAAQ9hC,KAAOqiC,EAA+B,GAAjBpzC,EAAIozC,GAAkB,EACnDP,EAAQ9hC,KAAOjR,EACf+yC,EAAQ9hC,KAAO/Q,EACC,MAAZ4yC,IACAjyD,GAAK,IAGbwyD,EAAYrzC,EACZszC,EAAYpzC,EAKpB,MAAO0J,GAAK,IAGR2G,WAAA3uB,UAAA6xD,aAAR,SAAqB7sC,GACjB,GAEI/lB,GAFAowB,EAAIrK,EAAO5Z,OACXukC,EAAM,YAEV,KAAK1wC,EAAI,EAAGA,EAAIowB,EAAGpwB,GAAK,GACf+lB,EAAO/lB,GAAK0wC,IACbA,GAAO3qB,EAAO/lB,GAGtB,OAAO0wC,IAGHhhB,WAAA3uB,UAAA8xD,WAAR,SAAmB9sC,EAAuBlf,EAAiBisD,GAElDA,GAAuB,IAAZA,IACZA,EAAU9zC,KAAKmf,KAAKpY,EAAOA,EAAO5Z,OAAS,IAAK4Z,EAAO,IAE3D,IASI/lB,GATA24C,GAAM5yB,EAAO,MACb6yB,GAAMka,EACN1iC,EAAIrK,EAAO5Z,OACXswC,EAAK,IAAM12B,EAAOqK,EAAI,GAAKuoB,GAC3B+D,GACK71C,IACAmY,KAAK4f,KAAK7Y,EAAOqK,EAAI,IAAMrK,EAAO,IAAM,MAASA,EAAOqK,EAAI,IAAMrK,EAAO,IACpE9lB,KAAK2yD,aAAa7sC,GAAU6yB,GAC3B7yB,EAAOqK,EAAI,GAAKwoB,EAS/B,KALI8D,EAFAA,EAEK,EAAIA,GAGHD,EAELz8C,EAAI,EAAGA,EAAIowB,EAAGpwB,GAAK,EACpB+lB,EAAO/lB,KAAO+lB,EAAO/lB,GAAK24C,GAAM8D,EAChC12B,EAAO/lB,EAAI,KAAO+lB,EAAO/lB,EAAI,GAAK44C,GAAM8D,GAIxChtB,WAAA3uB,UAAA4vD,UAAR,SAAkB9vD,GACd,GAAIooB,GAAQhpB,KAAKmoC,OAAQvnC,EAAIZ,KAAKmwB,EAAK,IAAMnwB,KAAKmoC,OAAOnoC,KAAKmwB,EAAI,EAC9DnH,GAAM8pC,GAAKlyD,IACXooB,EAAQA,EAAMwrB,EAElB,IAAIrtC,GAAS6hB,EAAM5J,GAAMxe,EAAIooB,EAAM9J,GAAK8J,EAAM+pC,GAAM/pC,EAAMgqC,EAC1D,OAAO7rD,IAGHsoB,WAAA3uB,UAAA6vD,QAAR,SAAgBrkC,EAAc0C,GAC1BhvB,KAAKssB,KAAOA,GAAQ,UACpBtsB,KAAK+oB,UACL/oB,KAAKmoC,SAEL,IAGI8qB,GACAC,EACAnzD,EACAqjC,EACAT,EACA3Z,EACAmqC,EACAvyD,EACAwyD,EAXAttC,EAASlkB,EAAAsgB,WAAWC,YAAYniB,KAAKssB,KAAKjf,MAAMrN,KAAK+rD,aAAatyB,KAAK,MACvE45B,EAAU,CAqBd,IATAD,EAAapkC,GAAUA,EAAOokC,WAAc,EAC5CpzD,KAAKszD,KAAOF,GAAa,GAErBpzD,KAAKwwD,iBAAiB98C,KAAK4Y,IAAUA,EAAKnB,QAAQ,WAAemB,EAAKnB,QAAQ,aAC9ErF,EAAS9lB,KAAK+xD,kBAAkBzlC,IAGpCtsB,KAAKmwB,EAAIrK,EAAO5Z,OAED,IAAXlM,KAAKmwB,EACLrK,EAAOkd,QAAQ,EAAG,GAClBld,EAAO9S,KAAK,EAAG,GACfhT,KAAKmwB,EAAI,MACN,KAAKnwB,KAAKmwB,EAAI,GAAK,EACtB,KAAMnwB,MAAKywD,YAEf,IAAmB,KAAd3qC,EAAO,IAAoC,KAAvBA,EAAO9lB,KAAKmwB,EAAI,GAAU,CAC/C,GAAIvpB,GAASooB,GAAUA,EAAOpoB,OAASooB,EAAOpoB,OAAS,KACnDisD,EAAU7jC,GAAUA,EAAO6jC,QAAU7jC,EAAO6jC,QAAU,IAC1D7yD,MAAK4yD,WAAW9sC,EAAQlf,EAAQisD,GAKpC,IAFA7yD,KAAKuzD,UAAYztC,EAEZ/lB,EAAI,EAAGA,EAAIC,KAAKmwB,EAAGpwB,GAAK,EACzBkzD,GAAO/zC,GAAI4G,EAAO/lB,EAAI,GAAIqf,GAAI0G,EAAO/lB,EAAI,IACzCmzD,GAAOh0C,GAAI4G,EAAO/lB,EAAI,GAAIqf,GAAI0G,EAAO/lB,EAAI,IACzCC,KAAK+oB,OAAO/V,KAAKigD,EAAIC,GACrBlzD,KAAK4wD,gBACDqC,EAAG/zC,EACH+zC,EAAG7zC,GACF0G,EAAO/lB,IACP+lB,EAAO/lB,EAAI,IACX+lB,EAAO/lB,EAAI,IACX+lB,EAAO/lB,EAAI,GACZmzD,EAAGh0C,EACHg0C,EAAG9zC,EACH,GAAiB,IAAZg0C,GACLpzD,KAAK+oB,OACL/oB,KAAK+oB,OAAO7c,OAAS,EAK7B,KADAlM,KAAKmwB,EAAInwB,KAAK+oB,OAAO7c,OAChBnM,EAAI,EAAGA,EAAIC,KAAKmwB,EAAGpwB,IACpBipB,EAAQhpB,KAAK+oB,OAAOhpB,GACpBozD,EAAYnzD,KAAK+oB,OAAOhpB,EAAI,IAAMipB,EAC9BA,EAAM9J,EAAIi0C,EAAUj0C,GAAMi0C,EAAU/zC,IAAM4J,EAAM5J,GAAK+zC,EAAUj0C,IAAM8J,EAAM9J,GAAM8J,IAAUmqC,GAE3FA,EAAUJ,GAAK/pC,EAAM9J,EAAIi0C,EAAUj0C,EACnCi0C,EAAUH,GAAKhqC,EAAM5J,EAAI+zC,EAAU/zC,EACnC+zC,EAAU3e,EAAIxrB,EACdmqC,EAAUL,GAAK9pC,EAAM9J,EAEjBlf,KAAKszD,MACLvzD,EAAI,GACJgf,KAAK4f,IAAIw0B,EAAUH,GAAKG,EAAUJ,GAAK/yD,KAAK+oB,OAAOhpB,EAAI,GAAGizD,GAAKhzD,KAAK+oB,OAAOhpB,EAAI,GAAGgzD,IAAM,IAGxF/yD,KAAKszD,MAAO,GAEZH,EAAUJ,GAAKM,IACVF,EAAUJ,GASXM,EAAUF,EAAUJ,IARpBI,EAAUJ,GAAK,KACXhzD,IAAMC,KAAKmwB,EAAI,IAEfgjC,EAAUj0C,GAAK,KACfm0C,EAAUt0C,KAAK0xB,IAAI4iB,EAAS,MAC5BrzD,KAAKszD,MAAO,OAOxBtzD,KAAK+oB,OAAO7V,OAAOnT,IAAK,GACxBC,KAAKmwB,IAQb,IAJAnwB,KAAKmwB,EAAK,EAAIkjC,EAAU,EAAK,EAC7BjwB,EAAM,EAAIpjC,KAAKmwB,EACfwS,EAAI,EACJ3Z,EAAQhpB,KAAK+oB,OAAO,GAChB/oB,KAAKszD,KAAM,CACX,IAAKvzD,EAAI,EAAGA,EAAIC,KAAKmwB,EAAGpwB,IAEpBa,EAAIb,EAAIqjC,EACJpa,EAAM8pC,GAAKlyD,IACXooB,EAAQhpB,KAAK+oB,SAAS4Z,IAE1BswB,EAAKjqC,EAAM5J,GAAMxe,EAAIooB,EAAM9J,GAAK8J,EAAM+pC,GAAM/pC,EAAMgqC,GAClDhzD,KAAKmoC,OAAOpoC,IAAOmf,EAAGte,EAAGmyD,GAAI3vB,EAAKhkB,EAAG6zC,EAAID,GAAI,EAAGF,GAAI,GAChD/yD,IACAC,KAAKmoC,OAAOpoC,EAAI,GAAGizD,GAAKC,EAAKjzD,KAAKmoC,OAAOpoC,EAAI,GAAGqf,EAGxDpf,MAAKmoC,OAAOnoC,KAAKmwB,EAAI,GAAG6iC,GAAKhzD,KAAK+oB,OAAO/oB,KAAK+oB,OAAO7c,OAAS,GAAGkT,EAAI6zC,MAClE,CAEH,IAAKlzD,EAAI,EAAGA,EAAIC,KAAKmwB,EAAGpwB,IAEhBipB,EAAM8pC,GAAK/yD,EAAIqjC,IACfpa,EAAQhpB,KAAK+oB,SAAS4Z,IAE1B3iC,KAAKmoC,OAAOpoC,GAAKipB,CAGjB2Z,GAAI3iC,KAAK+oB,OAAO7c,OAAS,IACzBlM,KAAKmoC,OAAOpoC,EAAI,GAAKC,KAAK+oB,OAAO/oB,KAAK+oB,OAAO7c,OAAS,IAG9DlM,KAAK00B,SAAqD,IAA1C10B,KAAK+oB,OAAO/oB,KAAK+oB,OAAO7c,OAAS,GAAGkT,GAAgC,IAArBpf,KAAK+oB,OAAO,GAAG3J,GAGpEqQ,WAAA9tB,OAAd,SAAqBpB,EAAY+rB,EAAc0C,GAC3C,MAAO,IAAIS,YAAWlvB,EAAI+rB,EAAM0C,IAGtBS,WAAAxrB,IAAd,SAAkB1D,GACd,MAAOssB,GAAAuR,KAAKhc,IAAI7hB,IAGNkvB,WAAA+jC,iBAAd,WAEI,GAAIC,GACA,8aACJhkC,YAAW9tB,OAAO,UAAW8xD,EAG7B,IAAIC,GACA,2aACJjkC,YAAW9tB,OAAO,SAAU+xD,EAE5B,IAAIC,GACA,wOACJlkC,YAAW9tB,OAAO,WAAYgyD,IAEtClkC,YA1ZgC5C,EAAAuR,KAAnB/9B,GAAAovB,WAAUA,GpBmtWjB,SAASnvB,EAAQD,EAASF,GAE/B,YqBxtWD,IAAAyB,GAAAzB,EAA+C,GAC/Cic,EAAAjc,EAA+B,IAM/BmnB,EAAA,mBAAAA,iBA6EA,MAzEWA,cAAAssC,QAAP,WAIItsC,aAAausC,WAAa,MASfvsC,aAAAlP,IAAf,SAAmBkU,KAYZhF,aAAAwsC,cAAP,SAAqBC,GACjB,GAAKA,EAAL,CAIA,GAAMC,GAAwB1sC,aAAa2sC,aAAaF,EAAUxqC,mBAC7DsN,UACAkV,OAAO,SAACjuB,GAAkB,MAAAA,GAAKU,aAAa,UAA2C,KAA/BV,EAAKe,aAAa,UAE/Em1C,GACKjoB,OAAO,SAACjuB,GACL,MAAAlc,GAAAsyD,uBAAuBC,SAASr2C,EAAKe,aAAa,SAAUzC,EAAAuK,eAAesD,SAE9EuD,QAAQ,SAAC1P,GACN,GAAMjM,GAAajQ,EAAAsyD,uBAAuBjwD,IAAI6Z,EAAKe,aAAa,SAChEhN,GAAMlQ,OAAOmc,GACbwJ,aAAaC,OAAOzJ,EAAKI,UAAYrM,IAG7CmiD,EACKjoB,OAAO,SAACjuB,GACL,MAAAlc,GAAAsyD,uBAAuBC,SAASr2C,EAAKe,aAAa,SAAUzC,EAAAuK,eAAeuD,aAE9EsD,QAAQ,SAAC1P,GACN,GAAMjM,GAAajQ,EAAAsyD,uBAAuBjwD,IAAI6Z,EAAKe,aAAa,SAChEhN,GAAMlQ,OAAOmc,GACbwJ,aAAausC,WAAW/1C,EAAKI,UAAYrM,MAWtCyV,aAAA2sC,aAAf,SAA4Bn2C,EAAes2C,GACvC,MADuC,UAAAA,UAClCt2C,GAIDA,EAAK2L,qBACL2qC,EAAW9sC,aAAa2sC,aAAan2C,EAAK2L,mBAAoB2qC,IAG3DA,EAAS9yD,OAAOwc,IAPZs2C,GAnER9sC,aAAAC,UACAD,aAAAusC,cA2EXvsC,eA7EajnB,GAAAinB,aAAYA,GrB4wWnB,SAAShnB,EAAQD,EAASF,GAE/B,YsBrxWD,IAAAyB,GAAAzB,EAA4B,GAK5Bie,EAAA,mBAAAA,eA6DA,MApDWA,YAAAoB,mBAAP,SAA0B1B,EAAeu2C,EAAmB1nC,EAAsB2nC,GAC9E,MAAKx2C,GAAKU,aAAa61C,GAIhBn+C,SAAS4H,EAAKe,aAAaw1C,GAAYC,GAHnC3nC,GAaRvO,WAAAC,qBAAP,SAA4BP,EAAeu2C,EAAmB1nC,GAC1D,MAAK7O,GAAKU,aAAa61C,GAIhBz1C,WAAWd,EAAKe,aAAaw1C,IAHzB1nC,GAaRvO,WAAA2B,uBAAP,SAA8BjC,EAAeu2C,EAAmB1nC,GAC5D,MAAK7O,GAAKU,aAAa61C,GAIhBzyD,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaw1C,IAHvC1nC,GAaRvO,WAAA0D,sBAAP,SAA6BhE,EAAeu2C,EAAmB1nC,GAC3D,MAAK7O,GAAKU,aAAa61C,GAIhBv2C,EAAKe,aAAaw1C,GAHd1nC,GAKnBvO,aA7Da/d,GAAA+d,WAAUA,GtBozWjB,SAAS9d,EAAQD,EAASF,GAE/B,YuB3zWD,IAAAiT,GAAAjT,EAA2B,GAE3BsZ,EAAA,mBAAAA,mBAmCA,MA/BkBA,gBAAAlQ,IAAd,SAAkBlE,EAAakvD,GAC3B96C,eAAe5G,KAAKxN,GAAOkvD,GAGjB96C,eAAAtC,OAAd,SAAqB9R,SACVoU,gBAAe5G,KAAKxN,IAGjBoU,eAAAO,MAAd,SAAoB2Z,GAChB,GADgB,SAAAA,OAAA,IACZla,eAAeM,QAAW4Z,EAA9B,CAGA,IAAK,GAAItuB,KAAOoU,gBAAe5G,KACvB4G,eAAe5G,KAAKxN,YAAgB+N,GAAAqF,YACpCgB,eAAe5G,KAAKxN,GAAK2U,OAGjCP,gBAAeM,QAAS,IAGdN,eAAAW,QAAd,SAAsBuZ,GAClB,GADkB,SAAAA,OAAA,GACbla,eAAeM,QAAW4Z,EAA/B,CAGA,IAAK,GAAItuB,KAAOoU,gBAAe5G,KACvB4G,eAAe5G,KAAKxN,YAAgB+N,GAAAqF,YACpCgB,eAAe5G,KAAKxN,GAAK+U,SAGjCX,gBAAeM,QAAS,IAhCdN,eAAA5G,QACA4G,eAAAM,QAAkB,EAiCpCN,iBAnCapZ,GAAAoZ,eAAcA,GvBq2WrB,SAASnZ,EAAQD,EAASF,GAE/B,YwBz2WD,IAAAq0D,GAAAr0D,EAA+B,IAC/Bs0D,EAAAt0D,EAAqC,IACrC4C,EAAA5C,EAAwB,GAExBuC,EAAAvC,EAA+B,IAC/Bu0D,EAAAv0D,EAA4B,IAC5BqC,EAAArC,EAA2B,GAE3BwC,EAAAxC,EAA4B,IAE5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAK5B0W,EAAA,mBAAAA,YAigBA,MAnekBA,SAAA/S,WAAd,WACQtB,EAAAgC,YAAchC,EAAAgC,WAAWC,kBAAkBkwD,uBAC3CxrD,SAASkI,KAAK/H,UAAUC,IAAI,UAC5BsN,QAAQ+9C,WAAazrD,SAASC,eAAe,iBAC7CyN,QAAQg+C,SAAW1rD,SAASC,eAAe,eAC3CyN,QAAQi+C,QAAUtyD,EAAAgC,WAAWC,kBAAkBkwD,mBAE/C99C,QAAQk+C,iBACRl+C,QAAQm+C,uBAGRn+C,QAAQo+C,eAERp+C,QAAQq+C,aAAar+C,QAAQs+C,yBAEzBxyD,EAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WAAWmwD,WAAWv+C,QAAQi+C,UAG9Cj+C,QAAQw+C,gBAIFx+C,QAAAy+C,aAAd,WACQz+C,QAAQ0+C,UACR1+C,QAAQ0+C,SAAU,EAClB1+C,QAAQ2+C,mBACR3+C,QAAQ4+C,oBAIF5+C,QAAA6+C,KAAd,WACI,GAAI7+C,QAAQ+9C,YACJ/9C,QAAQ8+C,SAASzpD,OAAS,EAAG,CAC7B,IAAK,GAAInM,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAG81D,eAAejzD,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eACpEl/C,QAAQm/C,eAAej2D,GAAGk2D,wBAG9Bp/C,SAAQrG,OAASqG,QAAQ8+C,SAAS,GAAGO,YACrCnzD,EAAAuF,QAAQgP,oBAAsB,IAC9BvU,EAAAuF,QAAQC,eAKLsO,QAAAw+C,aAAf,WACI,GAAIc,GAAgBhtD,SAASC,eAAe,iBACxCgtD,EAAcjtD,SAASC,eAAe,cACtC+sD,IAAiBA,EAAct9B,YAAcu9B,GAAeA,EAAYv9B,aACxEs9B,EAAct9B,WAAWpS,YAAY0vC,GACrCC,EAAYv9B,WAAWpS,YAAY2vC,KAQ5Bv/C,QAAAk+C,eAAf,WACI,GAAIl+C,QAAQ+9C,WAAY,CACpB/9C,QAAQw/C,iBAAiB,kBAAmBx/C,QAAQy/C,WAAYz/C,QAAQy/C,YAExEz/C,QAAQwJ,cAAc,MAAO,oBAAqBxJ,QAAQ+9C,WAC1D,IAAI2B,GAAS1/C,QAAQwJ,cAAc,MAAO,kBAAmBxJ,QAAQ+9C,WACrE2B,GAAOh2D,GAAK,iBAEZ,KAAK,GAAIR,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IAAK,CAC5C,GAAIy2D,GAAU,GAAIhC,GAAAiC,eAAe12D,EAAI,EAAGw2D,EAAQ1/C,QAAQ4+C,gBAExD5+C,SAAQ8+C,SAAS3iD,KAAKwjD,MAKnB3/C,QAAAy/C,WAAf,SAA0BI,GAAA,SAAAA,MAAA,GACtB,IAAIC,GAAO9/C,QAAQwJ,cAAc,MAAO,cAAexJ,QAAQ+9C,WAC/D+B,GAAO9/C,QAAQwJ,cAAc,MAAO,GAAIs2C,GACxCA,EAAKp2D,GAAK,cAEQ,IAAdm2D,IACAC,EAAK9kD,MAAM+kD,WAAa,OAAOF,EAAU,MAIlC7/C,QAAAm+C,qBAAf,WACI,GAAIn+C,QAAQ+9C,WAGR,IAAK,GAFD2B,GAAS1/C,QAAQwJ,cAAc,MAAO,iBAAkBxJ,QAAQ+9C,YAE3D70D,EAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IAAK,CAC5C,GAAI82D,GAAS,GAAIpC,GAAAqC,qBAAqB/2D,EAAI,EAAGw2D,EAE7C1/C,SAAQm/C,eAAehjD,KAAK6jD,KAKzBhgD,QAAAkgD,gBAAf,WACI,GAAIlgD,QAAQg+C,SAAU,CAClB,GAAI0B,GAAS1/C,QAAQwJ,cAAc,MAAO,oBAAqBxJ,QAAQg+C,SACvEh+C,SAAQ1R,KAAO,GAAIuvD,GAAAsC,YAAYT,KAQzB1/C,QAAA4+C,gBAAd,WACI,IAAK,GAAI11D,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAGk3D,oBAIdpgD,QAAA9M,UAAd,SAAwBmtD,GAGpB,GAHoB,SAAAA,OAAA,GACpBj9C,aAAaja,KAAKm3D,gBAEdtgD,QAAQ+9C,YACJ/9C,QAAQ8+C,UAAY9+C,QAAQm/C,eAAgB,CAC5Cn/C,QAAQ0+C,SAAU,CAElB,KAAK,GAAIx1D,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAG0H,MAAMyvD,GAC1BrgD,QAAQm/C,eAAej2D,GAAG0H,MAAMyvD,KAUlCrgD,QAAA2+C,iBAAd,WACIv7C,aAAaja,KAAKm3D,gBAElBtgD,QAAQq+C,aAAar+C,QAAQugD,qBAGnBvgD,QAAAwgD,2BAAd,SAAyCC,GACrCr9C,aAAaja,KAAKm3D,gBAElBtgD,QAAQq+C,aAAar+C,QAAQugD,oBAAsBG,kBAAmBD,EAAmBjzB,UAAU,KAGzFxtB,QAAA2gD,6BAAd,SAA2CF,GACvCr9C,aAAaja,KAAKm3D,gBAElBtgD,QAAQq+C,aAAar+C,QAAQugD,oBACzBG,kBAAmBD,EACnBjzB,UAAU,EACVozB,aAAcH,EAAkBI,QAI1B7gD,QAAA8gD,2BAAd,SAAyCC,GACrC39C,aAAaja,KAAKm3D,gBAElBtgD,QAAQghD,uBAAuBD,GAAgBvzB,UAAU,KAO9CxtB,QAAAq+C,aAAf,SACIrhC,EACAikC,GAEIn1D,EAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WACP8yD,mCAAmClhD,QAAQi+C,SAC3CkD,KAAK,SAACC,GAEH,MADApkC,GAASokC,EAAUH,GACZ,OAJfn1D,SAMW,SAAC8E,GACJoP,QAAQ9M,WAAU,MAKnB8M,QAAAghD,uBAAf,SAAsChkC,EAAsBikC,GACpDn1D,EAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WACP8yD,mCAAmClhD,QAAQi+C,SAC3CkD,KAAK,SAACC,GAGH,MAFAphD,SAAQugD,mBAAmBa,EAAUH,GACrCjkC,IACO,OALflxB,SAOW,SAAC8E,GACJoP,QAAQ9M,WAAU,MASnB8M,QAAAs+C,wBAAf,SAAuC8C,EAA2CH,GAC9E,GAAgB,MAAZG,EAAkB,CAClBphD,QAAQqhD,gBAAkBD,EAASE,eAEnC,KAAK,GAAIp4D,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAG+D,WAAWm0D,EAASG,OAAOr4D,GAAIk4D,EAASI,WAC5DxhD,QAAQm/C,eAAej2D,GAAG+D,WAAWm0D,EAASG,OAAOr4D,QAGzD,KAAK,GAAIA,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAG0H,QACpBoP,QAAQm/C,eAAej2D,GAAG0H,OAIlCoP,SAAQsgD,eAAiB7hD,WAAWuB,QAAQ2+C,iBAA4C,IAA1B3+C,QAAQqhD,kBAG3DrhD,QAAAugD,mBAAf,SAAkCa,EAA2CH,GACzE,GAAgB,MAAZG,EAAkB,CAClBphD,QAAQqhD,gBAAkBD,EAASE,eAEnC,IAAIG,GAA4B,MAAdR,GAAyD,MAAnCA,EAA8B,kBAClEzzB,EAAyB,MAAdyzB,GAAgD,MAA1BA,EAAqB,SACtDL,EACc,MAAdK,GAAoD,MAA9BA,EAAyB,aAAYA,EAAyB,aAAI,EAExFQ,KACAL,EAAWphD,QAAQ0hD,kBAAkBN,EAAUH,EAA8B,mBAGjF,KAAK,GAAI/3D,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAGy4D,OAChBP,EAASG,OAAOr4D,GAChBk4D,EAASI,UACTh0B,EACA4zB,EAASG,OAAOr4D,GAA2B,uBAC3C03D,GAAgBQ,EAASG,OAAOr4D,GAAG23D,MAEvC7gD,QAAQm/C,eAAej2D,GAAGy4D,OAAOP,EAASG,OAAOr4D,QAGrD,KAAK,GAAIA,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC8W,QAAQ8+C,SAAS51D,GAAG0H,QACpBoP,QAAQm/C,eAAej2D,GAAG0H,OAIlCoP,SAAQsgD,eAAiB7hD,WAAWuB,QAAQ2+C,iBAA4C,IAA1B3+C,QAAQqhD,kBAG3DrhD,QAAA0hD,kBAAf,SACIN,EACAX,GAEA,GAAyB,MAArBA,EACA,IAAK,GAAIv3D,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACnCk4D,EAASG,OAAOr4D,GAAG23D,MAAQJ,EAAkBI,OAEN,MAAnCJ,EAAkBmB,cAClBR,EAASG,OAAOr4D,GAA2B,uBAAIu3D,EAAkBmB,cAEjER,EAASG,OAAOr4D,GAAKu3D,EAMrC,OAAOW,IAOIphD,QAAAo+C,aAAf,WACI,IAAK,GAALyD,GAAA,SAAA34D,GACI,GAA0B,WAAtB0D,OAAgB,QAAgB,CAChCoT,QAAQ8+C,SAAS51D,GACZ44D,UACA5mD,iBAAiB,QAAS,SAAC6C,GAAiB,MAAAiC,SAAQ+hD,oBAAoBhkD,EAAO7U,IAGpF,KAAK,GAAI84D,GAAI,EAAGA,EAAIhiD,QAAQm/C,eAAe9pD,OAAQ2sD,IAC/ChiD,QAAQm/C,eAAe6C,GAClBF,UACA5mD,iBAAiB,QAAS,SAAC6C,GAAiB,MAAAiC,SAAQ5B,eAAeL,KACxEiC,QAAQm/C,eAAe6C,GAClBF,UACA5mD,iBAAiB,aAAc,SAAC6C,GAAiB,MAAAiC,SAAQ5B,eAAeL,SAGjFiC,SAAQ8+C,SAAS51D,GAAG44D,UAAU5mD,iBAAiB,QAAS8E,QAAQiiD,kBAAkBzkD,KAAK0kD,EAAMh5D,IAC7F8W,QAAQ8+C,SAAS51D,GAAG44D,UAAU5mD,iBAAiB,YAAa8E,QAAQiiD,kBAAkBzkD,KAAK0kD,EAAMh5D,IACjG8W,QAAQ8+C,SAAS51D,GAAG44D,UAAU5mD,iBAAiB,WAAY8E,QAAQmiD,kBAAkB3kD,KAAK0kD,EAAMh5D,KxB8vWnGg5D,EAAS/4D,KwBhxWLD,EAAI,EAAGA,EAAI8W,QAAQ8+C,SAASzpD,OAAQnM,IxBkxWxC24D,EAAQ34D,IwBvvWH8W,QAAAoiD,uBAAd,WACI,GAAIpiD,QAAQ+9C,WAAY,CACpB/9C,QAAQ+9C,WAAWtM,oBAAoB,QAASzxC,QAAQoiD,uBACxD,KAAK,GAAIl5D,GAAI,EAAGA,EAAI8W,QAAQm/C,eAAe9pD,OAAQnM,IAC/C8W,QAAQm/C,eAAej2D,GAAGm5D,gBAKvBriD,QAAAiiD,kBAAf,SAAiCn1B,GAC7B3jC,KAAKi5D,yBAEDpiD,QAAQm/C,eAAeryB,KACG,WAAtBlgC,OAAgB,UAChBf,EAAA0F,eAAe+wD,eAAe,IAC9BtiD,QAAQ+9C,WAAW7iD,iBAAiB,QAAS8E,QAAQoiD,yBAGzDpiD,QAAQuiD,WAAaviD,QAAQmiD,kBAAkB3kD,KAAKrU,KAAM2jC,GAC1Dx6B,SAAS4I,iBAAiB,aAAc8E,QAAQuiD,YAEhDviD,QAAQm/C,eAAeryB,GAAO01B,eAIvBxiD,QAAA+hD,oBAAf,SAAmChkD,EAAc+uB,GAC7C/uB,EAAMK,iBACNL,EAAMM,kBAEF2B,QAAQm/C,eAAeryB,KAAW9sB,QAAQm/C,eAAeryB,GAAO21B,SAChEt5D,KAAK84D,kBAAkBn1B,GAEvB3jC,KAAKi5D,0BAIEpiD,QAAAmiD,kBAAf,SAAiCr1B,GACzB9sB,QAAQm/C,eAAeryB,KACvB9sB,QAAQm/C,eAAeryB,GAAOu1B,cAC9B/vD,SAASm/C,oBAAoB,aAAczxC,QAAQuiD,cAI5CviD,QAAA5B,eAAf,SAA8BL,GAC1BA,EAAMK,iBACNL,EAAMM,mBAYI2B,QAAA0iD,aAAd,SAA2BC,EAAoB3lC,GACtChd,QAAQ1R,MACT0R,QAAQkgD,kBAGZlgD,QAAQ1R,KAAKo/B,KAAKi1B,EAAW3lC,IAGnBhd,QAAA4iD,cAAd,WACS5iD,QAAQ1R,KAAKu0D,kBACd7iD,QAAQ1R,KAAKwQ,SAIPkB,QAAA8iD,cAAd,WACI,QAAK9iD,QAAQ1R,MAIN0R,QAAQ1R,KAAKu0D,kBAGV7iD,QAAA+iD,mBAAd,WACI,MAAO/iD,SAAQ1R,MAAQ0R,QAAQ1R,KAAKy0D,sBAM1B/iD,QAAAgjD,YAAd,WAEI,SAAIhjD,QAAQ1R,OAAQ0R,QAAQ1R,KAAKu0D,oBAK7B7iD,QAAQijD,uBAIRjjD,QAAQ1R,OAAQ0R,QAAQ1R,KAAKy0D,uBAI1Bj3D,EAAAoG,YAAYgxD,aAA+B,kBAAKp3D,EAAAoG,YAAYgxD,aAA+B,iBAAEC,SAG1FnjD,QAAAojD,yBAAd,WACQpjD,QAAQ1R,MACR0R,QAAQ1R,KAAK+0D,oBAIPrjD,QAAAsjD,8BAAd,WACI,MACI33D,GAAAgC,aACkE,mBAAjEhC,EAAAgC,WAAWC,kBAAkB21D,kCACuC,kBAAjE53D,EAAAgC,WAAWC,kBAAkB21D,mCAQ1BvjD,QAAAwJ,cAAf,SAA6Bg6C,EAAapZ,EAAmBqZ,GACzD,GAAIC,GAAOpxD,SAASkX,cAAcg6C,EAOlC,OANAE,GAAKjuD,aAAa,QAAS20C,GAEvBqZ,GACAA,EAAShpD,YAAYipD,GAGlBA,GAGI1jD,QAAAijD,gBAAf,WACI,GAAIjjD,QAAQ8+C,UAAY9+C,QAAQ8+C,SAASzpD,OAAS,EAC9C,IAAK,GAAInM,GAAI,EAAGA,EAAI8W,QAAQ++C,cAAe71D,IACvC,GAAI8W,QAAQ8+C,SAAS51D,GAAGy6D,WACpB,OAAO,CAKnB,QAAO,GAGI3jD,QAAAw/C,iBAAf,SAAgCp4C,EAAcw8C,EAAmBhzD,GAC7D,GAAoC,MAAhCjF,EAAAgC,WAAWC,kBAEX,YADIgD,GAAOA,IAIf,IAAqD,IAAjDjF,EAAAgC,WAAWC,kBAAkBi2D,iBAE7B,YADIjzD,GAAOA,IAIf,IAAIkzD,GAAQn4D,EAAAgC,WAAWC,kBAAkBm2D,qBACzC,IAAa,IAATD,EAAa,CACb,IAAIn4D,EAAAgC,WAAWC,kBAAkBo2D,uBAI7B,YADIpzD,GAAOA,IAFXkzD,GAAQ9jD,QAAQikD,aAOxB,GAAMC,GAAmBv4D,EAAAgC,WAAWC,kBAAkBi2D,iBAChDM,EAAY,wBACZp2D,EAAM,GAAGm2D,EAAmBC,EAAS,IAAIL,EAAK,IAAIl3D,OAAgB,QAAC,IAAIwa,EACzEg9C,EAAM9xD,SAASkX,cAAc;AACjC46C,EAAI3uD,aAAa,MAAO1H,GAExBq2D,EAAIlpD,iBAAiB,OAAQ,SAACmjC,GACtBulB,GAASA,EAAQ71D,KAEzBq2D,EAAIlpD,iBAAiB,QAAS,SAACmjC,GACvBztC,GAAOA,OAzfIoP,QAAAikD,aAAuB,YAEhCjkD,QAAArG,OAAiB,EAEhBqG,QAAAi+C,WACAj+C,QAAA++C,cAAwB,EAIxB/+C,QAAA8+C,YACA9+C,QAAAm/C,kBAGAn/C,QAAAqhD,gBAA0B,GAI1BrhD,QAAA0+C,SAAmB,EA2etC1+C,UAjgBaxW,GAAAwW,QAAOA,GxB+tXd,SAASvW,EAAQD,EAASF,GAE/B,YyBjvXD,IAAAyB,GAAAzB,EAAmC,GAEnCiT,EAAAjT,EAA2E,GAE3E0sB,EAAA1sB,EAA0B,IAC1BiC,EAAAjC,EAA0B,IAC1BqC,EAAArC,EAA2B,GAK3Bs2D,EAAA,WAsFI,QAAAA,gBAAY9yB,EAAe4yB,EAAqB2E,GACR,MAAhC14D,EAAAgC,WAAWC,oBACXgyD,eAAe0E,cAAgB34D,EAAAgC,WAAWC,kBAAkBkJ,mBAGhE3N,KAAK06B,KAAO16B,KAAKo7D,iBAAiBz3B,GAClC4yB,EAAOjlD,YAAYtR,KAAK06B,MACxB16B,KAAKq7D,eACLr7D,KAAKs7D,qBAELt7D,KAAKu7D,oBAAsB,EAC3Bv7D,KAAKw7D,qBAAuB,EAC5Bx7D,KAAKy7D,gBACLz7D,KAAK07D,gBACL17D,KAAK27D,yBAEL37D,KAAK47D,kBAAoBxoD,EAAAa,iBAAiB,0BAC1CjU,KAAK47D,kBAAkB1nD,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK67D,qBAAqBxnD,KAAKrU,OAEpFA,KAAK87D,UAAY,KACjB97D,KAAK+7D,WAAa,KAClB/7D,KAAKg8D,iBAAkB,EAEvBh8D,KAAKi8D,eAAiB5wD,KAAKs9C,MAC3B3oD,KAAKk7D,cAAgBA,EAErBl7D,KAAKk8D,QAmsBb,MA5rBczF,gBAAA31D,UAAAs6D,iBAAV,SAA2Bz3B,GACvB,GAAIjJ,GAAO16B,KAAKqgB,cAAc,MAAO,oBAAsBsjB,EAG3D3jC,MAAKqgB,cAAc,MAAO,eAAgBqa,EAC1C,IAAIyhC,GAAQn8D,KAAKqgB,cAAc,MAAO,eAAgBqa,EACtD16B,MAAKqgB,cAAc,MAAO,mBAAoB87C,GAE9Cn8D,KAAKqgB,cAAc,MAAO,sBAAuBqa,GACjD16B,KAAKqgB,cAAc,MAAO,kBAAmBqa,EAC7C,IAAI0hC,GAAWp8D,KAAKqgB,cAAc,MAAO,kBAAmBqa,EAO5D,OAJA16B,MAAKqgB,cAAc,MAAO,wBAAyB+7C,GACnDp8D,KAAKqgB,cAAc,MAAO,wBAAyB+7C,GACnDp8D,KAAKqgB,cAAc,MAAO,wBAAyB+7C,GAE5C1hC,GAGJ+7B,eAAA31D,UAAA+0D,eAAP,SAAsBuG,GAClB,IAAKx6D,EAAA4I,YAAYC,cAAc2xD,GAAW,CAGtC,IAAK,GAFDC,GAAyBr8D,KAAK06B,KAAK4hC,uBAAuB,yBAErDv8D,EAAI,EAAGA,EAAIs8D,EAAuBnwD,OAAQnM,IAC3Cq8D,EAASlwD,OAASnM,IAClBs8D,EAAuBt8D,GAAGw8D,YAAcH,EAASpgC,OAAOj8B,GAIhEs8D,GAAuB,GAAGvkD,cAAcxO,UAAUC,IAAI,MAAQ6yD,EAASlwD,UAIrEuqD,eAAA31D,UAAAu6D,aAAV,WACI,GAAImB,GAA4Bx8D,KAAK06B,KAAK4hC,uBAAuB,uBAAuB,GAClFG,IACNz8D,MAAK08D,SAGL,KAAK,GADDC,GACK58D,EAAI,EAAGA,EAAI02D,eAAemG,OAAQ78D,IAAK,CAC5C,GAAIkhD,GACAlhD,GAAK02D,eAAemG,OAASnG,eAAe0E,cAAgB,uBAAyB,QACzFwB,GAAQ38D,KAAKqgB,cAAc,MAAO4gC,EAAWub,EAC7C,IAAI7mC,GAAO31B,KAAKqgB,cAAc,MAAO,QAASs8C,GAC1ClvC,EAAKztB,KAAKqgB,cAAc,MAAO,QAASs8C,EAE5CF,GAAYzpD,KAAK2pD,GACjB38D,KAAK08D,OAAO1pD,MAAO2iB,KAAMA,EAAMlI,GAAIA,IAGvC,GAAIgpC,eAAeoG,sBAAuB,CACtCL,EAAalzD,UAAUC,IAAI,kBAE3B,KAAK,GAAIxJ,GAAI,EAAGA,EAAI08D,EAAYvwD,OAAQnM,IAAK,CACzC,GAAM4jC,GAAQ84B,EAAYvwD,OAAS,EAAInM,EACjC+8D,EACFn5B,EAAQ,GAAK5jC,EAAI02D,eAAe0E,gBAAkBp7D,EAAI,EAAI02D,eAAe0E,eAAiB,GAAK,CAE/F2B,IAA4C,MAAtBL,EAAY94B,IAClC84B,EAAY94B,GAAOr6B,UAAUC,IAAI,oBAM7CvJ,KAAKiR,UACDtK,MAAOuP,SAASzS,OAAO0S,iBAAiBwmD,GAAOh2D,OAC/CC,OAAQsP,SAASzS,OAAO0S,iBAAiBwmD,GAAO/1D,UAI9C6vD,eAAA31D,UAAAw6D,mBAAV,WACI,GAAIkB,GAA4Bx8D,KAAK06B,KAAK4hC,uBAAuB,uBAAuB,EAEpF7F,gBAAe0E,cAAgB,IAC/Bn7D,KAAK+8D,WAAa/8D,KAAKqgB,cAAc,MAAO,aAAcm8C,GAC1Dx8D,KAAK+8D,WAAWlrD,MAAMi3B,MAAQ2tB,eAAe0E,cAAgBn7D,KAAKiR,SAAStK,MAAQ,OAQpF8vD,eAAA31D,UAAAgD,WAAP,SAAkBwoB,EAA8B0wC,GAC5Ch9D,KAAKw4D,OAAOlsC,EAAM0wC,IAOfvG,eAAA31D,UAAA03D,OAAP,SACIlsC,EACA0wC,EACA34B,EACAs3B,EACAK,GAFA,SAAA33B,OAAA,GACA,SAAAs3B,UACA,SAAAK,OAAA,GAEAh8D,KAAKi9D,YAAc3wC,EAEnBtsB,KAAKk9D,UAAYl9D,KAAKm9D,eAAe7wC,EAAK4wC,WAC1Cl9D,KAAKo9D,SAAW/xD,KAAKs9C,OAAS,GAAIt9C,MAAKihB,EAAK+wC,eAAexjD,UAAY,GAAIxO,MAAK2xD,GAAiBnjD,WACjG7Z,KAAKs9D,cAAgBt9D,KAAKm9D,eAAe7wC,EAAKgxC,eAC9Ct9D,KAAKg8D,gBAAkBA,CAEvB,IAAMuB,GAAiBlyD,KAAKs9C,MAAQ3oD,KAAKi8D,eAAkD,IAAjCxF,eAAe+G,eAOzE,OALI7B,QACA37D,KAAK27D,sBAAwB37D,KAAKm9D,eAAexB,IAIjD4B,GAAwC,MAAtBv9D,KAAKk7D,kBACvBl7D,MAAKk7D,gBAKLl7D,KAAKy9D,SACLz9D,KAAK09D,kBACL19D,MAAKk8D,cAIJl8D,KAAK29D,aAAct5B,GACpBrkC,KAAK49D,YAQNnH,eAAA31D,UAAA2G,MAAP,SAAayvD,GACT,GADS,SAAAA,OAAA,IACJl3D,KAAKy9D,QAAS,CAIf,GAHAz9D,KAAKy9D,SAAU,EACfz9D,KAAK29D,YAAa,EAEdzG,EAIA,MAHAl3D,MAAK69D,iBACL79D,KAAK89D,iBAAgB,OACrB99D,MAAK+9D,gBAIL/9D,MAAK+8D,aACL/8D,KAAK+8D,WAAWlrD,MAAMC,QAAU,QAGpC9R,KAAK06B,KAAKpxB,UAAUC,IAAI,eACxB,IAAMy0D,GAAWh+D,KAAKi+D,YAClBj+D,KAAKw7D,qBAAuB,EAAIx7D,KAAKw7D,qBAAqBttD,WAAa,IACvE,GAEEgwD,EAAWl+D,KAAKi+D,YAAY,WAAW,EAE7Cj+D,MAAK89D,iBAAgB,GACrB99D,KAAKm+D,cACDH,EACAE,GACA,GACA,EACmC,EAAnCzH,eAAe2H,kBACf,EACA,UACA,EACA,QAKJ3H,eAAA31D,UAAAi9D,eAAR,WACI/9D,KAAK06B,KAAKpxB,UAAUC,IAAI,mBAGpBktD,eAAA31D,UAAAu9D,WAAR,WACI,QAAIr+D,KAAKy9D,UACLz9D,KAAK69D,iBACL79D,KAAK89D,kBACL99D,KAAK29D,YAAa,GAEX,IAMPlH,eAAA31D,UAAA48D,YAAR,WACQ19D,KAAKy9D,UACLz9D,KAAKy9D,SAAU,EAEfz9D,KAAK06B,KAAKpxB,UAAU6N,OAAO,gBACvBnX,KAAK+8D,aACL/8D,KAAK+8D,WAAWlrD,MAAMC,QAAU,WAKrC2kD,eAAA31D,UAAA05D,SAAP,WACI,MAAOx6D,MAAKy9D,SAGThH,eAAA31D,UAAAm2D,iBAAP,WACIj3D,KAAKs+D,SACLt+D,KAAK06B,KAAKpxB,UAAU6N,OAAO,cAC3BnX,KAAK47D,kBAAkBlmD,OACvB1V,KAAK69D,iBACL79D,KAAK89D,kBACL99D,KAAKu+D,mBACLv+D,KAAK29D,YAAa,EAClB39D,KAAK09D,cACL19D,KAAKk8D,MAAMzF,eAAe+H,kBAAoB,IAG1C/H,eAAA31D,UAAAy9D,iBAAR,WACI,IAAK,GAAIx+D,GAAI,EAAGA,EAAIC,KAAK08D,OAAOxwD,OAAQnM,IACpC8sB,EAAAoB,UAAU0D,aAAa3xB,KAAK08D,OAAO38D,GAAG0tB,IACtCZ,EAAAoB,UAAU0D,aAAa3xB,KAAK08D,OAAO38D,GAAG41B,OAQpC8gC,eAAA31D,UAAAq9D,cAAV,SACIH,EACAE,EACAO,EACAC,EACAnlD,EACAgU,EACAG,EACAixC,EACA9qC,GAEA,GAAI+qC,GAAkB,CACtB,IAAIF,EACA,IAAK,GAAI3+D,GAAI,EAAGA,EAAI02D,eAAemG,OAAQ78D,IAAK,CAC5C,GAAM8+D,GAAWb,EAAShiC,OAAOj8B,GAC3B++D,EAAWZ,EAASliC,OAAOj8B,EAEjC,IAAI8+D,IAAaC,EAAU,CACvBF,EAAkB7+D,CAClB,QAKZ,IAAK,GAAIA,GAAI6+D,EAAiB7+D,EAAI02D,eAAemG,OAAQ78D,IAAK,CAC1D,GAAM8+D,GAAWb,EAAShiC,OAAOj8B,GAC3B++D,EAAWZ,EAASliC,OAAOj8B,EAEjCC,MAAK++D,aACDh/D,EACA8+D,EACAC,EACAvlD,EACAgU,EACAG,EACA+wC,EACAE,EAAW5+D,EAAI,IAAM,EAAI,KAAU,EACnCA,IAAM02D,eAAemG,OAAS,EAAI/oC,EAAW,QAK/C4iC,eAAA31D,UAAAi+D,aAAV,SACIp7B,EACAq7B,EACAC,EACA1lD,EACAgU,EACAG,EACA+wC,EACAS,EACArrC,GAEA,GAAM8B,GAAO31B,KAAK08D,OAAO/4B,GAAOhO,IAChC31B,MAAKm/D,cAAcxpC,EAAM,EAAGpI,GAC5BvtB,KAAKo/D,cAAczpC,EAAMqpC,EAAWP,GAAW,GAC/C5xC,EAAAoB,UAAU4H,OACNF,EACApc,GACE6F,EAAG,IACHA,EAAGpf,KAAKiR,SAASrK,OAASs4D,KAAgBxxC,KAAMA,EAAMH,MAAOA,GAGnE,IAAME,GAAKztB,KAAK08D,OAAO/4B,GAAOlW,EAC9BztB,MAAKm/D,cAAc1xC,EAAIztB,KAAKiR,SAASrK,OAASs4D,EAAW3xC,GACzDvtB,KAAKo/D,cAAc3xC,EAAIwxC,EAASR,GAChC5xC,EAAAoB,UAAU0D,aAAalE,EACvB,IAAIlI,GAAQsH,EAAAoB,UAAU4H,OAClBpI,EACAlU,GACE6F,EAAGpf,KAAKiR,SAASrK,OAASs4D,IAC1B9/C,EAAG,EAAGsO,KAAMA,EAAMH,MAAOA,GAG1B3rB,GAAAqG,MAAMC,kBAAkB2rB,KACzB7zB,KAAK+7D,WAAax2C,EAClBvlB,KAAK+7D,WAAWluC,cAAc,aAAcgG,KAAc7zB,QAIxDy2D,eAAA31D,UAAAs+D,cAAV,SAAwB7E,EAAmBxtD,EAAe0xD,EAAoBO,GAAA,SAAAA,OAAA,GACtEA,IACIP,GAAalE,EAAKjxD,UAAUiO,SAAS,UACrCknD,GAAY,EACJA,GAAclE,EAAKjxD,UAAUiO,SAAS,YAC9CknD,GAAY,IAIP,MAAT1xD,GAAiBA,IAAU0pD,eAAe4I,kBAC1C9E,EAAKtZ,UAAY,oBAEZwd,GAIDlE,EAAKgC,YAAc,GACnBhC,EAAKtZ,UAAY,UAAYl0C,IAJ7BwtD,EAAKgC,YAAcxvD,EACnBwtD,EAAKtZ,UAAY,iBAQnBwV,eAAA31D,UAAAq+D,cAAV,SAAwB5E,EAAmBn7C,EAAWmO,GAC9CA,EAAQ,IACRgtC,EAAK1oD,MAAMmF,UAAY,kBAAoBoI,EAAI,WAQ/Cq3C,eAAA31D,UAAA88D,QAAR,WACI,IAAI59D,KAAKq+D,aAAT,CAKA,GAAIr+D,KAAKs+D,SAGL,MAFAt+D,MAAK29D,YAAa,MAClB39D,MAAKs/D,kBAKT,IAAIt/D,KAAKu7D,qBAAuBv7D,KAAKk9D,UAAW,CAC5Cl9D,KAAK89D,kBACL99D,KAAKu/D,4BACLv/D,KAAKi8D,eAAiB5wD,KAAKs9C,KAG3B,IAAM6W,GAA+C,MAA9Bx/D,KAAKo9D,SAAW/xD,KAAKs9C,MAc5C,aAbI6W,EAAgB,GAChBx/D,KAAK69D,iBACL79D,KAAK87D,UAAYjvC,EAAAoB,UAAU4H,OACvB71B,KACAw/D,GACEC,UAAW,IACXA,UAAW,IAAK/xC,KAAM,WAE5B1tB,KAAK87D,UAAUjuC,cAAc,aAAc7tB,KAAK49D,WAAa59D,OAE7DA,KAAK29D,YAAa,GAO1B,GAAI39D,KAAKu7D,oBAAsBv7D,KAAKk9D,UAEhC,YADAl9D,KAAK29D,YAAa,EAItB,IAAM+B,GAA+C,MAA9B1/D,KAAKo9D,SAAW/xD,KAAKs9C,MAC5C3oD,MAAK69D,iBACL79D,KAAK87D,UAAYjvC,EAAAoB,UAAU4H,OACvB71B,KACA0/D,GACEnE,oBAAqBv7D,KAAKu7D,sBAC1BA,oBAAqBv7D,KAAKk9D,UAAWxvC,KAAM,SAAUq1B,WAAY,wBAEvE/iD,KAAK87D,UAAUjuC,cAAc,aAAc7tB,KAAK49D,WAAa59D,MAC7DA,KAAK87D,UAAUjuC,cAAc,WAAY7tB,KAAK2/D,wBAA0B3/D,MAExEA,KAAK29D,YAAa,IAGdlH,eAAA31D,UAAA6+D,qBAAR,WAC2B,MAAnB3/D,KAAK+7D,YACL/7D,KAAK4/D,kBAILnJ,eAAA31D,UAAA8+D,eAAR,WACI,GAAI5/D,KAAKy9D,QAEL,WADAz9D,MAAK89D,iBAIT,IAAI99D,KAAKw7D,sBAAwBx7D,KAAKu7D,oBAElC,WADAv7D,MAAK89D,iBAIT,IAAME,GAAWh+D,KAAKi+D,YAAYj+D,KAAKw7D,qBAAqBttD,YAAY,GAClEgwD,EAAWl+D,KAAKi+D,YAAYj+D,KAAKu7D,oBAAoBrtD,YAAY,EAEvElO,MAAKi8D,eAAiB5wD,KAAKs9C,MAE3B3oD,KAAKm+D,cACDH,EACAE,GACA,GACA,EACmC,EAAnCzH,eAAe2H,kBACf,EACA,UACA,EACAp+D,KAAK4/D,gBAET5/D,KAAKw7D,qBAAuBx7D,KAAKu7D,qBAG7B9E,eAAA31D,UAAAo7D,MAAR,SAAc2D,GAAA,SAAAA,MAAA,GACV7/D,KAAK6/D,eAAiBA,EACtB7/D,KAAK29D,YAAa,EAElB39D,KAAK8/D,gBAGDrJ,eAAA31D,UAAAg/D,aAAR,WACI,IAAI9/D,KAAKq+D,aAIT,GAAIr+D,KAAK6/D,gBAAkBpJ,eAAe+H,kBAAoB,GAAyB,MAApBx+D,KAAKi9D,YAAqB,CAEzF,GAAIj9D,KAAKs+D,SAIL,MAHAt+D,MAAK89D,kBACL99D,KAAK29D,YAAa,MAClB39D,MAAKs/D,kBAGT,IAAMtB,GAAWh+D,KAAKi+D,YAAYj+D,KAAKu7D,oBAAoBrtD,YAAY,GACjEgwD,EAAWl+D,KAAKi+D,YAAYj+D,KAAKs9D,cAAcpvD,YAAY,EAEjElO,MAAKu7D,oBAAsBv7D,KAAKs9D,cAChCt9D,KAAKw7D,qBAAuBx7D,KAAKs9D,cAEjCt9D,KAAKm+D,cACDH,EACAE,GACA,GACA,EACmC,GAAnCzH,eAAe2H,kBACf,EACA,gBACA,EACAp+D,KAAK+/D,mBAEN,CACH//D,KAAK6/D,gBACL,IAAM5gD,GAASF,KAAKE,SACd+gD,EAASjhD,KAAKiV,IAAI,GAAIyiC,eAAemG,QACrC7vD,EAAQgS,KAAK+0B,MAAM70B,EAAS+gD,GAE5BhC,EAAWh+D,KAAKi+D,YAClBj+D,KAAKu7D,oBAAsB,EAAIv7D,KAAKu7D,oBAAoBrtD,WAAa,IACrE,GAEEgwD,EAAWl+D,KAAKi+D,YAAYlxD,EAAMmB,YAAY,EAEpDlO,MAAKm+D,cACDH,EACAE,GACA,GACA,EACAzH,eAAe2H,kBACf,EACA,UACA,EACAp+D,KAAK8/D,cAET9/D,KAAKu7D,oBAAsBxuD,IAI3B0pD,eAAA31D,UAAAi/D,cAAR,WACI//D,KAAKi8D,eAAiB5wD,KAAKs9C,MAC3B3oD,KAAK89D,kBACL99D,KAAK29D,YAAa,EAClB39D,KAAK49D,WAODnH,eAAA31D,UAAAw9D,OAAR,WACI,GAAIn3D,IAAS,CACb,IAAwB,MAApBnH,KAAKi9D,aAAyD,MAAlCj9D,KAAKi9D,YAAYxE,cAAuB,CACpE,GAAMwH,GACFjgE,KAAK27D,yBACC37D,KAAK27D,sBACL37D,KAAKm9D,eAAen9D,KAAKi9D,YAAYxE,eACzCyH,EAAkBlgE,KAAKi9D,YAAYkD,QAErCngE,MAAKy7D,kBACLt0D,EAASnH,KAAKy7D,cAAgBwE,GAIzB94D,GAAUnH,KAAK07D,iBAAqBwE,OAAyBlgE,KAAKg8D,kBACnE70D,EAASnH,KAAK07D,cAAgBwE,IAItClgE,KAAK07D,aAAewE,EACpBlgE,KAAKy7D,aAAewE,EACpBjgE,KAAK27D,yBAGT,MAAOx0D,IAAUnH,KAAKg8D,iBAGlBvF,eAAA31D,UAAAw+D,iBAAR,WACIt/D,KAAK69D,iBAEkB,MAAnB79D,KAAK+7D,WACL/7D,KAAK+7D,WAAWluC,cAAc,aAAc7tB,KAAKogE,qBAAuBpgE,MAExEA,KAAKogE,qBAIL3J,eAAA31D,UAAAs/D,kBAAR,WACI,GAAIpgE,KAAKu7D,qBAAuBv7D,KAAKy7D,aAAc,CAC/C,GAAMuC,GAAWh+D,KAAKi+D,YAAYj+D,KAAKu7D,oBAAoBrtD,YAAY,GACjEgwD,EAAWl+D,KAAKi+D,YAAYj+D,KAAKy7D,aAAavtD,YAAY,EAEhElO,MAAKm+D,cACDH,EACAE,GACA,GACA,EACmC,EAAnCzH,eAAe2H,kBACf,EACA,UACA,EACAp+D,KAAKqgE,kBAETrgE,KAAKw7D,qBAAuBx7D,KAAKu7D,wBAEjCv7D,MAAKqgE,kBAGTrgE,MAAK47D,kBAAkBjmD,MACnB3V,KAAKg8D,gBAAkBvF,eAAe6J,4BAA8B7J,eAAe8J,kBAInF9J,eAAA31D,UAAAu/D,iBAAR,WACIrgE,KAAKwgE,gBACLxgE,KAAK06B,KAAKpxB,UAAUC,IAAI,cAEpBvJ,KAAKg8D,iBACLh8D,KAAK06B,KAAKpxB,UAAUC,IAAI,iBAIxBktD,eAAA31D,UAAA+6D,qBAAR,WACI77D,KAAKg8D,iBAAkB,EACvBh8D,KAAK06B,KAAKpxB,UAAU6N,OAAO,aAAc,gBACzCnX,KAAKk8D,SAOFzF,eAAA31D,UAAA63D,QAAP,WACI,MAAO34D,MAAK06B,MAGT+7B,eAAA31D,UAAAo1D,UAAP,WACI,GAA+B,MAA3Bl2D,KAAK06B,KAAK5iB,cAAuB,CACjC9X,KAAK06B,KAAK5iB,cAAcxO,UAAUC,IAAI,qBACtCvJ,KAAK06B,KAAK5iB,cAAc03B,WAExB,IAAI5oC,GAASsP,SAASzS,OAAO0S,iBAAiBnW,KAAK06B,KAAK5iB,eAAelR,OAGvE,OAFA5G,MAAK06B,KAAK5iB,cAAcxO,UAAU6N,OAAO,qBAElCvQ,EAGX,MAAO,IAGH6vD,eAAA31D,UAAAuf,cAAR,SAAsBg6C,EAAapZ,EAAmBqZ,GAClD,GAAIC,GAAOpxD,SAASkX,cAAcg6C,EAOlC,OANAE,GAAKjuD,aAAa,QAAS20C,GAEvBqZ,GACAA,EAAShpD,YAAYipD,GAGlBA,GAGD9D,eAAA31D,UAAAq8D,eAAV,SAAyBpwD,GACrB,GAAI0zD,GAAiBr+D,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa5zD,EAAMmB,WAKvE,IAJAuyD,EAAiBA,EAAerzD,QAAQ,IAAK,IAE7CL,EAAQmJ,SAASuqD,GAEb1zD,GAASgS,KAAKiV,IAAI,GAAIyiC,eAAemG,QAAS,CAG9C,IAAK,GAFDgE,GAAkB,GAEb7gE,EAAI,EAAGA,EAAI02D,eAAemG,OAAQ78D,IACvC6gE,EAAkB,IAAIA,CAG1B,OAAO1qD,UAAS0qD,GAGpB,MAAO7zD,IAGD0pD,eAAA31D,UAAAm9D,YAAV,SAAsBwC,EAAwBI,GAC1C,GAAIJ,EAAev0D,OAASuqD,eAAemG,OACvC6D,EAAiBA,EAAevkC,OAAOukC,EAAev0D,OAASuqD,eAAemG,YAC3E,CACH,KAAO6D,EAAev0D,OAASuqD,eAAe0E,cAAgB,GAC1DsF,EAAiB,IAAIA,CAGzB,MAAOA,EAAev0D,OAASuqD,eAAemG,QAC1C6D,EAAiB,IAAGI,EAAUpK,eAAe4I,kBAAoB,KAAMoB,EAI/E,MAAOA,IAGDhK,eAAA31D,UAAA+8D,eAAV,WAC0B,MAAlB79D,KAAK87D,YACL97D,KAAK87D,UAAU1wC,OACfprB,KAAK87D,UAAUjuC,cAAc,aAAc,MAC3C7tB,KAAK87D,UAAUjuC,cAAc,WAAY,MACzC7tB,KAAK87D,UAAY,OAIfrF,eAAA31D,UAAAg9D,gBAAV,SAA0BgD,GAAA,SAAAA,OAAA,GACC,MAAnB9gE,KAAK+7D,aACL/7D,KAAK+7D,WAAWluC,cAAc,aAAc,MAEvCizC,GACD9gE,KAAK+7D,WAAW3wC,OAGpBprB,KAAK+7D,WAAa,OAIhBtF,eAAA31D,UAAAy+D,0BAAV,WAGI,IAAK,GAFCwB,GAAe/gE,KAAKi+D,YAAYj+D,KAAKu7D,oBAAoBrtD,YAAY,GAElEnO,EAAI,EAAGA,EAAIC,KAAK08D,OAAOxwD,OAAQnM,IACpCC,KAAKo/D,cAAcp/D,KAAK08D,OAAO38D,GAAG0tB,GAAIszC,EAAa/kC,OAAOj8B,IAAI,GAE9DC,KAAK08D,OAAO38D,GAAG41B,KAAKrpB,aAChB,QACA,oCAAsCtM,KAAKiR,SAASrK,UAAc,MAEtE5G,KAAK08D,OAAO38D,GAAG0tB,GAAGnhB,aAAa,QAAS,yCAItCmqD,eAAA31D,UAAA0/D,cAAV,WAGI,IAAK,GAFCO,GAAe/gE,KAAKi+D,YAAYj+D,KAAKy7D,aAAavtD,YAAY,GAE3DnO,EAAI,EAAGA,EAAIC,KAAK08D,OAAOxwD,OAAQnM,IACpCC,KAAKo/D,cAAcp/D,KAAK08D,OAAO38D,GAAG0tB,GAAIszC,EAAa/kC,OAAOj8B,IAAI,GAE9DC,KAAK08D,OAAO38D,GAAG41B,KAAKrpB,aAChB,QACA,oCAAsCtM,KAAKiR,SAASrK,UAAc,MAEtE5G,KAAK08D,OAAO38D,GAAG0tB,GAAGnhB,aAAa,QAAS,yCA3yBjCmqD,eAAA4I,kBAA4B,IAE5B5I,eAAA8J,gBAA0B,IAE1B9J,eAAA6J,4BAAsC,IAEtC7J,eAAAmG,OAAiB,GAEjBnG,eAAA0E,cAAwB,EAExB1E,eAAA2H,kBAA4B,GAG5B3H,eAAA+H,kBAA4B,GAE5B/H,eAAAoG,uBAAiC,EAEjCpG,eAAA+G,gBAA0B,IA6xB7C/G,iBAnzBap2D,GAAAo2D,eAAcA,GzB4sYrB,SAASn2D,EAAQD,EAASF,GAE/B,Y0BztYD,IAAAyB,GAAAzB,EAAoC,GACpC8B,EAAA9B,EAAwB,GACxBqC,EAAArC,EAA2B,GAM3BuJ,EAAA,mBAAAA,cA2EA,MA7DWA,WAAAC,OAAP,SAAcq3D,G1B4sYT,I0B5sYsB,GAAAj0D,MAAAD,EAAA,EAAAA,EAAA1J,UAAA8I,OAAAY,IAAAC,EAAAD,EAAA,GAAA1J,UAAA0J,EACvB,OAAa,OAATC,GAAiBA,EAAMb,OAAS,EACzBjK,EAAAwH,QAAQmD,cAAavL,MAArBY,EAAAwH,SAAsBu3D,GAAG1/D,OAAKyL,IAE9B9K,EAAAwH,QAAQxF,IAAI+8D,IAWpBt3D,UAAAg3D,WAAP,SAAkBO,EAAiBC,GAC/B,OAAQD,GACJ,IAAKjhE,MAAK2gE,YACN,MAAO/+D,GAAA4L,YAAYC,cAAcyzD,EAAM1+D,EAAAgC,WAAWC,kBAAkBkJ,mBAM5E,MAAOuzD,IAUJx3D,UAAAy3D,WAAP,SAAkBC,EAAmBF,GACjC,OAAQE,GACJ,IAAKphE,MAAKqhE,aACN,MAAIziD,YAAWsiD,IAAS,EACb,GAEAA,EAOnB,MAAOA,IASJx3D,UAAA0O,IAAP,SAAWC,KApEJ3O,UAAAi3D,YAAsB,QAGtBj3D,UAAA23D,aAAuB,UAsElC33D,YA3EarJ,GAAAqJ,UAASA,G1B6wYhB,SAASpJ,EAAQD,EAASF,GAE/B,Y2BvxYD,IAAAyB,GAAAzB,EAAoD,GAEpDmhE,EAAAnhE,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAC1BkT,EAAAlT,EAAwB,IACxBsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAI5B22D,EAAA,WAuBI,QAAAA,sBAAYnzB,EAAe4yB,GACvBv2D,KAAK06B,KAAO16B,KAAKo7D,iBAAiBz3B,GAClC3jC,KAAKo8D,SAAW,GAChBp8D,KAAKuhE,uBAELhL,EAAOjlD,YAAYtR,KAAK06B,MAsQhC,MA/PWo8B,sBAAAh2D,UAAAgD,WAAP,SAAkB09D,GACdxhE,KAAKyhE,qBACLzhE,KAAK0hE,aAAc,EAEfF,GACAxhE,KAAKw4D,OAAOgJ,IAQV1K,qBAAAh2D,UAAAs6D,iBAAV,SAA2Bz3B,GACvB,MAAO3jC,MAAKqgB,cAAc,MAAO,oCAAsCsjB,IAGjEmzB,qBAAAh2D,UAAA2gE,mBAAV,WACI,GAAIzhE,KAAK06B,KAAM,CACX,GAAIinC,GAAO,OACPC,EAAU,OAIVC,EAAW7hE,KAAKqgB,cAAc,MAAO,kBAAmBrgB,KAAK06B,KACjEmnC,GAAS9vD,iBAAiB,aAAc,SAAClS,GACrCA,EAAEoV,iBACFpV,EAAEqV,kBACF7B,EAAAwD,QAAQoiD,2BAEZ4I,EAAS9vD,iBAAiB,QAAS,WAC/BsB,EAAAwD,QAAQoiD,2BAKZ0I,EAAU3hE,KAAKqgB,cAAc,MAAO,wBAAyBrgB,KAAK06B,MAClE16B,KAAKqgB,cAAc,MAAO,eAAgBshD,GAC1C3hE,KAAK8hE,kBAAkB,MAAO,eAAgBR,EAAAS,YAAYC,SAAUL,GAGpEA,EAAU3hE,KAAKqgB,cAAc,MAAO,2CAA4CrgB,KAAK06B,MACrFknC,EAAa5hE,KAAKqgB,cAAc,MAAO,2BAA4BshD,GACnE3hE,KAAKiiE,kBACD,MACA,0BACA7/D,EAAAsH,UAAUC,OAAO,gCACjBi4D,GAEJ5hE,KAAK8hE,kBAAkB,MAAO,0BAA2BR,EAAAS,YAAYG,mBAAoBN,GACzF5hE,KAAK8hE,kBAAkB,MAAO,6BAA8BR,EAAAS,YAAYI,qBAAsBR,GAE9F3hE,KAAKoiE,WAAWd,EAAAS,YAAYG,mBAAoB,KAChDliE,KAAKoiE,WAAWd,EAAAS,YAAYI,qBAAsB//D,EAAAsH,UAAUC,OAAO,4BAGnEg4D,EAAU3hE,KAAKqgB,cAAc,MAAO,2CAA4CrgB,KAAK06B,MACrFknC,EAAa5hE,KAAKqgB,cAAc,MAAO,2BAA4BshD,GACnE3hE,KAAKiiE,kBACD,MACA,0BACA7/D,EAAAsH,UAAUC,OAAO,6BACjBi4D,GAEJ5hE,KAAK8hE,kBAAkB,MAAO,0BAA2BR,EAAAS,YAAYM,aAAcT,GAEnF5hE,KAAKoiE,WAAWd,EAAAS,YAAYM,aAAc,KAG1CV,EAAU3hE,KAAKqgB,cAAc,MAAO,2CAA4CrgB,KAAK06B,MACrFknC,EAAa5hE,KAAKqgB,cAAc,MAAO,2BAA4BshD,GACnE3hE,KAAKiiE,kBACD,MACA,0BACA7/D,EAAAsH,UAAUC,OAAO,6BACjBi4D,GAEJ5hE,KAAK8hE,kBAAkB,MAAO,0BAA2BR,EAAAS,YAAYO,gBAAiBV,GACtF5hE,KAAK8hE,kBAAkB,MAAO,6BAA8BR,EAAAS,YAAYQ,kBAAmBZ,GAE3F3hE,KAAKoiE,WAAWd,EAAAS,YAAYO,gBAAiB,KAC7CtiE,KAAKoiE,WAAWd,EAAAS,YAAYQ,kBAAmBngE,EAAAsH,UAAUC,OAAO,4BAEhE3J,KAAKwiE,UAAS,KAIf1L,qBAAAh2D,UAAAm1D,uBAAP,WACyB,MAAjBj2D,KAAKyiE,UACLziE,KAAKw4D,OAAOx4D,KAAKyiE,WAQlB3L,qBAAAh2D,UAAA2G,MAAP,SAAayvD,GAAA,SAAAA,OAAA,GACLA,EACAl3D,KAAK06B,KAAKpxB,UAAUC,IAAI,kBAEpBvJ,KAAK0hE,aACL1hE,KAAKwiE,UAAS,GAEdxiE,KAAKoiE,WAAWd,EAAAS,YAAYQ,kBAAmBngE,EAAAsH,UAAUC,OAAO,4BAChE3J,KAAKoiE,WAAWd,EAAAS,YAAYO,gBAAiB,KAC7CtiE,KAAKoiE,WAAWd,EAAAS,YAAYI,qBAAsB//D,EAAAsH,UAAUC,OAAO,4BACnE3J,KAAKoiE,WAAWd,EAAAS,YAAYG,mBAAoB,KAChDliE,KAAKoiE,WAAWd,EAAAS,YAAYM,aAAc,MAE1CriE,KAAK8D,WAAW,OASrBgzD,qBAAAh2D,UAAA03D,OAAP,SAAclsC,GACVtsB,KAAKyiE,SAAWn2C,EAEZtsB,KAAK0hE,aACL1hE,KAAKoiE,WAAWd,EAAAS,YAAYC,SAAU11C,EAAKorC,MAC3C13D,KAAKoiE,WACDd,EAAAS,YAAYQ,kBACZj2C,EAAKmsC,cAAgBr2D,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAar0C,EAAKmsC,cAAcvqD,YAAc,KAClG,SAEJlO,KAAKoiE,WAAWd,EAAAS,YAAYO,gBAAiBh2C,EAAKo2C,YAAa,QAC/D1iE,KAAKoiE,WACDd,EAAAS,YAAYI,qBACZ71C,EAAKq2C,iBACCvgE,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAar0C,EAAKq2C,iBAAiBz0D,YAClE,KACN,SAEJlO,KAAKoiE,WAAWd,EAAAS,YAAYG,mBAAoB51C,EAAKs2C,eAAgB,QACrE5iE,KAAKoiE,WAAWd,EAAAS,YAAYM,aAAc/1C,EAAK6zC,SAAW7zC,EAAK6zC,SAASjyD,WAAa,MAErFlO,KAAKwiE,YAELxiE,KAAK8D,WAAWwoB,IAIhBwqC,qBAAAh2D,UAAAshE,WAAR,SAAmBS,EAAgB91D,EAAeipC,GAC9C,GAD8C,SAAAA,MAAA,IAC1Ch2C,KAAKuhE,qBAAuBvhE,KAAKuhE,oBAAoBsB,KAAYjhE,EAAA4I,YAAYC,cAAcsC,GAAQ,CACnG,GAAc,IAAVipC,EACA,OAAQA,GACJ,IAAK,QACDjpC,EAAQA,EAAQ,IAAMnK,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,aACvD,MACJ,KAAK,OACD,GAAI+M,GAAO,GAAIz3D,MAAK0B,EACpBA,GACI/M,KAAK+iE,SAASD,EAAKE,UAAW,GAC9B,KACAhjE,KAAK+iE,SAASD,EAAKG,WAAa,EAAG,GACnC,KACAH,EAAKI,cAIrBljE,KAAKuhE,oBAAoBsB,GAAQtG,YAAcxvD,IAI/C+pD,qBAAAh2D,UAAAiiE,SAAR,SAAiB1W,EAAa5lD,GAE1B,IADA,GAAI4R,GAAIg0C,EAAM,GACPh0C,EAAEnM,OAASzF,GAAM4R,EAAI,IAAMA,CAClC,OAAOA,IAOJy+C,qBAAAh2D,UAAAu4D,WAAP,WACIr5D,KAAK06B,KAAKpxB,UAAU6N,OAAO,cAGxB2/C,qBAAAh2D,UAAAo4D,YAAP,WACIl5D,KAAK06B,KAAKpxB,UAAUC,IAAI,cAGrButD,qBAAAh2D,UAAAw4D,OAAP,WACI,OAAQt5D,KAAK06B,KAAKpxB,UAAUiO,SAAS,cAOlCu/C,qBAAAh2D,UAAA63D,QAAP,WACI,MAAO34D,MAAK06B,MAGRo8B,qBAAAh2D,UAAA0hE,SAAR,SAAiB5kC,GAAA,SAAAA,OAAA,EAGb,KAAK,GAFCulC,GAAcnjE,KAAK06B,KAAK4hC,uBAAuB,sBAE5Cv8D,EAAI,EAAGA,EAAIojE,EAAYj3D,OAAQnM,IAAK,CACzC,GAAMw6D,GAAoB4I,EAAYpjE,EACtCw6D,GAAK1oD,MAAMC,QAAU8rB,EAAU,GAAK,OAKxC,IAAK,GAFCwlC,GAAgBpjE,KAAK06B,KAAK4hC,uBAAuB,gBAE9Cv8D,EAAI,EAAGA,EAAIqjE,EAAcl3D,OAAQnM,IAAK,CAC3C,GAAMw6D,GAAoB6I,EAAcrjE,EACxCw6D,GAAK1oD,MAAMC,QAAU8rB,EAA+B,IAApB28B,EAAKgC,YAAoB,OAAS,GAAM,OAI5E,GAAM8G,GAAgBrjE,KAAK06B,KAAK4hC,uBAAuB,uBACvD,IAAI1+B,EACA,IAAK,GAAI79B,GAAI,EAAGA,EAAIsjE,EAAcn3D,OAAQnM,IACtCsjE,EAActjE,GAAG84B,WAAWpS,YAAY48C,EAActjE,QAG1D,IAA4B,GAAxBsjE,EAAcn3D,OAAa,CAC3B,GAAMy1D,GAAU3hE,KAAKqgB,cAAc,MAAO,6CAA8CrgB,KAAK06B,KAC7F16B,MAAK8hE,kBAAkB,MAAO,6BAA8BR,EAAAS,YAAYuB,WAAY3B,GACpF3hE,KAAKoiE,WAAWd,EAAAS,YAAYuB,WAAYlhE,EAAAsH,UAAUC,OAAO,8BAK7DmtD,qBAAAh2D,UAAAuf,cAAR,SAAsBg6C,EAAapZ,EAAmBqZ,GAClD,GAAIC,GAAOpxD,SAASkX,cAAcg6C,EAOlC,OANAE,GAAKjuD,aAAa,QAAS20C,GAEvBqZ,GACAA,EAAShpD,YAAYipD,GAGlBA,GAGHzD,qBAAAh2D,UAAAmhE,kBAAR,SAA0B5H,EAAapZ,EAAmBigB,EAAc5G,GACpE,GAAIC,GAAOv6D,KAAKqgB,cAAcg6C,EAAKpZ,EAAWqZ,EAG9C,OAFAC,GAAKgC,YAAc2E,EAEZ3G,GAGHzD,qBAAAh2D,UAAAghE,kBAAR,SAA0BzH,EAAapZ,EAAmB4hB,EAAgBvI,GACtE,GAAIC,GAAOv6D,KAAKqgB,cAAcg6C,EAAKpZ,EAAWqZ,EAM9C,OAJIt6D,MAAKuhE,sBACLvhE,KAAKuhE,oBAAoBsB,GAAUtI,GAGhCA,GAEfzD,uBAlSaz2D,GAAAy2D,qBAAoBA,G3Bg9Y3B,SAASx2D,EAAQD,GAEtB,Y4B59YD,IAAA0hE,GAAA,mBAAAA,gBAQA,MAPWA,aAAAC,SAAmB,OACnBD,YAAAG,mBAA6B,iBAC7BH,YAAAI,qBAA+B,mBAC/BJ,YAAAM,aAAuB,WACvBN,YAAAO,gBAA0B,cAC1BP,YAAAQ,kBAA4B,gBAC5BR,YAAAuB,WAAqB,SAChCvB,cARa1hE,GAAA0hE,YAAWA,G5B8+YlB,SAASzhE,EAAQD,GAEtB,Y6Bh/YD,IAAAsI,GAAA,mBAAAA,aAmDA,MAlDWA,UAAA46D,WAAqB,SACrB56D,SAAA66D,YAAsB,WACtB76D,SAAAC,iBAA2B,gBAC3BD,SAAA86D,gBAA0B,eAC1B96D,SAAA+6D,iBAA2B,gBAC3B/6D,SAAAg7D,iBAA2B,gBAC3Bh7D,SAAAi7D,qBAA+B,qBAC/Bj7D,SAAAk7D,sBAAgC,sBAChCl7D,SAAAm7D,sBAAgC,sBAChCn7D,SAAAotD,aAAuB,WACvBptD,SAAAo7D,iBAA2B,eAC3Bp7D,SAAAq7D,eAAyB,cACzBr7D,SAAAs7D,aAAuB,YACvBt7D,SAAAu7D,kBAA4B,kBAC5Bv7D,SAAAw7D,aAAuB,YACvBx7D,SAAAy7D,eAAyB,aACzBz7D,SAAA07D,iBAA2B,gBAC3B17D,SAAA27D,QAAkB,MAClB37D,SAAA47D,gBAA0B,eAC1B57D,SAAA67D,qBAA+B,aAC/B77D,SAAA87D,mBAA6B,mBAC7B97D,SAAA+7D,0BAAoC,mBACpC/7D,SAAAg8D,wBAAkC,yBAClCh8D,SAAAi8D,kBAA4B,iBAC5Bj8D,SAAAk8D,qBAA+B,qBAC/Bl8D,SAAAm8D,0BAAoC,2BACpCn8D,SAAAo8D,mBAA6B,kBAC7Bp8D,SAAAq8D,4BAAsC,4BACtCr8D,SAAAs8D,sBAAgC,sBAChCt8D,SAAAu8D,mBAA6B,kBAC7Bv8D,SAAAw8D,kBAA4B,kBAC5Bx8D,SAAAy8D,oBAA8B,oBAC9Bz8D,SAAA08D,yBAAmC,0BACnC18D,SAAA28D,YAAsB,WACtB38D,SAAA48D,6BAAuC,8BACvC58D,SAAA68D,2BAAqC,4BACrC78D,SAAA88D,eAAyB,eACzB98D,SAAA+8D,eAAyB,eACzB/8D,SAAAg9D,gBAA0B,eAC1Bh9D,SAAAi9D,2BAAqC,2BACrCj9D,SAAAk9D,sBAAgC,sBAChCl9D,SAAAm9D,qBAA+B,qBAC/Bn9D,SAAAo9D,iBAA2B,iBAC3Bp9D,SAAAq9D,eAAyB,eACzBr9D,SAAAs9D,kBAA4B,kBAC5Bt9D,SAAAu9D,WAAqB,UACrBv9D,SAAAw9D,cAAwB,aACxBx9D,SAAAy9D,4BAAsC,6BACtCz9D,SAAA09D,iCAA2C,mCAC3C19D,SAAA29D,iCAA2C,mCACtD39D,WAnDatI,GAAAsI,SAAQA,G7B6iZf,SAASrI,EAAQD,EAASF,GAE/B,Y8B/iZD,IAAAyB,GAAAzB,EAAoE,GACpE6B,EAAA7B,EAA8D,GAC9DqC,EAAArC,EAA2B,GAC3BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzBomE,EAAApmE,EAA2B,IAC3BqmE,EAAArmE,EAA+B,IAC/BuC,EAAAvC,EAA+B,IAC/BsO,EAAAtO,EAA8B,IAC9BiC,EAAAjC,EAA0B,IAE1ByN,EAAAzN,EAAwB,GACxB4C,EAAA5C,EAAwB,GACxB2C,EAAA3C,EAAuC,IACvCsmE,EAAAtmE,EAA2B,IAC3BumE,EAAAvmE,EAAgC,IAIhCwmE,EAAAxmE,EAA+B,IAC/BkT,EAAAlT,EAAwB,IAGpBymE,EAAa5kE,EAAA6kE,WAAWD,WAM5Bn+D,EAAA,mBAAAA,gBAywCA,MA/tCI5H,QAAAmD,eAAWyE,YAAA,Y9B+/YNxE,I8B5+YL,WACI,MAAOwE,aAAYq+D,W9B8+YlBlqD,I8BlgZL,SAAoB7P,GACZtE,YAAYq+D,WAAa/5D,GACrBA,GACAtE,YAAYs+D,iBAAkB,EAC9B/kE,EAAAsC,UAAUA,UAAU0iE,mBAEpBhlE,EAAAsC,UAAUA,UAAU2iE,kBAChBC,cAAelnE,KAAKmnE,cACpBC,kBAAmBpnE,KAAKqnE,kBACxBC,iBAAkBtnE,KAAKunE,mBAI/B9+D,YAAYq+D,UAAY/5D,GAExBtE,YAAYs+D,iBAAkB,G9BsgZjC5iE,YAAY,EACZC,cAAc,I8B//YZqE,YAAA++D,gBAAP,WAC8B,MAAtB55D,EAAA1K,QAAQ+B,YACR2I,EAAA1K,QAAQ+B,WAAWwiE,YAAYh/D,YAAYmH,WAI5CnH,YAAAi/D,gBAAP,WACI,SAAIllE,EAAAgC,WAAWC,kBAAkBkjE,sBAAuBl/D,YAAYm/D,kBAMjEn/D,YAAAo/D,iBAAP,WACI,MAAOp/D,aAAYq/D,uBAAyBr/D,YAAYs/D,kBAGrDt/D,YAAAq/D,oBAAP,WACI,MACItlE,GAAAgC,WAAWC,kBAAkBujE,qBACwB,GAArDxlE,EAAAgC,WAAWC,kBAAkBwjE,sBACoB,GAAjDzlE,EAAAgC,WAAWC,kBAAkByjE,kBAC7B1lE,EAAAgC,WAAWC,kBAAkB0jE,qBAI9B1/D,YAAA2/D,aAAP,SAAoBnJ,GAiBhB,MAhBIx2D,aAAYq/D,wBACW,iBAAZ7I,IACPx2D,YAAYs/D,iBAAmB9I,EAC/Bv8D,EAAA0F,eAAeigE,kBAAkB5B,EAAA6B,WAAWC,sBAAuBtJ,EAAU,OAAS,WAEtFx2D,YAAYs/D,kBAAoBt/D,YAAYs/D,iBAC5CrlE,EAAA0F,eAAeigE,kBACX5B,EAAA6B,WAAWC,sBACX9/D,YAAYs/D,iBAAmB,OAAS,WAOpD/lE,EAAAsC,UAAUA,UAAUkkE,iBAAiB//D,YAAYs/D,kBAC1Ct/D,YAAYs/D,kBAGhBt/D,YAAAggE,iBAAP,WACI,GAAmC,MAA/BhgE,YAAYigE,kBACZjgE,YAAYigE,gBAAgB11D,KAAkB,KAAb3H,KAAKs9C,OAGlClgD,YAAYigE,gBAAgBx8D,QAAU1J,EAAAgC,WAAWC,kBAAkBkkE,sBAAsB,CACzF,GAAIC,GACAngE,YAAYigE,gBAAgBjgE,YAAYigE,gBAAgBx8D,OAAS,GACjEzD,YAAYigE,gBAAgB,EAE5BE,GAAWpmE,EAAAgC,WAAWC,kBAAkBokE,oBACpCpgE,YAAYq/D,wBAA0Br/D,YAAYs/D,mBAClDrB,EAAAoC,gBAAgBzP,aAChB5wD,YAAYigE,gBAAkB,MAGlCjgE,YAAYigE,gBAAgBn9C,UAMrC9iB,YAAAsgE,aAAP,SAAoB9J,GAiBhB,MAhBIz8D,GAAAgC,WAAWC,kBAAkBukE,sBACN,iBAAZ/J,IACPx2D,YAAYwgE,iBAAmBhK,EAC/Bv8D,EAAA0F,eAAeigE,kBAAkB5B,EAAA6B,WAAWY,sBAAuBjK,EAAU,OAAS,WAEtFx2D,YAAYwgE,kBAAoBxgE,YAAYwgE,iBAC5CvmE,EAAA0F,eAAeigE,kBACX5B,EAAA6B,WAAWY,sBACXzgE,YAAYwgE,iBAAmB,OAAS,WAQ7CxgE,YAAYwgE,kBAGhBxgE,YAAA0gE,mBAAP,SAA0B5kC,GAGtB,GAFA97B,YAAY2gE,iBAAkB,GAEzBxnE,EAAAqG,MAAMC,kBAAkBvF,EAAAoG,YAAYgxD,cAAe,CACpD,GAAIsP,GAAc1mE,EAAAoG,YAAYgxD,aAAa3yD,MAiB3C,IAfc,MAAViiE,GAA6B,WAAXA,IAClB5gE,YAAY2gE,iBAAkB,GAGK,MAAnCzmE,EAAAoG,YAAYgxD,aAAauP,OACzB7gE,YAAY8gE,WAAY,EAExB9gE,YAAY8gE,WAAY,GAGxBhlC,GAAUzhC,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,cAErEjD,EAAAkD,eAAeC,aAGfplC,EAAM,CACN,GAAIqlC,GAAejnE,EAAAoG,YAAYgxD,YACF,OAAzB6P,EAAapI,UAAsD,MAAlCoI,EAAapI,SAASpF,UACvD3zD,YAAYC,yBAAyBjG,EAAAkG,SAASotD,aAAc6T,EAAapI,SAASpF,UAGtFmK,EAAAsD,WAAWC,gBACXrhE,YAAYshE,oBAG4B,MAApCpnE,EAAAoG,YAAYgxD,aAAaiQ,SACiB,MAA1CrnE,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,OACjCtnE,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,OAAS1D,EAAAsD,WAAWK,KAErDz7D,EAAAyB,cAAci6D,gBAAe,GAGQ,MAArCxnE,EAAAoG,YAAYqhE,aAAa5I,UAE2B,MAAhD7+D,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,YAC2B,OAA7Dn1D,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,WAAqB,WAEvD93D,KAAKqqE,eAAiB1nE,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,WAAqB,UAIrFrvD,YAAY6hE,qBAGhB,GAAwC,MAApC3nE,EAAAoG,YAAYgxD,aAAawQ,QAAiB,CAG1C,IAAK,GAFC9X,GAAWtpD,SAASmzD,uBAAuB,WAExCv8D,EAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAMsJ,GAAuBopD,EAAS1yD,EAEvB,OAAXsJ,IACK7G,EAAAgC,WAAWC,kBAAkB+lE,mBAEvB7nE,EAAAoG,YAAYgxD,aAAawQ,eAChClhE,EAAQwI,MAAM+5B,QAAU,KAFxBviC,EAAQwI,MAAM+5B,QAAU,KAOpCnjC,YAAYC,yBACRjG,EAAAkG,SAAS66D,YACT7gE,EAAAoG,YAAYgxD,aAAawQ,aAAiB,OAAS5nE,EAAAoG,YAAYgxD,aAAawQ,QAAQr8D,YAI5FzF,YAAYgiE,iBAGXp3D,EAAAwD,QAAQgjD,eACT2M,EAAAkD,eAAegB,iBAIf/nE,EAAAoG,YAAYgxD,aAA+B,kBAC3Cp3D,EAAAoG,YAAYgxD,aAA+B,iBAAE4Q,WAAY,EAEzDt3D,EAAAwD,QAAQ9M,YAERsJ,EAAAwD,QAAQy+C,gBAOT7sD,YAAAmiE,qBAAP,WACI,GAAM9S,GAAan1D,EAAAoG,YAAYqhE,aAAatS,UAC5C,KAAKl2D,EAAAqG,MAAMC,kBAAkB4vD,IAAeA,EAAsB,WAAKyO,EAAAsD,WAAWK,IAC9E,IAAK,GAAI7kE,KAAOoD,aAAY4hE,eACxB,GAAI5hE,YAAY4hE,eAAehlE,GAAKwlE,WAAatE,EAAAsD,WAAWK,IAAK,CAC7DzhE,YAAY4hE,eAAehlE,GAAKylE,UAAYnoE,EAAAoG,YAAYqhE,aAAaW,OAAOC,KAC5E,SASTviE,YAAAwiE,oCAAP,WACI,IAAKrpE,EAAAqG,MAAMC,kBAAkBO,YAAY4hE,gBACrC,IAAK,GAAIhlE,KAAOoD,aAAY4hE,eAAgB,CACxC,GAAMa,GAA+BziE,YAAY4hE,eAAehlE,EAChE,IAAI6lE,EAAcL,WAAatE,EAAAsD,WAAWK,IACtC,MAAOgB,GAKnB,MAAO,OAMJziE,YAAAgiE,eAAP,WACI,GAAI3nE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cAEvD,GAC8C,MAA1C9mE,EAAAoG,YAAYgxD,aAAyB,YACiB,MAAtDp3D,EAAAoG,YAAYgxD,aAAyB,WAAY,SAEjD,GAAItxD,YAAY2gE,gBAAiB,CAE7B,GAAMgC,GAAWzoE,EAAAoG,YAAYgxD,aAAyB,WAAY,QAClEtxD,aAAYC,yBAAyBjG,EAAAkG,SAASs7D,aAAcmH,EAASl9D,YAEjE1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD5iE,YAAYC,yBACRjG,EAAAkG,SAASu7D,kBACThuD,SAAStU,EAAA4L,YAAY89D,OAAOF,EAAU7E,EAAAsD,WAAWwB,UAAUn9D,YAAYA,gBAI/E,IAAyC,MAArCvL,EAAAoG,YAAYgxD,aAAaqR,SAAkB,CAC3C,GAAMA,GAAWxpE,EAAA4L,YAAYjE,IACzB5G,EAAAoG,YAAYgxD,aAAyB,WAAY,SACjDp3D,EAAAoG,YAAYgxD,aAAaqR,SAE7B3iE,aAAYC,yBAAyBjG,EAAAkG,SAASs7D,aAAcmH,EAASl9D,YAEjE1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD5iE,YAAYC,yBACRjG,EAAAkG,SAASu7D,kBACThuD,SAAStU,EAAA4L,YAAY89D,OAAOF,EAAU7E,EAAAsD,WAAWwB,UAAUn9D,YAAYA,iBAM/C,OAArCvL,EAAAoG,YAAYgxD,aAAaqR,WAEhC3iE,YAAYC,yBAAyBjG,EAAAkG,SAASs7D,aAActhE,EAAAoG,YAAYgxD,aAAaqR,SAASl9D,YAC1F1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD5iE,YAAYC,yBACRjG,EAAAkG,SAASu7D,kBACThuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAYgxD,aAAaqR,SAAU7E,EAAAsD,WAAWwB,UAAUn9D,YAC7EA,cAMXzF,YAAA8iE,gBAAP,SAAuBC,EAA4BC,GAC/C,GADmB,SAAAD,OAAA,GAA4B,SAAAC,MAAA,GAEL,MAAtC9oE,EAAAoG,YAAYgxD,aAAa2R,WACzBlpE,EAAAgC,WAAWC,kBAAkBsR,UAAUoV,QAAQnpB,EAAA8T,QAAQC,UAAUzO,MAAMqkE,eACzE,CACE,GAAID,GAAY/oE,EAAAoG,YAAYgxD,aAAa2R,SACzC,IAAIF,EAAW,CACX,GAAMI,GAAMjF,EAAAkF,eAAeV,MAAQ,EAAI5E,EAAAsD,WAAWK,GAClDwB,GAAY9sD,WAAWhd,EAAA4L,YAAYs+D,SAASJ,EAAWE,IAEnDjpE,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAAM3iE,YAAY2gE,kBACtDsC,EAAY9sD,WAAWhd,EAAA4L,YAAYjE,IAAImiE,EAAW/oE,EAAAoG,YAAYgxD,aAAaqR,YAI/EK,EAAY,IACZC,EAAY9sD,WAAWhd,EAAA4L,YAAYjE,IAAImiE,EAAWD,KAGtD9oE,EAAAoG,YAAYgxD,aAAa2R,UAAYA,CACrC,IAAMK,GAAY/pE,EAAA8T,QAAQC,UAAUi2D,cAC9BC,GAAUF,EAAUG,iBAC1BH,GAAUxiE,IACNvH,EAAA8T,QAAQC,UAAUzO,MAAMqkE,WACxB,YACAvpE,EAAAsH,UAAUC,OACN,qBACAvH,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa+K,EAAUx9D,aAEtD,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAGrCkW,GACAlpE,EAAAuF,QAAQC,eAKbE,YAAAC,yBAAP,SAAgCm6D,EAAgB91D,GAC5C,MAAI81D,KAAWpgE,EAAAkG,SAASotD,eAChBn0D,EAAAqG,MAAMC,kBAAkBO,YAAY0jE,qBACpC1jE,YAAY0jE,qBAEZ3pE,EAAAgC,WAAWC,kBAAkB0nE,kBAAkB3+C,QAAQ,SAAC4+C,GACpD,GAAMC,GAAazqE,EAAAsgB,WAAWmD,YAAY+mD,EAE1C3jE,aAAY0jE,kBAAkBE,EAAW,IAAMA,EAAW,MAI9D5jE,YAAY0jE,kBAAkBprE,eAAegM,SAC7CtE,YAAY6jE,UAAUzJ,GAAUp6D,YAAY0jE,kBAAkBp/D,SAKtEtE,YAAY6jE,UAAUzJ,GAAU91D,IAG7BtE,YAAAqtD,YAAP,SAAmB+M,GACf,MAAqC,OAAjCp6D,YAAY6jE,UAAUzJ,GACfp6D,YAAY6jE,UAAUzJ,GAE1B,MAGJp6D,YAAA4/D,kBAAP,SAAyBxF,EAAgB0J,GAClB,MAAfA,EACA7pE,EAAA0F,eAAeigE,kBAAkBxF,EAAQ0J,GAEJ,MAAjC9jE,YAAY6jE,UAAUzJ,IACtBngE,EAAA0F,eAAeigE,kBAAkBxF,EAAQp6D,YAAY6jE,UAAUzJ,KAKpEp6D,YAAA6hE,mBAAP,WACI5nE,EAAA0F,eAAekiE,mBAAmB7hE,YAAY6jE,WAC9C7jE,YAAY8iE,mBAGT9iE,YAAA+jE,cAAP,WACQ7pE,EAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WAAWwnE,yBAAyBzU,KAAK,SAACC,GAClDxvD,YAAYikE,mBAAmBzU,GAG3Bz1D,EAAAgC,WAAWC,kBAAkBkoE,eAC7B/qE,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBmoE,wBAEvDt3D,WAAW,WACP7M,YAAY+jE,iBACb,QAMZ/jE,YAAAikE,mBAAP,SAA0BzU,GACtB,GAAgB,MAAZA,IAIoB,MAApBA,EAAS4U,SAAoC,MAAjB5U,EAASxkC,QAIzChrB,YAAYokE,QAAU5U,EAAS4U,QAC/BpkE,YAAYgrB,KAAOwkC,EAASxkC,KAC5BhrB,YAAYqkE,4BAA8BzhE,KAAKs9C,MAEpB,MAAvBlgD,YAAYokE,UACRpkE,YAAYokE,QAAQ1hD,QAAQ,WAC5B1iB,YAAYokE,QAAUpkE,YAAYokE,QAAU;AAGhD7qE,EAAAsC,UAAUA,UAAUyoE,UAAU1hE,KAAKs9C,MAAQt9C,KAAKuoC,MAAMnrC,YAAYokE,WAGlEpkE,YAAYukE,uBAAyB,CACrC,GAAI9yD,IAAc,GAAI7O,OAAOwO,UACzBozD,EAAa5hE,KAAKuoC,MAAMnrC,YAAYokE,QAAUpkE,YAAYokE,QAAQz/D,QAAQ,IAAK,IAAM3E,YAAYgrB,KAErGhrB,aAAYukE,iBAAmBC,EAAa/yD,IAI7CzR,YAAAykE,iBAAP,SAAwBz5C,GACpB,GAAY,MAARA,EACA,MAAO,KAIX,IAAM05C,GAAO15C,EAAKyvC,cACZkK,EAAQ3kE,YAAYs6D,SAAStvC,EAAKwvC,WAAa,EAAG,GAClDoK,EAAM5kE,YAAYs6D,SAAStvC,EAAKuvC,UAAW,GAC3CsK,EAAQ7kE,YAAYs6D,SAAStvC,EAAK85C,WAAY,GAC9CC,EAAU/kE,YAAYs6D,SAAStvC,EAAKg6C,aAAc,GAClDC,EAAUjlE,YAAYs6D,SAAStvC,EAAKk6C,aAAc,GAClDC,EAAen6C,EAAKo6C,iBAE1B,OAAUV,GAAI,IAAIC,EAAK,IAAIC,EAAG,IAAIC,EAAK,IAAIE,EAAO,IAAIE,EAAO,IAAIE,GAG9DnlE,YAAAs6D,SAAP,SAAgB1W,EAAa5lD,GAEzB,IADA,GAAI4R,GAAIg0C,EAAM,GACPh0C,EAAEnM,OAASzF,GAAM4R,EAAI,IAAMA,CAClC,OAAOA,IAGJ5P,YAAAqlE,YAAP,WACI,GAAM5zD,GAAc,GAAI7O,MAClBwhE,EAAUpkE,YAAYslE,aACtBC,EAAuB9zD,EAAY5O,sBAEzC,QACIuhE,QAASA,EACTmB,qBAAsBA,IAIvBvlE,YAAAslE,WAAP,WACI,IAAKnsE,EAAA4I,YAAYC,cAAchC,YAAYokE,SAAU,CACjD,GAAM3yD,GAAc,GAAI7O,MAClB4iE,EAAuB5iE,KAAKuoC,MAAMnrC,YAAYokE,SAC9CqB,EAAmBh0D,EAAYL,UAAYpR,YAAYqkE,2BAE7D,OAAO,IAAIzhE,MAAK4iE,EAAuBC,GAAkBC,cAG7D,OAAO,GAAI9iE,OAAO8iE,eAGf1lE,YAAA2lE,YAAP,SAAmBvB,GACXA,EAAQ1hD,QAAQ,WAChB0hD,GAAoB,IAGxB,IAAMwB,GAAehjE,KAAKuoC,MAAMi5B,EAAQz/D,QAAQ,IAAK,IAErD,IAAI5K,EAAAgC,WAAWC,kBAAkBkoE,cAAe,CAC5C,GAAM2B,GAAS7lE,YAAYokE,QAAUpkE,YAAYukE,iBAAmB,CACpE,OAAOvkE,aAAYykE,iBAAiB,GAAI7hE,MAAKgjE,EAAeC,IAGhE,MAAO7lE,aAAYykE,iBAAiB,GAAI7hE,MAAKwhE,KAG1CpkE,YAAA8lE,kBAAP,WACI,IAAK/rE,EAAAgC,WAAWC,kBAAkBkoE,cAC9B,MAAOlkE,aAAYykE,iBAAiB,GAAI7hE,MAG5C,KAAKzJ,EAAA4I,YAAYC,cAAchC,YAAYgrB,MAAO,CAC9C,GAAMvZ,GAAc,GAAI7O,MAClB4iE,EAAuB5iE,KAAKuoC,MAAMnrC,YAAYgrB,MAC9Cy6C,EAAmBh0D,EAAYL,UAAYpR,YAAYqkE,2BAC7D,OAAOrkE,aAAYykE,iBACf,GAAI7hE,MAAK4iE,EAAuBC,EAAmBzlE,YAAYukE,mBAIvE,MAAOvkE,aAAYykE,iBAAiB,GAAI7hE,QAGrC5C,YAAA+lE,SAAP,WACI,GAAKhsE,EAAAgC,WAAWC,kBAAkBgqE,WAAlC,CAIA,GAAIC,GAAQ,GAAIrjE,MAAK5C,YAAY8lE,oBAEjC,IAA2B,MAAvB9lE,YAAYokE,QAAiB,CAC7B,GAAM8B,GAAWlmE,YAAYqlE,aAC7BY,GAAQ,GAAIrjE,MAAK5C,YAAY2lE,YAAYO,EAAS9B,UAGtD,GAAI76B,GAAI08B,EAAMnB,WACVqB,EAAiB58B,EAAI,EACrBA,GAAI,KACJ48B,EAAS,IAAM58B,EAGnB,IAAItxC,GAAIguE,EAAMjB,aACVoB,EAAiBnuE,EAAI,EACrBA,GAAI,KACJmuE,EAAS,IAAMnuE,GAEnB+H,YAAY4/D,kBAAkB,OAAQuG,EAAS,IAAMC,GACrDv5D,WAAW,WACP7M,YAAY+lE,YACb,OAGA/lE,YAAAqmE,gBAAP,SAAuBr7C,GACnB,GAAIjxB,EAAAgC,WAAWC,kBAAkBsqE,mBAAoB,CAC7Ct7C,EAAO,IACPA,EAAO,EAGX,IAAIu7C,GAAkBv7C,EAClB65C,EAAgBvuD,KAAKC,MAAMgwD,EAAU,MACrCxB,EAAkBzuD,KAAKC,OAAOgwD,EAAkB,KAAR1B,GAAgB,IACxDI,EAAkBsB,EAAkB,KAAR1B,EAAyB,GAAVE,EAE3CyB,EAAiB3B,EAAMp/D,WACvBghE,EAAmB1B,EAAQt/D,WAC3BihE,EAAmBzB,EAAQx/D,UAE3Bo/D,GAAQ,KACR2B,EAAS,IAAM3B,GAEfE,EAAU,KACV0B,EAAW,IAAM1B,GAEjBE,EAAU,KACVyB,EAAW,IAAMzB,EAGrB,IAAI0B,GAAc5sE,EAAAgC,WAAWC,kBAAkBgqE,WAAa,gBAAkB,EAE9EhmE,aAAY4/D,kBAAkB,eAAgB+G,EAAMH,EAAS,IAAMC,EAAW,IAAMC,GACpF17C,IACAne,WAAW,WACP7M,YAAYqmE,gBAAgBr7C,IAC7B,OAIJhrB,YAAAI,kBAAP,WACI,GAAIrG,EAAAgC,WAAWC,kBAAkBsR,UAAUoV,QAAQnpB,EAAA8T,QAAQC,UAAUzO,MAAM+nE,sBAErB,MAA9C7sE,EAAAgC,WAAWC,kBAAkB6qE,eAC2D,MAAxF9sE,EAAAgC,WAAWC,kBAAkB6qE,cAActtE,EAAA8T,QAAQC,UAAUzO,MAAM+nE,kBACrE,CACE,GAAMtD,GAAY/pE,EAAA8T,QAAQC,UAAUi2D,aACpCD,GAAUxiE,IACNvH,EAAA8T,QAAQC,UAAUzO,MAAM+nE,iBACxB,mBACA7sE,EAAAgC,WAAWC,kBAAkB6qE,cAActtE,EAAA8T,QAAQC,UAAUzO,MAAM+nE,mBAEvEtsE,EAAAuF,QAAQC,aAIhB,GAAMgnE,GAAYpmE,SAASC,eAAe,YAC1C,IAAiB,MAAbmmE,EAAmB,CACnB9mE,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw9D,cAAeoJ,EAAU/lE,UAEhE,IAAMgmE,GAAermE,SAASC,eAAe,eACzB,OAAhBomE,IACAA,EAAa39D,MAAMC,QAAU,QAIrCrJ,YAAYgnE,iBAAiB,eAC7BhnE,YAAYgnE,iBAAiB,iBACzBjtE,EAAAgC,WAAWC,kBAAkBirE,oBAAsB,GAAKltE,EAAAgC,WAAWC,kBAAkByjE,mBACjF1lE,EAAAgC,WAAWC,kBAAkBujE,qBAC7Bv/D,YAAYknE,iBACRntE,EAAAgC,WAAWC,kBAAkB0jE,oBAAsB,cAAgB,gBAK1E3lE,EAAAgC,WAAWC,kBAAkBujE,oBAG9Bv/D,YAAYgnE,iBAAiB,wBAF7BhnE,YAAYgnE,iBAAiB,uBAI5BhnE,YAAYq/D,uBACbr/D,YAAYgnE,iBAAiB,qBAG5BjtE,EAAAgC,WAAWC,kBAAkBukE,qBAC9BvgE,YAAYgnE,iBAAiB,qBAG5BhnE,YAAYmnE,mBACbnnE,YAAYgnE,iBAAiB,qBAItBhnE,YAAAmnE,gBAAf,WACI,QAAInnE,YAAYq/D,uBAObr/D,YAAAshE,kBAAP,WAkBI,GAjBAthE,YAAYknE,iBAAiB,kBAC7BlnE,YAAYknE,iBAAiB,iBAC7BlnE,YAAYknE,iBAAiB,mBAC7BlnE,YAAYknE,iBAAiB,wBAC7BlnE,YAAYknE,iBAAiB,aAC7BlnE,YAAYknE,iBAAiB,WAC7BlnE,YAAYknE,iBAAiB,YAC7BlnE,YAAYgnE,iBAAiB,eAC7BhnE,YAAYknE,iBAAiB,2BAC7BlnE,YAAYknE,iBAAiB,8BAC7BlnE,YAAYknE,iBAAiB,gCAC7BlnE,YAAYknE,iBAAiB,gCAC7BlnE,YAAYknE,iBAAiB,gCAC7BlnE,YAAYgnE,iBAAiB,8BAC7BhnE,YAAYgnE,iBAAiB,WAC7BhnE,YAAYgnE,iBAAiB,WAEX,MAAdjtE,EAAAgC,WAAoB,CACpB,GAAgC,MAA5B7B,EAAAoG,YAAYgxD,aACZ,GAA4C,MAAxCp3D,EAAAoG,YAAYgxD,aAAuB,SACnCtxD,YAAYgnE,iBAAiB,kBAC7BhnE,YAAYgnE,iBAAiB,iBAC7BhnE,YAAYgnE,iBAAiB,mBAC7BhnE,YAAYgnE,iBAAiB,wBAC7BhnE,YAAYgnE,iBAAiB,aAC7BhnE,YAAYgnE,iBAAiB,WAC7BhnE,YAAYgnE,iBAAiB,YAC7BhnE,YAAYgnE,iBAAiB,WAC7BhnE,YAAYgnE,iBAAiB,eAC1B,CAC+B,MAA9B9sE,EAAAoG,YAAY8mE,gBACZpnE,YAAYgnE,iBAAiB,oBAC7BhnE,YAAYknE,iBAAiB,qBAAsB,MAEnDlnE,YAAYgnE,iBAAiB,sBAC7BhnE,YAAYknE,iBAAiB,mBAAoB,KAGW,MAA5DhtE,EAAAoG,YAAYgxD,aAAuB,SAAoB,iBACvDtxD,YAAYgnE,iBAAiB,kBAGK,MAA9B9sE,EAAAoG,YAAY8mE,gBACgC,MAA5CltE,EAAAoG,YAAY8mE,eAA2B,YACO,MAA9CltE,EAAAoG,YAAY8mE,eAA6B,cAEzCpnE,YAAY4/D,kBACR5lE,EAAAkG,SAASu8D,oBAELviE,EAAAoG,YAAY8mE,eAA2B,WACvCltE,EAAAoG,YAAY8mE,eAA6B,cAC3C3hE,YAK2C,MAArDvL,EAAAoG,YAAYgxD,aAAuB,SAAa,YAChDtxD,YAAYqnE,kBAAoBntE,EAAAoG,YAAYgxD,aAAuB,SAAa,UAC5Ev3D,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD5iE,YAAYC,yBACRjG,EAAAkG,SAASw8D,kBACTjvD,SACItU,EAAA4L,YAAY89D,OAAO7iE,YAAYqnE,kBAAmBvJ,EAAAsD,WAAWwB,UAAUn9D,YACzEA,YAENzF,YAAY4/D,kBACR5lE,EAAAkG,SAASw8D,kBACTjvD,SACItU,EAAA4L,YAAY89D,OAAO7iE,YAAYqnE,kBAAmBvJ,EAAAsD,WAAWwB,UAAUn9D,YACzEA,cAGNzF,YAAYC,yBACRjG,EAAAkG,SAASw8D,kBACT/iE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVh+D,EAAAoG,YAAYgxD,aAAuB,SAAa,WAEhD,IACAtxD,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAEzCttD,YAAY4/D,kBACR5lE,EAAAkG,SAASw8D,kBACT/iE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVh+D,EAAAoG,YAAYgxD,aAAuB,SAAa,WAEhD,IACAtxD,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,iBAMQ,MAArDpzD,EAAAoG,YAAYgxD,aAAuB,SAAa,WAC/Cv3D,EAAAgC,WAAWC,kBAAkBsrE,mBAE9BtnE,YAAYgnE,iBAAiB,iBAG0B,MAAvD9sE,EAAAoG,YAAYgxD,aAAuB,SAAe,aAClDtxD,YAAYunE,oBAAsBrtE,EAAAoG,YAAYgxD,aAAuB,SAAe,YAChFv3D,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD5iE,YAAYC,yBACRjG,EAAAkG,SAASy8D,oBACTlvD,SACItU,EAAA4L,YAAY89D,OAAO7iE,YAAYunE,oBAAqBzJ,EAAAsD,WAAWwB,UAAUn9D,YAC3EA,YAENzF,YAAY4/D,kBACR5lE,EAAAkG,SAASy8D,oBACTlvD,SACItU,EAAA4L,YAAY89D,OAAO7iE,YAAYunE,oBAAqBzJ,EAAAsD,WAAWwB,UAAUn9D,YAC3EA,cAGNzF,YAAYC,yBACRjG,EAAAkG,SAASy8D,oBACThjE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVh+D,EAAAoG,YAAYgxD,aAAuB,SAAe,aAElD,IACAtxD,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAEzCttD,YAAY4/D,kBACR5lE,EAAAkG,SAASy8D,oBACThjE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVh+D,EAAAoG,YAAYgxD,aAAuB,SAAe,aAElD,IACAtxD,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,iBAI7CttD,YAAYgnE,iBAAiB,mBAG+B,MAA5D9sE,EAAAoG,YAAYgxD,aAAuB,SAAoB,iBACvDtxD,YAAYgnE,iBAAiB,wBAE7BhnE,YAAY4/D,kBACR5lE,EAAAkG,SAAS08D,yBACT1iE,EAAAoG,YAAYgxD,aAAuB,SAAoB,iBAAI,KAKJ,MAA3Dp3D,EAAAoG,YAAYgxD,aAAuB,SAAmB,iBACrDp3D,EAAAoG,YAAYgxD,aAAuB,SAAmB,iBAEvDtxD,YAAYgnE,iBAAiB,YAGjC,IAAIQ,GAAMttE,EAAAoG,YAAYgxD,aAAuB,SAAO,IAChDmW,EAAWvtE,EAAAoG,YAAYgxD,aAAuB,SAAY,SAC1DoW,EAAsBxtE,EAAAoG,YAAYgxD,aAAuB,SAAuB,oBAChFqW,EAAc5tE,EAAAgC,WAAWC,kBAAkBo2D,uBACzC,0BACA,wBACFwV,EAAY,MA+BhB,IA5BgB,MAAZH,GACuB,MAAvBC,GACO,MAAPF,GACAztE,EAAAgC,WAAWC,kBAAkB6rE,aAG7B7nE,YAAYgnE,iBAAiB,WAC7BhnE,YAAY8nE,gBACR,WACAnuE,EAAAsH,UAAUC,OACNymE,EACAF,EAAShiE,WACT+hE,EAAI/hE,WACJiiE,EAAoBjiE,aAG5BmiE,EAAeH,EAAShiE,YACV,MAAP+hE,GAAeztE,EAAAgC,WAAWC,kBAAkB6rE,aAEnD7nE,YAAYgnE,iBAAiB,YAC7BhnE,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS28D,YAAa2K,EAAI/hE,YACxDmiE,EAAeJ,EAAI/hE,aAGnBzF,YAAYgnE,iBAAiB,WAC7BhnE,YAAYgnE,iBAAiB,aAIb,MAAhBY,GACA7tE,EAAAgC,WAAWC,kBAAkBsR,UAAUoV,QAAQnpB,EAAA8T,QAAQC,UAAUzO,MAAMkpE,QACzE,CACE,GAAMzE,GAAY/pE,EAAA8T,QAAQC,UAAUi2D,aACpCD,GAAUxiE,IACNvH,EAAA8T,QAAQC,UAAUzO,MAAMkpE,IACxB,MACApuE,EAAAsH,UAAUC,OAAO,cAAe0mE,EAAaniE,aAEjDnL,EAAAuF,QAAQC,aAgBZ,GAZuD,MAAnD5F,EAAAoG,YAAYgxD,aAAuB,SAAW,SAC7Cv3D,EAAAgC,WAAWC,kBAAkBgsE,2BAI9BhoE,YAAY4/D,kBACR5lE,EAAAkG,SAASg9D,gBACThjE,EAAAoG,YAAYgxD,aAAuB,SAAW,QAAE7rD,YAEpDzF,YAAYknE,iBAAiB,gBAN7BlnE,YAAYgnE,iBAAiB,eASmC,MAAhE9sE,EAAAoG,YAAYgxD,aAAuB,SAAwB,qBAAW,CACtE,GACIv3D,EAAAgC,WAAWC,kBAAkBsR,UAAUoV,QACnCnpB,EAAA8T,QAAQC,UAAUzO,MAAMopE,yBAE9B,CACE,GAAM3E,GAAY/pE,EAAA8T,QAAQC,UAAUi2D,aACpCD,GAAUxiE,IACNvH,EAAA8T,QAAQC,UAAUzO,MAAMopE,qBACxB,uBACAtuE,EAAAsH,UAAUC,OACN,iCACAhH,EAAAoG,YAAYgxD,aAAuB,SAAwB,uBAGnEh3D,EAAAuF,QAAQC,aAIR/F,EAAAgC,WAAWC,kBAAkBksE,uCACwC,MAArEhuE,EAAAoG,YAAYgxD,aAAuB,SAA6B,2BAEhEtxD,YAAY8nE,gBACR,UACAnuE,EAAAsH,UAAUC,OACN,mCACAhH,EAAAoG,YAAYgxD,aAAuB,SAAwB,qBAAE7rD,WAC7DvL,EAAAoG,YAAYgxD,aAAuB,SAA6B,0BAAE7rD,aAG1EzF,YAAYknE,iBAAiB,YACtBntE,EAAAgC,WAAWC,kBAAkBmsE,+BACpCnoE,YAAY4/D,kBACR5lE,EAAAkG,SAAS48D,6BACT5iE,EAAAoG,YAAYgxD,aAAuB,SAAwB,qBAAE7rD,YAEjEzF,YAAYknE,iBAAiB,YAKgC,mBAAjEntE,EAAAgC,WAAWC,kBAAkB21D,kCAC7B53D,EAAAgC,WAAWC,kBAAkBosE,4CACwB,MAArDluE,EAAAoG,YAAYgxD,aAAuB,SAAa,WAEhDtxD,YAAYknE,iBAAiB,8BAKrCpJ,EAAAsD,WAAWiH,UAAU5kE,OAAS,GAC9BzD,YAAY4/D,kBACR5lE,EAAAkG,SAAS88D,eACTrjE,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa5hD,KAAK0xB,IAAGpvC,MAAR0d,KAAYwnD,EAAAsD,WAAWiH,WAAW5iE,YAC1E,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAEzCttD,YAAY4/D,kBACR5lE,EAAAkG,SAAS+8D,eACTtjE,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa5hD,KAAKmf,IAAG78B,MAAR0d,KAAYwnD,EAAAsD,WAAWiH,WAAW5iE,YAC1E,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,iBAGzCttD,YAAYgnE,iBAAiB,cAC7BhnE,YAAYgnE,iBAAiB,eAG7BjtE,EAAAgC,WAAWC,kBAAkBssE,yCAC7BtoE,YAAYgnE,iBAAiB,8BAC7BhnE,YAAYknE,iBAAiB,uCAE7BlnE,YAAYknE,iBAAiB,8BAC7BlnE,YAAYgnE,iBAAiB,sCAI7BjtE,EAAAgC,WAAWC,kBAAkBusE,2BAA6B,GAC1DxuE,EAAAgC,WAAWC,kBAAkBwsE,wCAE7BxoE,YAAY4/D,kBACR5lE,EAAAkG,SAASy9D,4BACThkE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVn+D,EAAAgC,WAAWC,kBAAkBusE,2BAA2B9iE,YAExD,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAGzCttD,YAAYgnE,iBAAiB,2BAG7BjtE,EAAAgC,WAAWC,kBAAkBysE,iCAAmC,GAChEzoE,YAAYgnE,iBAAiB,gCAC7BhnE,YAAY4/D,kBACR5lE,EAAAkG,SAAS09D,iCACTjkE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVn+D,EAAAgC,WAAWC,kBAAkBysE,iCAAiChjE,YAE9D,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,gBAGzCttD,YAAYgnE,iBAAiB,gCAG7BjtE,EAAAgC,WAAWC,kBAAkB0sE,iCAAmC,GAChE1oE,YAAYgnE,iBAAiB,gCAC7BhnE,YAAY4/D,kBACR5lE,EAAAkG,SAAS29D,iCACTlkE,EAAAsH,UAAUg3D,WACNt+D,EAAAsH,UAAUi3D,YACVn+D,EAAAgC,WAAWC,kBAAkB0sE,iCAAiCjjE,YAE9D,IACAzF,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,gBAGzCttD,YAAYgnE,iBAAiB,gCAGiB,WAA9CjtE,EAAAgC,WAAWC,kBAAkB2sE,cAC7B3oE,YAAYgnE,iBAAiB,qBAC7BhnE,YAAYgnE,iBAAiB,yBACwB,aAA9CjtE,EAAAgC,WAAWC,kBAAkB2sE,cACpC3oE,YAAYgnE,iBAAiB,qBAC7BhnE,YAAYgnE,iBAAiB,wBAE7BhnE,YAAYgnE,iBAAiB,sBAC7BhnE,YAAYgnE,iBAAiB,yBAG5BjtE,EAAAgC,WAAWC,kBAAkBkjE,oBAG9Bl/D,YAAYgnE,iBAAiB,wBAF7BhnE,YAAYgnE,iBAAiB,uBAK5BjtE,EAAAgC,WAAWC,kBAAkB4sE,gBAC9B5oE,YAAYgnE,iBAAiB,eAG5BjtE,EAAAgC,WAAWC,kBAAkB6sE,wBAC9B7oE,YAAYgnE,iBAAiB,cAC7BhnE,YAAYgnE,iBAAiB,mBAG7BjtE,EAAAgC,WAAWC,kBAAkB8sE,uBAAyB,EACtD9oE,YAAY4/D,kBACR5lE,EAAAkG,SAASi9D,2BACTpjE,EAAAgC,WAAWC,kBAAkB8sE,uBAAuBrjE,YAGxDzF,YAAYgnE,iBAAiB,4BAKlChnE,YAAA8nE,gBAAP,SAAuBiB,EAAatQ,GAEhC,IAAK,GADDzO,GAAsCtpD,SAASmzD,uBAAuBkV,GACjEzxE,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQG,UAAY03D,KAKzBz4D,YAAAgnE,iBAAP,SAAwB+B,GAEpB,IAAK,GADD/e,GAAsCtpD,SAASmzD,uBAAuBkV,GACjEzxE,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQwI,MAAMC,QAAU,UAK7BrJ,YAAAknE,iBAAP,SAAwB6B,EAAa1/D,GAAA,SAAAA,MAAA,QAEjC,KAAK,GADD2gD,GAAsCtpD,SAASmzD,uBAAuBkV,GACjEzxE,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQwI,MAAMC,QAAUA,KAK7BrJ,YAAAgpE,gBAAP,WACI,GAAIhf,EAOJ,IALIA,EADc,MAAdjwD,EAAAgC,YAAsD,MAAhChC,EAAAgC,WAAWC,mBAA6BjC,EAAAgC,WAAWC,kBAAkBiJ,SAChFvE,SAASmzD,uBAAuB,iBAEhCnzD,SAASmzD,uBAAuB,gBAG/B,MAAZ7J,GAAoBA,EAASvmD,OAAS,EACtC,KAAOumD,EAASvmD,OAAS,GACrBumD,EAAS,GAAG55B,WAAWpS,YAAYgsC,EAAS,GAUpD,IALIA,EADAjwD,EAAAgC,WAAWC,kBAAkBo2D,uBAClB1xD,SAASmzD,uBAAuB,gBAEhCnzD,SAASmzD,uBAAuB,gBAG/B,MAAZ7J,GAAoBA,EAASvmD,OAAS,EACtC,KAAOumD,EAASvmD,OAAS,GACrBumD,EAAS,GAAG55B,WAAWpS,YAAYgsC,EAAS,GAIpDA,GAAWtpD,SAASmzD,uBAAuB,iBAE3C,KAAK,GADDoV,IAAqB,EAChB3xE,EAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IACe,QAA9B0yD,EAAS1yD,GAAI8R,MAAMC,UACjC4/D,GAAqB,EAI7B,IAAIA,IACAjf,EAAWtpD,SAASmzD,uBAAuB,eAC3B,MAAZ7J,GAAoBA,EAASvmD,OAAS,GACtC,KAAOumD,EAASvmD,OAAS,GACrBumD,EAAS,GAAG55B,WAAWpS,YAAYgsC,EAAS,KAMrDhqD,YAAAkpE,qBAAP,SAA4BC,GACxB,GAAInpE,YAAYopE,mBAAmB1mD,QAAQymD,OAAiB,CACxD,GAAME,GAAgBrpE,YAAYspE,iBAAiBH,EAEnDnpE,aAAYopE,mBAAmB7+D,KAAK8+D,KAIrCrpE,YAAAupE,qBAAP,SAA4BF,GACxB,GAAMnuC,GAAQl7B,YAAYopE,mBAAmB1mD,QAAQ2mD,EACrD,OAAInuC,SAGAl7B,YAAYopE,mBAAmB3+D,OAAOywB,EAAO,IACtC,IAIAl7B,YAAAspE,iBAAf,SAAgCH,GAC5B,GAAIzqE,GAASyqE,CACb,QAAQA,GACJ,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,iBACL,IAAK,uBACL,IAAK,kBACL,IAAK,qBACL,IAAK,2BACL,IAAK,sBACDzqE,EAAS,YACT,MACJ,KAAK,OACDA,EAAS,MACT,MACJ,KAAK,eACD,GAAkD,MAA9CzE,EAAA0F,eAAe6pE,eAA0B,UAAW,CACpD,GAAMC,GAAMxvE,EAAA0F,eAAe6pE,eAA0B,UAAE,EAC5C,OAAPC,GAAeA,EAAI5iE,SAAShG,UAAUiO,SAAS,eAC/CpQ,EAAS,SAKzB,MAAOA,IAGJsB,YAAA0pE,wBAAP,WACI,GAAsC,MAAlC1pE,YAAY4+D,kBAAhB,CAIA,GAAI+K,GAAoBxzD,WAAWnW,YAAY4+D,kBACf,OAA5B1kE,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAagB,SAAW,IACxEgH,GAAazvE,EAAAoG,YAAYqhE,aAAagB,UAGtCgH,EAAY7L,EAAAsD,WAAWK,IAAM,IAC7BzhE,YAAYmH,UAAW,KAIxBnH,YAAA4pE,gBAAP,SAAuBC,GACnB,GADmB,SAAAA,MAAA,GACmB,MAAlC7pE,YAAY4+D,kBAAhB,CAIA,GAAI+K,GAAoBxzD,WAAWnW,YAAY4+D,kBAE3CiL,GAAM,EACNF,GAAaE,EAES,MAAlB/L,EAAAsD,WAAWK,MACXkI,EAAYxwE,EAAA4L,YAAY+kE,SAAS3wE,EAAA4L,YAAYs+D,SAASsG,EAAW7L,EAAAsD,WAAWK,OAIpFzhE,YAAY4+D,kBAAoB+K,EAAY,KAGzC3pE,YAAA+pE,uBAAP,WACI,QAAK/pE,YAAYmH,WAImB,KAAhCnH,YAAY8+D,mBAIoB,MAA5B5kE,EAAAoG,YAAYgxD,cACZp3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCzoE,EAAAoG,YAAYgxD,aAAaqR,UAAYxsD,WAAWnW,YAAY8+D,mBAE5D9+D,YAAYmH,UAAW,GAChB,GANX,UAWDnH,YAAAgqE,UAAP,SAAiBC,GACb,GAAIlwE,EAAAgC,WAAWsJ,WAAY,CACvB,GAAM6kE,GAAYhwE,EAAAoG,YAAYgxD,aAAa4Y,UACrCC,EAAYjwE,EAAAoG,YAAYgxD,aAAaqR,SACrCyH,EAAclwE,EAAAoG,YAAYgxD,aAAawQ,QACzCuI,EAAS,MACb,QAAQJ,GACJ,IAAK,oBACDI,EAAYlM,EAAWmM,kBAAkBJ,EAAWC,EAAWC,EAC/D,MACJ,KAAK,qBACDC,EAAYlM,EAAWoM,mBAAmBL,EAAWC,EAAWC,EAChE,MACJ,KAAK,mBACDC,EAAYlM,EAAWqM,iBAAiBN,EAAWC,EAAWC,EAC9D,MACJ,KAAK,uBACDC,EAAYlM,EAAWsM,qBAAqBP,EAAWC,EAAWC,EAClE,MACJ,KAAK,sBACDC,EAAYlM,EAAWuM,oBAAoBR,EAAWC,EAAWC,EACjE,MACJ,KAAK,uBACDC,EAAYlM,EAAWwM,qBAAqBT,EAAWC,EAAWC,EAClE,MACJ,KAAK,oBACDC,EAAYlM,EAAWyM,kBAAkBV,EAAWC,EAAWC,EAC/D,MACJ,KAAK,6BACDC,EAAYlM,EAAW0M,2BAA2BX,EAAWC,EAAWC,EACxE,MACJ,KAAK,qBACDC,EAAYlM,EAAW2M,mBAAmBZ,EAAWC,EAAWC,EAChE,MACJ,KAAK,YACDC,EAAYlM,EAAW4M,UAAUb,EAAWC,EAAWC,EACvD,MACJ,KAAK,sBACDC,EAAYlM,EAAW6M,oBAAoBd,EAAWC,EAAWC,EACjE,MACJ,KAAK,kBACDC,EAAYlM,EAAW8M,gBAAgBf,EAAWC,EAAWC,EAC7D,MACJ,KAAK,gBACDC,EAAYlM,EAAW+M,cAAchB,EAAWC,EAAWC,EAC3D,MACJ,KAAK,mBACDC,EAAYlM,EAAWgN,iBAAiBjB,EAAWC,EAAWC,EAC9D,MACJ,KAAK,kBACDC,EAAYlM,EAAWiN,gBAAgBlB,EAAWC,EAAWC,EAC7D,MACJ,KAAK,aACDC,EAAYlM,EAAWkN,WAAWnB,EAAWC,EAAWC,EACxD,MACJ,KAAK,iBACDC,EAAYlM,EAAWmN,eAAepB,EAAWC,EAAWC,EAC5D,MACJ,KAAK,kBACDC,EAAYlM,EAAWoN,gBAAgBrB,EAAWC,EAAWC,EAC7D,MACJ,KAAK,mBACDC,EAAYlM,EAAWqN,iBAAiBtB,EAAWC,EAAWC,EAC9D,MACJ,KAAK,qBACDC,EAAYlM,EAAWsN,mBAAmBvB,EAAWC,EAAWC,GAIvD,MAAbC,GACAtwE,EAAAgC,WAAWsJ,WAAWqmE,oBAAoBrB,KAKvCrqE,YAAA2P,IAAf,SAAmBC,KAnwCJ5P,YAAA6jE,aAED7jE,YAAA0jE,kBAAgD,KAE/C1jE,YAAAukE,oBAEAvkE,YAAAgrB,KAAe,GAEfhrB,YAAAokE,QAAkB,GAElBpkE,YAAAqkE,4BAAsC,EAEtCrkE,YAAAopE,sBAERppE,YAAA2gE,iBAA2B,EAC3B3gE,YAAA2rE,aAAuB,EACvB3rE,YAAA8gE,WAAqB,EAErB9gE,YAAA0+D,cAAwB,IACxB1+D,YAAA4+D,kBAA4B,IAC5B5+D,YAAA8+D,iBAA2B,IACnB9+D,YAAAq+D,WAAqB,EAC7Br+D,YAAAm/D,iBAA2B,EAC3Bn/D,YAAA4rE,qBAA+B,EAE/B5rE,YAAAs/D,kBAA4B,EACpBt/D,YAAAigE,mBAERjgE,YAAAwgE,kBAA4B,EAE5BxgE,YAAAqnE,kBAA4B,EAC5BrnE,YAAAunE,oBAA8B,EAE9BvnE,YAAA6rE,2BAAqC,EAIrC7rE,YAAA4hE,kBAEA5hE,YAAAs+D,iBAA2B,EAiuCtCt+D,cAzwCapI,GAAAoI,YAAWA,G9Bo/alB,SAASnI,EAAQD,EAASF,GAE/B,Y+BnhbD,IAAAyB,GAAAzB,EAAoE,GACpE6B,EAAA7B,EAAiE,GAIjEqC,EAAArC,EAA2B,GAE3BsC,EAAAtC,EAAyB,IACzBomE,EAAApmE,EAA2B,IAE3BsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAE1ByN,EAAAzN,EAAwB,GACxBo0E,EAAAp0E,EAAmC,IAGnCq0E,EAAAr0E,EAA+B,IAC/Bs0E,EAAAt0E,EAA6B,IAC7B2C,EAAA3C,EAAuC,IACvCu0E,EAAAv0E,EAA4B,IAC5BkT,EAAAlT,EAAwB,IACxB4C,EAAA5C,EAAwB,GACxBw0E,EAAAx0E,EAAoC,IACpCy0E,EAAAz0E,EAAyB,IAEzB00E,EAAA10E,EAA6B,IAC7B+B,EAAA/B,EAAgC,GAChC6C,EAAA7C,EAA+B,IAC/B8C,EAAA9C,EAA6B,IAE7B20E,EAAA30E,EAA+B,IAC/B40E,EAAA50E,EAA0B,IAQtB8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAErClH,EAAA,mBAAAA,gBAilBA,MA9jBIlI,QAAAmD,eAAkB+E,YAAA,c/Bm/ab9E,I+Bn/aL,WACI,MAAO8E,aAAY7E,a/Bq/alBC,YAAY,EACZC,cAAc,I+Bn/aZ2E,YAAAC,UAAP,SAAiB/D,EAA2C+vE,GAKxDpzE,EAAA6K,aAAaC,2BAA2BzH,EAAY,cACpD8D,YAAY7E,YAAce,EAC1B8D,YAAY7E,YAAY+wE,gBAAkBlsE,YAAYmsE,cACtDtyE,EAAA6F,YAAY6rE,0BACR9xE,EAAAgC,WAAWsD,QAAQqtE,0BAA4B3yE,EAAAgC,WAAWsD,QAAQstE,qBACtET,EAAAU,oBAAoBvxE,aAEpBiF,YAAYusE,KAAON,EAEfvmE,EAAAyB,cAAcqlE,mBACVzyE,EAAAwC,uBAAuBkwE,eACvBzsE,YAAYw7B,OAEZjvB,WAAW,WACPvM,YAAYw7B,QACb,OASRx7B,YAAA0sE,SAAP,WAKI,GAAI/kE,GAAuBvH,SAASC,eAAe,WAC/CqH,EAAsBtH,SAASC,eAAe,SAEnC,OAAXsH,GAA6B,MAAVD,IACnB1N,EAAAuF,QAAQ6P,iBACR9E,EAAAwD,QAAQ6+C,OACR1yD,EAAAa,eAAe6xD,OACfkf,EAAAc,SAASC,cAGL/yE,EAAA6F,YAAY2gE,iBAAmB/1D,EAAAwD,QAAQgjD,gBAAkB/2D,EAAAwC,uBAAuB6lE,OAChFroE,EAAAwC,uBAAuBswE,YAG3BhzE,EAAA6F,YAAYgpE,kBACZ/gE,EAAQmB,MAAMC,QAAU,OACxBrB,EAAOoB,MAAMC,QAAU,QACvBlP,EAAA6F,YAAY6hE,uBAQbvhE,YAAA8sE,UAAP,SAAiB5d,GAKblvD,YAAY+sE,uBAAuB7d,GACnClvD,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,oBAAmB,GAC/B16D,EAAAyB,cAAc8lE,cACdpzE,EAAA6F,YAAYwtE,aAAe,GAAIxB,GAAAwB,aAC/BrzE,EAAA6F,YAAYwtE,aAAanyE,aACzBhB,EAAAwC,uBAAuB4wE,kBAGpBntE,YAAAw7B,KAAP,WAKQx7B,YAAYotE,cAGZptE,YAAYotE,aAAc,EAG9BvzE,EAAA6F,YAAY+jE,gBACZ5pE,EAAA6F,YAAY++D,kBACZ1kE,EAAAwC,uBAAuB8wE,uBACvB/iE,EAAAwD,QAAQ/S,aACRiF,YAAY7E,YAAYqgC,OAAOyzB,KAAK,SAACC,GACjClvD,YAAYstE,aAAape,OAI1BlvD,YAAAutE,SAAP,WAKQvtE,YAAYotE,cAGZptE,YAAYotE,aAAc,EAG9BvzE,EAAA6F,YAAY++D,kBACZz+D,YAAY7E,YAAYqgC,OAAOyzB,KAAK,SAACC,GACjClvD,YAAYwtE,iBAAiBte,OAI9BlvD,YAAAytE,QAAP,SAAel2E,GAKPyI,YAAYotE,cAGZptE,YAAYotE,aAAc,EAGzB3zE,EAAAgC,WAAW2B,eAAeswE,SAC3B7zE,EAAA6F,YAAY2rE,aAAc,GAG9BrrE,YAAY2tE,UAEZ12E,KAAK22E,eAAiBr2E,EAEtBsC,EAAA6F,YAAY++D,mBACP5kE,EAAA6F,YAAY2gE,iBAAmBrgE,YAAYgxD,aAAaqR,SAAW,GACpEriE,YAAY9D,WAAWuxE,UAAUxe,KAAKjvD,YAAY6tE,mBAInD7tE,YAAAstE,aAAP,SAAoBpe,GAKZr2D,EAAAqG,MAAMC,kBAAkB+vD,KAO5Br1D,EAAA6F,YAAY+lE,WACP5sE,EAAAqG,MAAMC,kBAAkB1F,EAAAgC,WAAWC,kBAAkBoyE,8BAGtDj0E,EAAA6F,YAAYqmE,gBAAgB,GAF5BlsE,EAAA6F,YAAYqmE,gBAAgBtsE,EAAAgC,WAAWC,kBAAkBoyE,8BAKzD5zE,EAAA6G,aAAagtE,oBAAoB7e,IAIrCuc,EAAAuC,eAAeC,SAASjuE,YAAYkuE,qBAAsBhf,KAGvDlvD,YAAAkuE,qBAAP,SAA4Bhf,GACxBlvD,YAAY8sE,UAAU5d,GACtBlvD,YAAY0sE,WAEZxyE,EAAA6G,aAAaotE,mBAEbl1E,EAAAsC,UAAUA,UAAU6yE,gBAChBC,cAAe50E,EAAAgC,WAAWC,kBAAkB2yE,cAC5CC,QAAS70E,EAAAgC,WAAWC,kBAAkBC,QACtC4yE,YAAa90E,EAAAgC,WAAWC,kBAAkB6yE,YAC1CC,SAAU3pE,EAAA1K,QAAQmC,IAClBmyE,aACIC,eAAgBj1E,EAAAgC,WAAWC,kBAAkBgzE,eAC7CC,SAAUl1E,EAAAgC,WAAWC,kBAAkBizE,SACvCC,SAAUn1E,EAAAgC,WAAWC,kBAAkBkzE,UAE3CC,aAA4C,MAA9B3f,EAASuJ,SAASpF,SAAmBnE,EAASuJ,SAASpF,SAAW,GAChFyb,QAAS9uE,YAAYgxD,aAAaiQ,QAAQ8N,KAC1C5N,IAAK3D,EAAAsD,WAAWK,MAGpBloE,EAAAsC,UAAUA,UAAUyzE,aAAa71E,EAAAsD,gBAAgBoJ,mBAAoBzE,MAAK6G,eAAiB,SAAW,SACtGpO,EAAA6F,YAAYgqE,UAAU,cAEtB1pE,YAAYotE,aAAc,EAGtBrzE,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eACtD7mE,EAAA6F,YAAY2gE,iBAAmBrgE,YAAYgxD,aAAaqR,SAAW,IAE/D38D,EAAAyB,cAAc8nE,oBAAuBvpE,EAAAyB,cAAc+nE,mBACpDxpE,EAAAyB,cAAcsmE,QAAQvmE,EAAYioE,QAM3CnvE,YAAAwtE,iBAAP,SAAwBte,GACpBr1D,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDrhE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASs7D,aAAc,KAC5DyQ,EAAAyD,YAAYjf,cAEZnwD,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,oBAAmB,GAC/BpgE,YAAYotE,aAAc,EAC1B1nE,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,MAC3Cp1E,EAAAwC,uBAAuB+yE,aAGpBtvE,YAAA6tE,gBAAP,SAAuB3e,GAKnBuc,EAAAuC,eAAeC,SAASjuE,YAAYuvE,wBAAyBrgB,IAG1DlvD,YAAAuvE,wBAAP,SAA+BrgB,GACtBr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBlvD,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBACZ16D,EAAAyB,cAAcqoE,gBAAgBxvE,YAAY4tE,gBAC1C5tE,YAAY2tE,WAGhB3tE,YAAYotE,aAAc,GAGvBptE,YAAAmsE,cAAP,SAAqBsD,GACjB,GAAIC,GAAuBD,EAASE,YAAYC,QAAgBj3E,YAAYuc,IAC5E,IAAoB,4BAAhBw6D,EAEA,YADA31E,EAAAwC,uBAAuBkwE,gBAAiB,EAS5C/xE,QAAOwG,OAAS,KAChBxG,OAAOyG,QAAU,KACjBC,KAAKC,MAAMC,SAEX,IAAIuuE,GAAgB,GAChBx9D,GAAU,EACVs8C,EAAO8gB,EAASK,eAAe3qE,WAC/B4pD,GACAznD,SAAS,EACTwiE,YAAajxE,EAAAqG,MAAM6Q,eAAelW,EAAA6F,YAAYqtD,YAAY,YAAa,KACvEgjB,QAASl3E,EAAAqG,MAAMC,kBAAkBswE,EAAS/wE,OAAS,GAAK+wE,EAAS/wE,MAAMqxE,QACvEC,QAASn3E,EAAAqG,MAAMC,kBAAkBswE,EAAS/wE,UAAc+wE,EAAS/wE,MAAe,SAGhFuxE,GAAmB,EACnBC,GAAc,EACdC,EAA2C,KAC3CC,GAAe,CAEnB,IAAIX,EAAS/wE,MAAO,CAChB,GAAI2xE,GAAW,SAAWZ,EAASK,eAAiB,IAAML,EAAS/wE,MAAMiwD,IAwEzE,IAvEAA,GAAQ8gB,EAASK,eAAe3qE,WAAYsqE,EAAS/wE,MAAMiwD,MAAMj+B,KAAK,KACtEm/C,EAAgBx2E,EAAAsH,UAAUC,OAAOyvE,GAEjCH,EAAyC,MAA3BT,EAAS/wE,MAAM4xE,SAER,MAAjBT,IACAQ,EAAW,SAAWZ,EAASK,eAC/BnhB,EAAO8gB,EAASK,eAAe3qE,WAC/B0qE,EAAgBx2E,EAAAsH,UAAUC,OAAOyvE,KAKJ,MAA5BZ,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,QAEnDI,EAAWznD,SAAU,EACrBynD,EAAWghB,QAAU,GACrB19D,GAAU,IAKmB,MAA5Bo9D,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,QAE7CI,EAAYwhB,cAAe,IAKJ,MAA5Bd,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,QAEnDA,EAAO,GACPkhB,EAAgBJ,EAAS/wE,MAAMC,SAIH,MAA5B8wE,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,OAG9CkhB,GADA91E,EAAAwC,uBAAuBi0E,eACNn3E,EAAAsH,UAAUC,OAAO,+BAEjBvH,EAAAsH,UAAUC,OAAO,oCAKV,MAA5B6uE,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,OAElDkhB,GAAiBx2E,EAAAsH,UAAUC,OAAO,oCAGN,MAA5B6uE,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,OAE7CuhB,IACDD,GAAmB,GAEvBE,EAAc1E,EAAAuC,eAAemC,YAC7BC,GAAe,GAIc,MAA5BX,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,MACtB,MAA5B8gB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,KACrD,CACE,GAAI8hB,GAAWh3E,EAAAgC,WAAWC,kBAAkBo2D,uBAAyB,KAAO,EAC5E+d,GAAgBx2E,EAAAsH,UAAUC,OAAOyvE,EAAWI,GAGhD,GAAgC,MAA5BhB,EAASK,gBAAkD,OAAxBL,EAAS/wE,MAAMiwD,KAGlD,WADAmd,GAAA4E,aAAazC,SAASnC,EAAA4E,aAAaP,YAAarE,EAAA4E,aAAaC,YAAYlB,EAAS/wE,YAGnF,CAE6B,MAA5B+wE,EAASK,iBACH/gB,EAAYwhB,cAAe,EAGrC,IAAIF,GAAW,SAAWZ,EAASK,eAAe3qE,UAClD0qE,GAAgBx2E,EAAAsH,UAAUC,OAAOyvE,GAYrC,GAAIh+D,EAAS,CACT,GAAIu+D,GAA2BnB,EAASK,eAAe3qE,UACnDsqE,GAAS/wE,QACTkyE,GAA4BnB,EAASK,eAAe3qE,WAAYsqE,EAAS/wE,MAAMiwD,MAAMj+B,KAAK,MAE9Fz3B,EAAAsC,UAAUA,UAAUmD,MAAMkyE,EAA0Bf,GAChDO,IACA9lE,EAAAwD,QAAQ9M,YACR4qE,EAAAU,oBAAoBuE,cAKxB53E,EAAAsC,UAAUA,UAAUu1E,uBAAyBb,IAI7CC,EACAzE,EAAAuC,eAAeC,SAASkC,EAAaV,EAAS/wE,OAE9CjF,EAAAgC,WAAWsD,QAAQsI,WACfwoE,EACAx9D,EACAs8C,EACAI,EAAWghB,QACXhhB,EAAW+a,YACX/a,KAKL/uD,YAAA+sE,uBAAP,SAA8B7d,GACuC,MAA7DA,EAAS33D,OAA+B2P,EAAYioE,QACpDnD,EAAA+E,UAAUC,WAAa9hB,EAAS33D,OAA+B2P,EAAYioE,MAAMnN,QAGV,MAAvE9S,EAAS33D,OAAoC2P,EAAY+pE,aACzDlF,EAAAmF,eAAeF,WAAa9hB,EAAS33D,OAAoC2P,EAAY+pE,WAAWjP,SAIjGhiE,YAAAgtE,eAAP,SAAsB9d,GAKbr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBlvD,YAAYgxD,aAAe9B,EACsC,MAA7DA,EAAS33D,OAA+B2P,EAAYioE,MACpDnvE,YAAYqhE,aAAenS,EAAS33D,OAA+B2P,EAAYioE,MAE/EnvE,YAAYqhE,aAAe,KAGsC,MAAjEnS,EAAS33D,OAAiC2P,EAAYwmE,QACtD1tE,YAAY8mE,eAAiB5X,EAAS33D,OAAiC2P,EAAYwmE,QAEnF1tE,YAAY8mE,eAAiB,KAGyC,MAAtE5X,EAAS33D,OAAmC2P,EAAY+pE,WACxDjxE,YAAYmxE,kBAAoBjiB,EAAS33D,OAAmC2P,EAAY+pE,WAExFjxE,YAAYmxE,kBAAoB,OAKrCnxE,YAAAoxE,YAAP,WACI,OAAI1rE,EAAAyB,cAAckqE,kBAIdt3E,EAAAwC,uBAAuB+0E,oBAIvBz3E,EAAA6F,YAAY2gE,kBAAmB/1D,EAAAwD,QAAQgjD,mBAIvCj3D,EAAA6F,YAAY2gE,kBAAmBxmE,EAAA6F,YAAY2rE,gBAO5CrrE,YAAA2tE,QAAP,SAAeryE,GAAA,SAAAA,OAAA,EACX,IAAIqyE,GAAU3tE,YAAYoxE,aAuB1B,OAhBIzD,KACCryE,GACDkwE,EAAA+F,mBAAmBC,iCAC0B,MAA7ChG,EAAA+F,mBAAmBE,yBAClB13E,EAAAwC,uBAAuBkkE,YAExB5mE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4rE,qBAAsB,EAClCE,EAAA+F,mBAAmBjhB,WAAWkb,EAAA+F,mBAAmBE,wBACjDjG,EAAA+F,mBAAmBC,iCAAkC,EACrDhG,EAAA+F,mBAAmBE,uBAAyB,KAC5C/rE,EAAAyB,cAAcuqE,cACdhsE,EAAAyB,cAAcwqE,gBACdjsE,EAAAyB,cAAcyqE,iBAAiB1qE,EAAYioE,OAG3CnvE,YAAY6xE,eAAiBlE,GAO7B9oE,EAAA1K,QAAQmB,QACD,GAEPqyE,GAAWryE,EACJqyE,IAEF3tE,YAAY6xE,eAAiBv2E,IAQ9B0E,YAAY6xE,eAAgB,GAQ7BlE,IAGJ3tE,YAAA8xE,uBAAP,SAA8BvuD,GACtBvjB,YAAY2tE,WACZ9zE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4rE,qBAAsB,EAClCE,EAAA+F,mBAAmBjhB,WAAW/sC,GAC9BioD,EAAA+F,mBAAmBC,iCAAkC,EACrDhG,EAAA+F,mBAAmBE,uBAAyB,KAC5C/rE,EAAAyB,cAAcuqE,cACdhsE,EAAAyB,cAAcwqE,gBACdjsE,EAAAyB,cAAcyqE,iBAAiB1qE,EAAYioE,QAE3C3D,EAAA+F,mBAAmBC,iCAAkC,EACrDhG,EAAA+F,mBAAmBE,uBAAyBluD,IAI7CvjB,YAAA+xE,YAAP,WACI/xE,YAAYgyE,kBAAmB,EAC3BhyE,YAAYoxE,gBACZpxE,YAAYiyE,iBAAkB,EAC9BvsE,EAAAyB,cAAcuqE,cACd73E,EAAA6F,YAAYgqE,UAAU,sBAIvB1pE,YAAAkyE,WAAP,WACIlyE,YAAYgyE,kBAAmB,EAC/BhyE,YAAYiyE,iBAAkB,EACzBjyE,YAAYmyE,oBACbzsE,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,MAE/Ct1E,EAAA6F,YAAYgqE,UAAU,oBAGnB1pE,YAAAoyE,uBAAP,SAA8B76E,EAAgB4gE,GAC1C,GAAMka,IACFla,KAAMA,EACN6X,UAEQhlD,KAAM,UACNmtC,KAAM9+D,EAAAsH,UAAUC,OAAO,YACvBmuD,WAAYx3D,IAGpB+P,SAAS,EAEb5B,GAAAyB,cAAcC,qBAAqB7P,GACnCkC,EAAAgC,WAAWsD,QAAQsI,WAAW8wD,GAAM,EAAO,KAAM,KAAM,KAAMka,IAG1DryE,YAAAsyE,wBAAP,WACItyE,YAAYotE,aAAc,EAC1B5B,EAAA+F,mBAAmBC,iCAAkC,EACrD9rE,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,OAGhCnvE,YAAAqP,IAAf,SAAmBC,KAzkBJtP,YAAA4tE,eAAyB1mE,EAAYioE,KAO7CnvE,YAAAotE,aAAuB,EAEvBptE,YAAA6xE,eAAyB,EAEzB7xE,YAAAgyE,kBAA4B,EAC5BhyE,YAAAiyE,iBAA2B,EAE3BjyE,YAAAmyE,oBAA8B,EAgkBzCnyE,cAjlBa1I,GAAA0I,YAAWA,G/Bu+blB,SAASzI,EAAQD,EAASF,GAE/B,YgCphcD,IAAAyB,GAAAzB,EAAoC,GACpC6B,EAAA7B,EAAyC,GACzCwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BsO,EAAAtO,EAA8B,IAC9BqC,EAAArC,EAA2B,GAE3BqmE,EAAArmE,EAA+B,IAE/BuC,EAAAvC,EAA+B,IAE/B2C,EAAA3C,EAAuC,IACvCm7E,EAAAn7E,EAAuC,IAEnCo7E,EAAUv5E,EAAAkD,cAAcC,KAAKo2E,QAC7BC,EAAUx5E,EAAAkD,cAAcC,KAAKq2E,QAEjC3R,EAAA,mBAAAA,eA+eA,MAheWA,YAAAC,cAAP,WACQtnE,EAAAgC,WAAWsD,QAAQqG,kBACnBnO,KAAKy7E,YAAW,GAEqB,MAArC94E,EAAAoG,YAAYqhE,aAAa5I,WAE4B,MAAjD7+D,EAAAoG,YAAYqhE,aAAa5I,SAASka,aACyB,MAA3D/4E,EAAAoG,YAAYqhE,aAAa5I,SAASka,YAAYC,YAE9C9R,WAAWiH,UAAYnuE,EAAAoG,YAAYqhE,aAAa5I,SAASka,YAAYC,WAIpB,MAAjDh5E,EAAAoG,YAAYqhE,aAAa5I,SAASka,aACqB,MAAvD/4E,EAAAoG,YAAYqhE,aAAa5I,SAASka,YAAYE,QAE9C/R,WAAWgS,MAAQl5E,EAAAoG,YAAYqhE,aAAa5I,SAASka,YAAYE,OAIpB,MAA7Cj5E,EAAAoG,YAAYqhE,aAAa5I,SAASsa,SAClCn5E,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQC,UAAYP,EAAQQ,QAGJ,MAAtDr5E,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQG,UACzCz5E,EAAAgC,WAAWC,kBAAkBiJ,UAgBzB9K,EAAA6F,YAAY2gE,gBAqBkC,MAAxC5mE,EAAAgC,WAAWsD,QAAQo0E,mBAAiD,MAApBrS,WAAWgS,OACJ,MAA1DhS,WAAWgS,MAAMr5E,EAAAgC,WAAWsD,QAAQo0E,mBACpCrS,WAAWsS,YAAY35E,EAAAgC,WAAWsD,QAAQo0E,mBAAmB,GAKjErS,WAAWuS,sBA3B+C,MAAtDz5E,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQO,WAC1CxS,WAAWwB,SAAW1oE,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQO,SAChEz5E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D;AAEzB,MAAvDvL,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQQ,YAC1CzS,WAAW0S,UAAYrmE,SACnBvT,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQQ,UAAUpuE,YAExDtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASy7D,eACTyF,WAAW0S,UAAUruE,aAGF,MAAvB27D,WAAWwB,UAA4C,MAAxBxB,WAAW0S,YAC1C1S,WAAWK,IAAMtrD,WACbhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YAEzD35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,aAE1Es4D,EAAAkD,eAAe+S,2BAUQ,MAAvB5S,WAAWwB,UAA4C,MAAxBxB,WAAW0S,YAC1C1S,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,eA7CpD,MAAlB27D,WAAWK,KACXL,WAAWK,MAAQvnE,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQG,SAE7DxtE,EAAAyB,cAAcwsE,aAEdjuE,EAAAyB,cAAcwsE,YAAW,GAE7B7S,WAAWK,IAAMoR,EAAAqB,uBAAuBC,+BAClC/S,WAAWiH,UAAU,GACrBnuE,EAAAoG,YAAYqhE,aAAa5I,SAASsa,QAAQG,SAChDpS,WAAWgT,oBACXj6E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,cAuC7C,MAA7B27D,WAAWiT,gBACXjT,WAAWiT,eAAeC,YAGO,MAAjClT,WAAWmT,oBACXnT,WAAWmT,mBAAmBD,YAGH,MAA3BlT,WAAWoT,cACXpT,WAAWoT,aAAaF,cAK7BlT,WAAAqT,UAAP,SAAiBC,EAA2Bj/C,EAAsB1N,GAQ9D,GARa,SAAA2sD,OAAA,GAA2B,SAAAj/C,OAAA,GAAsB,SAAA1N,OAAA,GAC9D8qD,EAAAqB,uBAAuBzjB,aAAY,GAC/Bt2D,EAAA6F,YAAY2gE,iBACZtmE,EAAAwC,uBAAuB83E,WAG3BvT,WAAWwT,eAEP76E,EAAAgC,WAAWC,kBAAkBiJ,SAAU,CACvC,GAAI8iB,EAEA,WADAq5C,YAAWyT,gBAER,IAAIp/C,EAEP,WADA2rC,YAAW0T,eAKnB,GAAItT,GAAgBrrD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS+6D,mBAC5DoU,EAAel5D,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,iBAE/D,IAAsB,MAAlBoG,WAAWK,KAAuC,MAAxBL,WAAWiH,WAAqBjH,WAAWiH,UAAU5kE,OAAS,EAAG,CAE3F,IAAK,GADDy3B,GACK5jC,EAAY,EAAGA,EAAI8pE,WAAWiH,UAAU5kE,OAAQnM,IACjD8pE,WAAWK,MAAQL,WAAWiH,UAAU/wE,KACxC4jC,EAAQ5jC,EAGhB,IAAa,MAAT4jC,EAAe,CACf,GAAIw5C,EACc,IAAVx5C,EACInT,IACAmT,EAAQkmC,WAAWiH,UAAU5kE,OAAS,GAG1Cy3B,QAGJ,IAAIzF,EAAK,CACL,GAAIs/C,IAAmB,CAEvB,KAAKA,EACD,IAAK,GAAIC,GAAa5T,WAAWiH,UAAU5kE,OAAS,EAAGuxE,GAAM,EAAGA,IACxD5T,WAAWiH,UAAU2M,IAAOxT,GAASuT,KAAY,IACjDA,GAAU,EACV75C,EAAQ85C,GAER5T,WAAWiH,UAAU2M,IAAO3F,GAAQ0F,KAAY,IAChDA,GAAU,EACV75C,EAAQ85C,OAKhB95C,KAAUkmC,WAAWiH,UAAU5kE,OAAS,EACpCskB,IACAmT,EAAQ,GAGZA,GAKZkmC,YAAWK,IAAML,WAAWiH,UAAUntC,GAEzB,MAATsmC,IACIA,GAASJ,WAAWK,IACpBz7D,EAAAyB,cAAci6D,gBAAe,GAE7B17D,EAAAyB,cAAci6D,kBAItBvnE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YACtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAChBqQ,SAAUpS,WAAWK,IACrBwT,aAAcx/C,EACdv5B,WAAY/B,EAAA6F,YAAYupE,qBAAqB,gBAEjDnI,WAAWgT,qBAGnBrW,EAAAkD,eAAegB,kBAGZb,WAAA8T,WAAP,SAAkB79E,EAAQsB,GACtB,MAAOtB,GAAIsB,GAGRyoE,WAAAuS,mBAAP,WAGI,GAFAvS,WAAWwT,eAEa,MAApBxT,WAAWgS,MAAe,CAC1B,GAAI+B,GAAW,MACf,KAAK,GAAIv4E,KAAOwkE,YAAWgS,MACJ,MAAf+B,EACAA,EAAch/D,WAAWvZ,GAErBuZ,WAAWvZ,GAAOu4E,IAClBA,EAAch/D,WAAWvZ,GAKrCwkE,YAAWwB,SAAWuS,EACtBp7E,EAAAgC,WAAWsD,QAAQ+1E,gBAAgBhU,WAAWwB,UAE9CxB,WAAWgS,MAAM+B,GAAa/9C,KAAKgqC,WAAW8T,YAa9C9T,WAAW0S,UAAY1S,WAAWgS,MAAM+B,GAAa,GAErDh7E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASy7D,eAAgByF,WAAW0S,UAAUruE,YACnF27D,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YAEtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw7D,cACvCvhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASy7D,gBACvCxhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,MAEV,MAAjCL,WAAWmT,oBACXnT,WAAWmT,mBAAmBD,YAElCvW,EAAAkD,eAAe+S,4BAIhB5S,WAAAsS,YAAP,SAAmBpvE,EAAew3B,GAG9B,GAH8B,SAAAA,OAAA,GAC9BslC,WAAWwT,eAEa,MAApBxT,WAAWgS,OAA4C,MAA3BhS,WAAWgS,MAAM9uE,GAAgB,CAM7D,GALA88D,WAAWwB,SAAWt+D,EACtBvK,EAAAgC,WAAWsD,QAAQ+1E,gBAAgBhU,WAAWwB,UAE9CxB,WAAWgS,MAAM9uE,GAAO8yB,KAAKgqC,WAAW8T,YAEnCp5C,GAAgC,MAAxBslC,WAAW0S,WAAsB/5E,EAAAgC,WAAWC,kBAAkBq5E,4BAgBvEjU,WAAW0S,UAAY1S,WAAWgS,MAAM9uE,GAAO,OAhBqD,CAGpG,IAAK,GAFDgxE,IAAiB,EACjBzB,EAAoBzS,WAAW0S,UAC1Bx8E,EAAY,EAAGA,EAAI8pE,WAAWgS,MAAM9uE,GAAOb,OAAQnM,IACpD8pE,WAAWgS,MAAM9uE,GAAOhN,IAAM8pE,WAAW0S,YACzCwB,GAAQ,EACRzB,EAAYzS,WAAWgS,MAAM9uE,GAAOhN,GAIvCg+E,GAGDlU,WAAW0S,UAAYD,EAFvBzS,WAAW0S,UAAY1S,WAAWgS,MAAM9uE,GAAO,GAQvDnK,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASy7D,eAAgByF,WAAW0S,UAAUruE,YACnF27D,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YAEtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw7D,cACvCvhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASy7D,gBACvCxhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,MAEV,MAAjCL,WAAWmT,oBACXnT,WAAWmT,mBAAmBD,YAElCvW,EAAAkD,eAAe+S,0BAGkB,GAAjC75E,EAAA6F,YAAYqnE,mBAEM,MAAdttE,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkBiJ,UACN,MAAvBm8D,WAAWwB,WAEXzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASw8D,kBACTjvD,SACItU,EAAA4L,YAAY89D,OAAO1oE,EAAA6F,YAAYqnE,kBAAmBjG,WAAWwB,UAAUn9D,YACzEA,YAENtL,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASw8D,kBACTjvD,SACItU,EAAA4L,YAAY89D,OAAO1oE,EAAA6F,YAAYqnE,kBAAmBjG,WAAWwB,UAAUn9D,YACzEA,aAKyB,GAAnCtL,EAAA6F,YAAYunE,qBAEM,MAAdxtE,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkBiJ,UACN,MAAvBm8D,WAAWwB,WAEXzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASy8D,oBACTlvD,SACItU,EAAA4L,YAAY89D,OAAO1oE,EAAA6F,YAAYunE,oBAAqBnG,WAAWwB,UAAUn9D,YAC3EA,YAENtL,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASy8D,oBACTlvD,SACItU,EAAA4L,YAAY89D,OAAO1oE,EAAA6F,YAAYunE,oBAAqBnG,WAAWwB,UAAUn9D,YAC3EA,cAMX27D,WAAAmU,iBAAP,SAAwBjxE,GACpB88D,WAAWwT,cACX,IAAIpT,GAAgBrrD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS+6D,kBAChEmG,YAAWK,IAAMn9D,EAEJ,MAATk9D,IACIA,GAASJ,WAAWK,IACpBz7D,EAAAyB,cAAci6D,gBAAe,GAE7B17D,EAAAyB,cAAci6D,kBAItBvnE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YACtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,MAC/CL,WAAWgT,qBAGRhT,WAAAoU,gBAAP,SAAuBlxE,GACnB88D,WAAWwT,eAEa,MAApBxT,WAAWgS,OACgB,MAAvBhS,WAAWwB,WACXxB,WAAW0S,UAAYxvE,EACvBnK,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASy7D,eAAgByF,WAAW0S,UAAUruE,YACnF27D,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YAEtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw7D,cACvCvhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASy7D,gBACvCxhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,QAKpDL,WAAAyT,eAAP,WAGI,GAFAzT,WAAWwT,eAEa,MAApBxT,WAAWgS,OACgB,MAAvBhS,WAAWwB,UAA4C,MAAxBxB,WAAW0S,UAAmB,CAG7D,IAAK,GAFD54C,GAAgB,EAChBu6C,KACKn+E,EAAY,EAAGA,EAAI8pE,WAAWgS,MAAMhS,WAAWwB,UAAUn/D,OAAQnM,IACtEm+E,EAAUlrE,KAAK62D,WAAWgS,MAAMhS,WAAWwB,UAAUtrE,GAEzDm+E,GAAUr+C,KAAKgqC,WAAW8T,WAC1B,KAAK,GAAI59E,GAAY,EAAGA,EAAIm+E,EAAUhyE,OAAQnM,IACtC8pE,WAAW0S,YAAc2B,EAAUn+E,KACnC4jC,EAAQ5jC,EAIY,OAAxBm+E,EAAUv6C,EAAQ,GAClBkmC,WAAW0S,UAAY2B,EAAUv6C,EAAQ,GAEzCkmC,WAAW0S,UAAY2B,EAAU,GAGrCt7E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASy7D,eAAgByF,WAAW0S,UAAUruE,YACnF27D,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YAEtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw7D,cACvCvhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASy7D,gBACvCxhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,QAKpDL,WAAA0T,aAAP,WAGI,GAFA1T,WAAWwT,eAEa,MAApBxT,WAAWgS,OACgB,MAAvBhS,WAAWwB,UAA4C,MAAxBxB,WAAW0S,UAAmB,CAC7D,GAAI4B,GAAiBv/D,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,kBAC7D6Y,EAAoBzS,WAAW0S,SAEnC1S,YAAWgS,MAAMhS,WAAWwB,UAAUxrC,KAAKgqC,WAAW8T,WAEtD,KAAK,GAAI59E,GAAY,EAAGA,EAAI8pE,WAAWgS,MAAMhS,WAAWwB,UAAUn/D,OAAQnM,IAAK,CAC3E,GAAI6rE,GAAchtD,WACdhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAWgS,MAAMhS,WAAWwB,UAAUtrE,IAEhFo+E,IAAUvS,IACV0Q,EAAYzS,WAAWgS,MAAMhS,WAAWwB,UAAUtrE,IAI1D8pE,WAAW0S,UAAYD,EAEvB15E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASw7D,aAAc0F,WAAWwB,SAASn9D,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASy7D,eAAgByF,WAAW0S,UAAUruE,YACnF27D,WAAWK,IAAMtrD,WAAWhd,EAAA4L,YAAYgvE,SAAS3S,WAAWwB,SAAUxB,WAAW0S,YACjF35E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS27D,QAASuF,WAAWK,IAAIh8D,YAEtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASw7D,cACvCvhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASy7D,gBACvCxhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS27D,SACvCtiE,EAAAsC,UAAUA,UAAUsnE,KAAMqQ,SAAUpS,WAAWK,QAKpDL,WAAAgT,kBAAP,WACI,GAA4B,MAAxBhT,WAAWiH,UACX,IAAK,GAAI/wE,GAAY,EAAGA,EAAI8pE,WAAWiH,UAAU5kE,OAAQnM,IACjD8pE,WAAWK,MAAQL,WAAWiH,UAAU/wE,KACpCA,GAAK,GACL8pE,WAAWuU,QAAS,EACpBvU,WAAWwU,QAAS,GACbt+E,GAAK8pE,WAAWiH,UAAU5kE,OAAS,GAC1C29D,WAAWuU,QAAS,EACpBvU,WAAWwU,QAAS,IAEpBxU,WAAWuU,QAAS,EACpBvU,WAAWwU,QAAS,GAGxBz7E,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS47D,gBACTxkE,EAAI,EAAI,IAAM8pE,WAAWiH,UAAU5kE,QAEvCtJ,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS47D,mBAMhDsF,WAAAwT,aAAP,SAAoBc,GAAA,SAAAA,OAAA,EAChB,KAAK,GAAIp+E,GAAI,EAAGA,EAAI2C,EAAA0F,eAAek2E,YAAYpyE,OAAQnM,IACnD2C,EAAA0F,eAAek2E,YAAYv+E,GAAGw+E,OAAOJ,IAItCtU,WAAA4R,WAAP,SAAkB0C,GAAA,SAAAA,OAAA,EACd,KAAK,GAAIp+E,GAAI,EAAGA,EAAI2C,EAAA0F,eAAek2E,YAAYpyE,OAAQnM,IACnD2C,EAAA0F,eAAek2E,YAAYv+E,GAAGy+E,KAAKL,IAIpCtU,WAAA4U,iBAAP,WACI,MAAIj8E,GAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvBm8D,WAAWwB,UAA4C,MAAxBxB,WAAW0S,UAC5E,GAAIhB,GAAQC,EAAQQ,MAAOnS,WAAWwB,SAAUxB,WAAW0S,UAAW,KAAM,MAE5E,GAAIhB,GAAQC,EAAQQ,MAAO,KAAM,KAAM,KAAMnS,WAAWK,MAIxDL,WAAAzxD,IAAf,SAAmBC,KA9dZwxD,WAAAuU,QAAkB,EAClBvU,WAAAwU,QAAkB,EAke7BxU,aA/eaxpE,GAAAwpE,WAAUA,GhCm6cjB,SAASvpE,EAAQD,EAASF,GAE/B,YiCv7cD,IACA6B,IADA7B,EAAoE,GACpEA,EAAsD,IACtDwC,EAAAxC,EAA4B,IAC5BqC,EAAArC,EAA2B,GAG3ByC,EAAAzC,EAA4B,IAExB8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YACjCyuE,EAAe18E,EAAAkD,cAAcC,KAAKw5E,iBAEtCzuE,EAAA,mBAAAA,kBA+UA,MA3UWA,eAAA0uE,mBAAP,SAA0Bv5E,EAAa/E,GAKI,MAAnC4P,cAAc2uE,aAAax5E,KAC3B6K,cAAc2uE,aAAax5E,GAAO/E,IAQnC4P,cAAA4uE,sBAAP,SAA6Bz5E,EAAa/E,GAKI,MAAtC4P,cAAc6uE,gBAAgB15E,KAC9B6K,cAAc6uE,gBAAgB15E,GAAO/E,IAQtC4P,cAAAqlE,eAAP,WAKI,GAAIyJ,IAAqC,CAEzC,KAAK,GAAI35E,KAAO6K,eAAc6uE,gBACa,MAAnC7uE,cAAc2uE,aAAax5E,GAC3B6K,cAAc6uE,gBAAgB15E,GAAK45E,cAAc/uE,cAAc2uE,aAAax5E,IAQ5E25E,GAA4B,CAIpC,OAAOA,IAGJ9uE,cAAA8lE,YAAP,WAKI,IAAK,GAAI3wE,KAAO6K,eAAc6uE,gBAC1B7uE,cAAc6uE,gBAAgB15E,GAAKgxE,cAGnCnmE,eAAckqE,gBAAuE,MAArDlqE,cAAc6uE,gBAAgB9uE,EAAYwmE,QAC1EvmE,cAAc6uE,gBAAgB9uE,EAAYwmE,QAAQyI,YAC3ChvE,cAAc+nE,mBAA6E,MAAxD/nE,cAAc6uE,gBAAgB9uE,EAAY+pE,WACpF9pE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAAWkF,YAEE,MAAnDhvE,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAMgH,aAKrDhvE,cAAAivE,cAAP,WACI,QAAK38E,EAAAgC,WAAW2B,eAAeswE,WAI3B7zE,EAAA6F,YAAYmH,WAAapN,EAAAgC,WAAWC,kBAAkB26E,yBAIxB,MAA9Bz8E,EAAAoG,YAAY8mE,gBAA0BltE,EAAAoG,YAAY8mE,eAAezoE,SAAWs3E,EAAa5uE,WAM1FI,cAAAkqE,aAAP,WACI,QAAK53E,EAAAgC,WAAW2B,eAAeswE,SAIG,MAA9B9zE,EAAAoG,YAAY8mE,gBAA0BltE,EAAAoG,YAAY8mE,eAAezoE,SAAWs3E,EAAaW,SAM1FnvE,cAAA8nE,iBAAP,WACI,MAAqC,OAAjCr1E,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB9yE,SAAWs3E,EAAa5uE,UAC/FlN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,KACxB,IAKRr3D,cAAA+nE,gBAAP,WACI,MAAqC,OAAjCt1E,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB9yE,SAAWs3E,EAAaW,SAC/Fz8E,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,KACxB,IAKRr3D,cAAAovE,aAAP,WAKQpvE,cAAcivE,iBAAwE,MAArDjvE,cAAc6uE,gBAAgB9uE,EAAYwmE,SAC3EvmE,cAAc6uE,gBAAgB9uE,EAAYwmE,QAAQjwD,UAInDtW,cAAAqvE,YAAP,WAKQrvE,cAAckqE,gBACdlqE,cAAcsvE,YAAYvvE,EAAYioE,OAIvChoE,cAAAuvE,gBAAP,WAKgE,MAAxDvvE,cAAc6uE,gBAAgB9uE,EAAY+pE,YAC1C9pE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAAWxzD,UAItDtW,cAAAwvE,eAAP,WAKgE,MAAxDxvE,cAAc6uE,gBAAgB9uE,EAAY+pE,YAC1C9pE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAAWrkE,SAItDzF,cAAAyvE,aAAP,WAKgE,MAAxDzvE,cAAc6uE,gBAAgB9uE,EAAY+pE,YAC1C9pE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAAW/7C,OAItD/tB,cAAAwqE,cAAP,WAK6D,MAArDxqE,cAAc6uE,gBAAgB9uE,EAAYwmE,SAC1CvmE,cAAc6uE,gBAAgB9uE,EAAYwmE,QAAQmJ,WAInD1vE,cAAAuqE,YAAP,WAK2D,MAAnDvqE,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAM0H,WAQjD1vE,cAAAC,qBAAP,SAA4B9K,GAKkB,MAAtC6K,cAAc6uE,gBAAgB15E,IAC9B6K,cAAc6uE,gBAAgB15E,GAAKu6E,WAIpC1vE,cAAAi6D,eAAP,SAAsBz4B,GAAA,SAAAA,OAAA,GACqC,MAAnDxhC,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAM/N,eAAez4B,IAIhExhC,cAAAwsE,WAAP,SAAkBmD,GAAA,SAAAA,OAAA,GACyC,MAAnD3vE,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAMwE,WAAWmD,IAI5D3vE,cAAA4vE,YAAP,SAAmBz6E,EAAa06E,GAAA,SAAAA,OAAA,GAKc,MAAtC7vE,cAAc6uE,gBAAgB15E,IAC9B6K,cAAc6uE,gBAAgB15E,GAAK26E,MAAMD,IAI1C7vE,cAAAsvE,YAAP,SAAmBn6E,GAK2B,MAAtC6K,cAAc6uE,gBAAgB15E,IAC9B6K,cAAc6uE,gBAAgB15E,GAAK46E,SAIpC/vE,cAAAsmE,QAAP,SAAenxE,GACA,MAAPA,GAAqD,MAAtC6K,cAAc6uE,gBAAgB15E,IAC7C6K,cAAc6uE,gBAAgB15E,GAAKmxE,WAIpCtmE,cAAAqoE,gBAAP,SAAuBlzE,GACR,MAAPA,GAAqD,MAAtC6K,cAAc6uE,gBAAgB15E,IAC7C6K,cAAc6uE,gBAAgB15E,GAAKuxE,mBAIpC1mE,cAAAkoE,iBAAP,SAAwB/yE,EAAamxE,GAAA,SAAAA,OAAA,GACtB,MAAPnxE,GAAqD,MAAtC6K,cAAc6uE,gBAAgB15E,IAC7C6K,cAAc6uE,gBAAgB15E,GAAK+yE,iBAAiB5B,IAIrDtmE,cAAAipD,eAAP,SAAsB+mB,GAKlB,IAAK,GAAI76E,KAAO6K,eAAc6uE,gBAC1B7uE,cAAc6uE,gBAAgB15E,GAAK8zD,eAAe+mB,IAInDhwE,cAAAiwE,UAAP,WACQjwE,cAAc+nE,mBAA6E,MAAxD/nE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAC7E9pE,cAAc6uE,gBAAgB9uE,EAAY+pE,WAAWmG,YAEE,MAAnDjwE,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAMiI,aASrDjwE,cAAAkwE,wBAAP,SAA+BC,GAK4B,MAAnDnwE,cAAc6uE,gBAAgB9uE,EAAYioE,OAC1ChoE,cAAc6uE,gBAAgB9uE,EAAYioE,MAAMkI,wBAAwBC,IAIzEnwE,cAAAowE,iBAAP,WACI,GAAuD,MAAnDpwE,cAAc6uE,gBAAgB9uE,EAAYioE,MAC1C,MAAOhoE,eAAc6uE,gBAAgB9uE,EAAYioE,MAAMoI,oBAIxDpwE,cAAAqwE,mBAAP,SAA0Bl7E,EAAamhB,GACI,MAAnCtW,cAAc2uE,aAAax5E,IAC3B6K,cAAc2uE,aAAax5E,GAAKm7E,aAAah6D,IAI9CtW,cAAAuwE,sBAAP,SAA6Bp7E,GACc,MAAnC6K,cAAc2uE,aAAax5E,IAC3B6K,cAAc2uE,aAAax5E,GAAKmxE,WAIjCtmE,cAAAyqE,iBAAP,SAAwBt1E,GAKsB,MAAtC6K,cAAc6uE,gBAAgB15E,IAC9B6K,cAAc6uE,gBAAgB15E,GAAKs1E,oBAIpCzqE,cAAAwwE,qBAAP,WACI,GAAIC,KACJ,IAAgC,MAA5Bh+E,EAAAoG,YAAYgxD,cAA4D,MAApCp3D,EAAAoG,YAAYgxD,aAAa95D,QAC7D,IAAK,GAAIoF,KAAO1C,GAAAoG,YAAYgxD,aAAa95D,QACjC0C,EAAAoG,YAAYgxD,aAAa95D,QAAQoF,GAAK+B,SAAWs3E,EAAakC,UAC9DD,EAAmB3tE,KAAK3N,EAIpC,OAAOs7E,IAGIzwE,cAAAkI,IAAf,SAAmBC,KAzUJnI,cAAA2uE,gBACA3uE,cAAA6uE,mBA6UnB7uE,gBA/Ua7P,GAAA6P,cAAaA,GjCutdpB,SAAS5P,EAAQD,EAASF,GAE/B,YkCpudD,IAAAyB,GAAAzB,EAAoC,GACpC6B,EAAA7B,EAAyC,GACzCwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BomE,EAAApmE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BiC,EAAAjC,EAA0B,IAC1BsO,EAAAtO,EAA8B,IAC9B0gF,EAAA1gF,EAA8B,IAC9B2C,EAAA3C,EAAuC,IAGnC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAGrCy5D,EAAA,mBAAAA,mBA8TA,MA3TWA,gBAAAC,WAAP,WAC4C,MAApChnE,EAAAoG,YAAYgxD,aAAaiQ,UACoB,MAAzCrnE,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,OACjCl1E,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS86D,gBACT9gE,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,KAAK5pE,YAEtC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASi7D,qBACT1tD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,KAAMvR,EAAAsD,WAAWwB,WACvEn9D,aAKgC,MAA1CvL,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,OACjCrnE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS+6D,iBACT/gE,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,MAAM/7D,YAIF,MAAzCvL,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,MAA0D,MAA1Cn1E,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,OAClFrnE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg7D,iBACT/hE,EAAA4L,YAAYjE,IAAI5G,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,KAAMn1E,EAAAoG,YAAYgxD,aAAaiQ,QAAQC,UAMjGP,eAAAoX,WAAP,WACI,GAIIC,GAJA9W,EAAgBrrD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS+6D,mBAC5DoU,EAAel5D,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,kBAC3Dud,EAAoBpiE,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASi7D,uBAChE0O,EAAc1zD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASs7D,eAE1DngC,EAAgBllB,WAAWhd,EAAA4L,YAAYjE,IAAI0gE,EAAO6N,IAClDlM,EAAcrF,EAAAsD,WAAWK,IACzB+W,EAAmB1a,EAAAsD,WAAW0S,UAC9B2E,EAAgB3a,EAAAsD,WAAWwB,QAE/B,IAAIvoE,EAAAwC,uBAAuB6lE,MACvB,GAAI3oE,EAAAgC,WAAW2B,eAAeswE,QAAkD,eAAxC3zE,EAAAwC,uBAAuBmkE,cAC3D,GAAgC,MAA5B9mE,EAAAoG,YAAYgxD,cAA4D,MAApCp3D,EAAAoG,YAAYgxD,aAAaiQ,QAAiB,CAC9E,GAAImX,GAA2Bv+E,EAAA6F,YAAY2gE,gBAAkB0O,EAAOl5D,WAAWhd,EAAA4L,YAAYjE,IAAIuuE,EAAMxF,IACjG8O,EAAuBx+E,EAAA6F,YAAY2gE,gBAAkBtlC,EAAQllB,WAAWhd,EAAA4L,YAAYjE,IAAIu6B,EAAOwuC,GACnG1vE,GAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS+6D,iBAAkBuG,EAAM/7D,YACtEtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS86D,gBAAiB0d,EAAiBjzE,YAChFtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg7D,iBAAkByd,EAAalzE,YAC7EtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkBuG,EAAM/7D,YAC/DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiBqU,EAAK5pE,YAC7DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,iBAAkByd,EAAalzE,iBAElE1L,GAAAgC,WAAW2B,eAAeswE,QAAW7zE,EAAA6F,YAAY2rE,aACzB,MAA5BzxE,EAAAoG,YAAYgxD,cAA4D,MAApCp3D,EAAAoG,YAAYgxD,aAAaiQ,UAC7DpnE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS+6D,iBAAkBuG,EAAM/7D,YACtEtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS86D,gBAAiBqU,EAAK5pE,YACpEtL,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg7D,iBAAkB7/B,EAAM51B,YACtEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkBuG,EAAM/7D,YAC/DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiBqU,EAAK5pE,YAC7DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,iBAAkB7/B,EAAM51B,iBAM9D,OAATgzE,GAAwB,MAAP5O,IACjByO,EAAWniE,WAAWhd,EAAA4L,YAAY89D,OAAOgH,EAAK4O,KAG9Ct+E,EAAA6F,YAAY2gE,iBACC,MAATa,GAAiBA,EAAQ,GAAKA,GAAS2B,GACvCn9D,EAAAyB,cAAci6D,gBAAe,GAC7BvnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkB9hE,EAAA4L,YAAYs+D,SAAS7B,EAAO2B,MAErFn9D,EAAAyB,cAAci6D,iBACdvnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiB7hE,EAAA4L,YAAYs+D,SAASgM,EAAMlM,IACtE,MAATsV,GAA6B,MAAZD,GACjBr+E,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACThiE,EAAA4L,YAAYs+D,SAASkV,EAAWC,KAI5Cr+E,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,iBAAkB/hE,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,IACrFhpE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg7D,iBAAkB/hE,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,KAExF0G,EAAM,GACO,MAATrI,GAAiBA,EAAQ,GAAKA,GAAS2B,GACvCn9D,EAAAyB,cAAci6D,gBAAe,GAC7BvnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkB9hE,EAAA4L,YAAYs+D,SAAS7B,EAAO2B,IACrFhpE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiB7hE,EAAA4L,YAAYjE,IAAIuuE,EAAMxF,IACjE,MAAT4O,GAA6B,MAAZH,GACjBn+E,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACThiE,EAAA4L,YAAYjE,IAAIy3E,EAAWD,MAInCtyE,EAAAyB,cAAci6D,iBACdvnE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAAS86D,gBACT7hE,EAAA4L,YAAYjE,IAAI3H,EAAA4L,YAAYs+D,SAASgM,EAAMlM,GAAM0G,IAExC,MAAT4O,GAA6B,MAAZH,GAAgC,MAAZE,GACrCr+E,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACThiE,EAAA4L,YAAYjE,IAAI3H,EAAA4L,YAAYs+D,SAASkV,EAAWC,GAAWF,KAIvEn+E,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASg7D,iBACT/hE,EAAA4L,YAAYjE,IAAI3H,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,GAAM0G,IAEtD1vE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg7D,iBACT/hE,EAAA4L,YAAYjE,IAAI3H,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,GAAM0G,MAGzC,MAATrI,GAAiBA,EAAQ,GAAKA,GAAS2B,GACvCn9D,EAAAyB,cAAci6D,gBAAe,GAC7BvnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkB9hE,EAAA4L,YAAYs+D,SAAS7B,EAAO2B,MAErFn9D,EAAAyB,cAAci6D,iBACdvnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiB7hE,EAAA4L,YAAYs+D,SAASgM,EAAMlM,IACtE,MAATsV,GAA6B,MAAZD,GACjBr+E,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACThiE,EAAA4L,YAAYs+D,SAASkV,EAAWC,KAI5Cr+E,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,iBAAkB/hE,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,IACrFhpE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg7D,iBAAkB/hE,EAAA4L,YAAYs+D,SAAShoC,EAAO8nC,MAKjGlC,eAAA2X,UAAP,SAAiBhD,EAAyBiD,GAAzB,SAAAjD,OAAA,GAAyB,SAAAiD,OAAA,EACtC,IAAIrX,GAAgBrrD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS+6D,mBAC5DoU,EAAel5D,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,kBAC3D6O,EAAc1zD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASs7D,eAC1D2H,EAAcrF,EAAAsD,WAAWK,IACzBphE,GAAmB,CAMvB,IAJIlG,EAAA6F,YAAY2gE,kBACZkJ,EAAM,GAGG,MAATrI,GAAiBA,EAAQ,EAAG,CAC5B,GAAIA,GAAS2B,EAET,MADAn9D,GAAAyB,cAAci6D,gBAAe,IACtB,CAEP17D,GAAAyB,cAAci6D,iBAItB,GAAIrnE,EAAAwC,uBAAuB6lE,MACnB3oE,EAAAgC,WAAWsD,SACXtF,EAAAgC,WAAWsD,QAAQoxD,cAGnB2nB,EAAAU,cAAcC,QACdX,EAAAU,cAAcE,UAGdH,GACAx+E,EAAAwC,uBAAuBswE,YAG3B9sE,GAAU,MACP,IAAIgvE,GAAQ,GAAKA,EAAOlM,EAAK,CAChC,GAAIuS,GAAiBv/D,WAAWhd,EAAA4L,YAAYjE,IAAIuuE,EAAMxF,GAClD6L,GAAS,GAAKA,GAAUvS,GACpBppE,EAAAgC,WAAWsD,SACXtF,EAAAgC,WAAWsD,QAAQoxD,cAGnB2nB,EAAAU,cAAcC,QACdX,EAAAU,cAAcE,UAGdH,GACAx+E,EAAAwC,uBAAuBswE,YAG3B9sE,GAAU,IAENtG,EAAAgC,WAAWsD,SAAWw5E,IACtB7yE,EAAAyB,cAAcsmE,QAAQvmE,EAAYioE,MAE9B11E,EAAAgC,WAAWC,kBAAkBi9E,mBAC7Bb,EAAAU,cAAcloB,aAEd72D,EAAAgC,WAAWsD,QAAQsI,WAAWhO,EAAAsH,UAAUC,OAAO,sBAAsB,GAGzE3H,EAAAsC,UAAUA,UAAUq9E,YAAY,oBAAqBv/E,EAAAsH,UAAUC,OAAO,sBAEtEhH,EAAAoG,YAAYotE,aAAc,GAE9BrtE,GAAU,OAGVtG,GAAAgC,WAAWsD,SACXtF,EAAAgC,WAAWsD,QAAQoxD,cAGnB2nB,EAAAU,cAAcC,QACdX,EAAAU,cAAcE,UAGdH,GACAx+E,EAAAwC,uBAAuBswE,YAG3B9sE,GAAU,CAEd,OAAOA,IAGJ4gE,eAAAgB,eAAP,WACI,GACkB,MAAdloE,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkBm9E,WAAa,GAC1Ch/E,EAAA6F,YAAY2gE,gBACd,CACE,GAAIY,GAAkBprD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,iBAClE,IAAe,MAAXuG,GAAqC,MAAlBzD,EAAAsD,WAAWK,KAAeF,GAAWzD,EAAAsD,WAAWK,IACnE,MAEKR,gBAAemY,eAChBvsE,WAAW,WACPo0D,eAAeoY,kBAChBt/E,EAAAgC,WAAWC,kBAAkBm9E,YAChClY,eAAemY,cAAe,KAMvCnY,eAAAoY,eAAP,SAAsBC,GAAA,SAAAA,OAAA,GACdp/E,EAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WAAW+kE,UAAUhS,KAAK,SAACC,GACnCyR,eAAesY,gBAAgB/pB,EAAU8pB,MAK9CrY,eAAAsY,gBAAP,SAAuB/pB,EAAoB8pB,GAAA,SAAAA,OAAA,GACvCrY,eAAemY,cAAe,CAC9B,IAAI5X,GAAgBhS,EAASgS,MAAM/7D,WAC/B4pE,EAAe7f,EAAS6f,KAAK5pE,WAC7B41B,EAAgBliC,EAAA4L,YAAYjE,IAAI0uD,EAASgS,MAAOhS,EAAS6f,KAE7Dl1E,GAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS+6D,iBAAkBuG,GAChErnE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS86D,gBAAiBqU,GAC/Dl1E,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg7D,iBAAkB7/B,GAE5DthC,EAAAgC,WAAWC,kBAAkBiJ,UAAY64D,EAAAsD,WAAWwB,UACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASi7D,qBACT1tD,SAAStU,EAAA4L,YAAY89D,OAAOrT,EAAS6f,KAAMvR,EAAAsD,WAAWwB,WAAWn9D,YAIzEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,iBAAkBuG,GACzDrnE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,gBAAiBqU,GACxDl1E,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,iBAAkB7/B,GAErDthC,EAAAgC,WAAWC,kBAAkBiJ,UAAY64D,EAAAsD,WAAWwB,UACpDzoE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACT1tD,SAAStU,EAAA4L,YAAY89D,OAAOrT,EAAS6f,KAAMvR,EAAAsD,WAAWwB,WAAWn9D,YAGzEw7D,eAAegB,iBAEf1oE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ3e,WAAWklB,GAAQi+C,OAAQA,KAGrErY,eAAA+S,wBAAP,WACQj6E,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,WACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASi7D,qBACT1tD,SACItU,EAAA4L,YAAY89D,OACR1sD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,kBAC5C8C,EAAAsD,WAAWwB,WAEjBn9D,YAENtL,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASi7D,qBACT1tD,SACItU,EAAA4L,YAAY89D,OACR1sD,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAAS86D,kBAC5C8C,EAAAsD,WAAWwB,WAEjBn9D,cAKCw7D,eAAAtxD,IAAf,SAAmBC,KAxTJqxD,eAAAmY,cAAwB,EA6T3CnY,iBA9TarpE,GAAAqpE,eAAcA,GlC49drB,SAASppE,EAAQD,EAASF,GAE/B,YmC9+dD,IAAAyB,GAAAzB,EAAoC,GACpCqC,EAAArC,EAA2B,GAC3B6B,EAAA7B,EAA0B,GAC1B+hF,EAAA/hF,EAAuB,IACvBqmE,EAAArmE,EAA+B,IAC/BgiF,EAAAhiF,EAAyB,IACzB2C,EAAA3C,EAAuC,IAMvCohF,EAAA,mBAAAA,kBAmGA,MA1FWA,eAAAloB,WAAP,WAKIr3D,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,GAE5Cb,cAAcC,QAAS,EAEvBD,cAAcc,SAAWl5E,SAASC,eAAe,iBACnB,MAA1Bm4E,cAAcc,WACdd,cAAce,eAAiBn5E,SAASC,eAAe,iBACnB,MAAhCm4E,cAAce,iBACdf,cAAce,eAAeC,QAAUhB,cAAciB,WAGzDjB,cAAckB,eAAiBt5E,SAASC,eAAe,iBACnB,MAAhCm4E,cAAckB,iBACVjgF,EAAAgC,WAAWC,kBAAkBi+E,uCAC7BnB,cAAckB,eAAeF,QAAUhB,cAAcoB,iBAErDpB,cAAckB,eAAe5wE,MAAMC,QAAU,QAIrDyvE,cAAcqB,aAAez5E,SAASC,eAAe,sBACnB,MAA9Bm4E,cAAcqB,eACdrB,cAAcqB,aAAaL,QAAUhB,cAAcE,SAGvDF,cAAcsB,iBAAmB15E,SAASC,eAAe,0BACnB,MAAlCm4E,cAAcsB,mBACdtB,cAAcsB,iBAAiBN,QAAUhB,cAAcE,SAGvDF,cAAcc,SAAS/4E,UAAUiO,SAAS2qE,EAAAY,OAAOC,gBACjDxB,cAAcc,SAAS/4E,UAAU6N,OAAO+qE,EAAAY,OAAOC,iBAKpDxB,cAAAiB,UAAP,WAOI,GAFAL,EAAAp4D,SAASsS,KAAK,aAETz6B,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBu+E,YAUxDhhF,EAAAsC,UAAUA,UAAU2+E,iBAViD,CAKrE,GAJAjhF,EAAAsC,UAAUA,UAAU2+E,YAChBC,OAAQ,oBACRn4E,OAAQvI,EAAAgC,WAAWC,kBAAkBu+E,aAErChhF,EAAAsC,UAAUA,UAAU6+E,sBACpB,MAEJ1/E,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBu+E,WAAY,WAMtDzB,cAAAoB,iBAAP,WAKIR,EAAAp4D,SAASsS,KAAK,aAEdmqC,EAAAkD,eAAeoY,kBAGZP,cAAAE,QAAP,WAKIU,EAAAp4D,SAASsS,KAAK,aACdklD,cAAcC,QAAS,EAEvBx/E,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,GAEvCb,cAAcc,SAAS/4E,UAAUiO,SAAS2qE,EAAAY,OAAOC,gBAClDxB,cAAcc,SAAS/4E,UAAUC,IAAI24E,EAAAY,OAAOC,gBAGf,MAA7BjgF,EAAAwC,uBAAuB/E,IAAcuC,EAAAwC,uBAAuB89E,aAAal3E,OAAS,IAClFpJ,EAAAwC,uBAAuB83E,YA/FxBmE,cAAAC,QAAkB,EAkG7BD,gBAnGalhF,GAAAkhF,cAAaA,GnC+jepB,SAASjhF,EAAQD,EAASF,GAE/B,YoC7keD,IAAAyB,GAAAzB,EAA2C,GAC3C6B,EAAA7B,EAAkD,GAClDiC,EAAAjC,EAA0B,IAC1BiT,EAAAjT,EAA2E,GAC3EqC,EAAArC,EAA2B,GAC3B2C,EAAA3C,EAAuC,IACvCyN,EAAAzN,EAAwB,GACxBsO,EAAAtO,EAA8B,IAC9B40E,EAAA50E,EAA0B,IAE1Bm7E,EAAAn7E,EAAuC,IAavC2iF,EAAA,WAqBI,QAAAA,QAAY9N,GACRh1E,KAAKs1E,KAAON,EACZh1E,KAAKqiF,SAAWl5E,SAASC,eAAe,UACxCpJ,KAAKqjF,gBAAkBl6E,SAASC,eAAe,iBAC/CpJ,KAAKsjF,aAAen6E,SAASC,eAAe,aAC5CpJ,KAAKujF,aAAep6E,SAASC,eAAe,cAC5CpJ,KAAKwjF,eAAiBr6E,SAASC,eAAe,gBAC9CpJ,KAAKyjF,qBAAuBt6E,SAASC,eAAe,sBACpDpJ,KAAK0jF,sBAAwBv6E,SAASC,eAAe,uBACrDpJ,KAAK2jF,aAAex6E,SAASC,eAAe,cAC5CpJ,KAAK4jF,cAAgBz6E,SAASC,eAAe,eAExB,MAAjBpJ,KAAKqiF,UAAqBriF,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOC,gBAClE/iF,KAAKqiF,SAAS/4E,UAAUC,IAAIu5E,OAAOC,eAGd,MAArB/iF,KAAK2jF,eACL3jF,KAAK2jF,aAAa9xE,MAAMC,QAAU,QAGZ,MAAtB9R,KAAK4jF,gBACL5jF,KAAK4jF,cAAc/xE,MAAMC,QAAU,QAGvC9R,KAAK8Z,OAAS1G,EAAAa,iBAAiB,eAC/BjU,KAAK8Z,OAAO5F,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKk5D,YAAY7kD,KAAKrU,OAEhEA,KAAK6jF,aAAe7jF,KAAK6jF,aAAaxvE,KAAKrU,MAC3CA,KAAK8jF,eAAiB9jF,KAAK8jF,eAAezvE,KAAKrU,MAE/CA,KAAK+jF,YAAc,KA6U3B,MA1UIjB,QAAAhiF,UAAAu4D,WAAA,SACI6H,EACAxJ,EACAohB,EACArxE,EACA4I,EACAwiE,EACA/a,GAcA,GAnBA,SAAAJ,MAAA,IACA,SAAAohB,MAAA,IACA,SAAArxE,OAAA,GACA,SAAA4I,OAAA,GACA,SAAAwiE,MAAA,KACA,SAAA/a,MAAA,MAEA93D,KAAK+jF,YAAcjsB,EAUnB91D,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,GAEvB,MAAjBpiF,KAAKqiF,SAAkB,CACvB,GAAM/I,IACD13E,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,eAC7BniF,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,YAAYz3D,QACzC1qB,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,YAAYz3D,KAAKgtD,eAC/Ct5E,KAAK+jF,YAAYz3D,KAAKgtD,gBAAiB,CAM3C,IAJyB,MAArBt5E,KAAKujF,eACLvjF,KAAKujF,aAAa/5E,UAAY03D,GAGT,MAArBlhE,KAAKsjF,aACL,GAAa,KAAT5rB,GAAoC,MAArB13D,KAAKsjF,cAAyBjzE,EAW7CrQ,KAAKsjF,aAAazxE,MAAMC,QAAU,WAXoB,CACtC,KAAZgnE,IACAA,EAAU,IAGd,IAAIkL,GAAsBnR,EAAc,IAAMiG,CAC9CphB,GAAO,QAAUA,EAAKtqD,QAAQ,IAAK,IACnC,IAAI62E,GAAqB7hF,EAAAsH,UAAUC,OAAO+tD,EAAMssB,EAChDhkF,MAAKsjF,aAAa/mB,YAAc0nB,EAAW72E,QAAQ,KAAM,IACzDpN,KAAKsjF,aAAazxE,MAAMC,QAAU,QAMtCrK,IAAU6xE,GACNt5E,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOoB,YACxClkF,KAAKqiF,SAAS/4E,UAAU6N,OAAO2rE,OAAOoB,WAGrClkF,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOqB,aACzCnkF,KAAKqiF,SAAS/4E,UAAUC,IAAIu5E,OAAOqB,YAGd,MAArBnkF,KAAK2jF,eACL3jF,KAAK2jF,aAAa9xE,MAAMC,QAAU,QAEZ,MAAtB9R,KAAK4jF,gBACL5jF,KAAK4jF,cAAc/xE,MAAMC,QAAU,SAGX,MAAxB9R,KAAKqjF,kBACLrjF,KAAKqjF,gBAAgB9mB,YAAcn6D,EAAAsH,UAAUC,OAAO,cAGvB,MAA7B3J,KAAKyjF,uBACLzjF,KAAKyjF,qBAAqB5xE,MAAMC,QAAU,QAGnB,MAAvB9R,KAAKwjF,iBACLxjF,KAAKwjF,eAAe3xE,MAAMC,QAAU,QACpC9R,KAAKwjF,eAAejB,QAAUviF,KAAK6jF,gBAGlC7jF,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOoB,YACzClkF,KAAKqiF,SAAS/4E,UAAUC,IAAIu5E,OAAOoB,WAGnClkF,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOqB,aACxCnkF,KAAKqiF,SAAS/4E,UAAU6N,OAAO2rE,OAAOqB,YAGjB,MAArBnkF,KAAK2jF,eACL3jF,KAAK2jF,aAAa9xE,MAAMC,QAAU,SAEZ,MAAtB9R,KAAK4jF,gBACL5jF,KAAK4jF,cAAc/xE,MAAMC,QAAU,QAGX,MAAxB9R,KAAKqjF,kBACLrjF,KAAKqjF,gBAAgB9mB,YAAcn6D,EAAAsH,UAAUC,OAAO,aAG7B,MAAvB3J,KAAKwjF,iBACLxjF,KAAKwjF,eAAe3xE,MAAMC,QAAU,QAGpC9R,KAAKyjF,uBACLzjF,KAAKyjF,qBAAqB5xE,MAAMC,QAAU,QAG1CwnE,GACyB,MAArBt5E,KAAKsjF,eACLtjF,KAAKsjF,aAAazxE,MAAMC,QAAU,QAGX,MAAvB9R,KAAKwjF,iBACLxjF,KAAKwjF,eAAe3xE,MAAMC,QAAU,QACpC9R,KAAKwjF,eAAejB,QAAUviF,KAAK6jF,eAEhCxzE,GACkB,MAArBrQ,KAAKsjF,eACLtjF,KAAKsjF,aAAazxE,MAAMC,QAAU,QAGL,MAA7B9R,KAAKyjF,uBACLzjF,KAAKyjF,qBAAqB5xE,MAAMC,QAAU,QAC1C9R,KAAKyjF,qBAAqBlB,QAAUviF,KAAK8jF,kBAIzC9jF,KAAK8Z,OAAOK,aACZnY,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,GAGhDpiF,KAAK8Z,OAAOpE,OACZ1V,KAAK8Z,OAAOnE,MAAM,OAKrB/T,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,YAAYz3D,OACzC1qB,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,YAAYz3D,KAAKysD,UAE/C/4E,KAAKokF,oBAAoBpkF,KAAK+jF,YAAYz3D,KAAKysD,SAG/C/4E,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOC,gBACxC/iF,KAAKqiF,SAAS/4E,UAAU6N,OAAO2rE,OAAOC,iBASlDD,OAAAhiF,UAAAo4D,YAAA,WAKIl5D,KAAK8Z,OAAOpE,OAEZ1T,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,GAEvCpiF,KAAKqiF,SAAS/4E,UAAUiO,SAASurE,OAAOC,gBACzC/iF,KAAKqiF,SAAS/4E,UAAUC,IAAIu5E,OAAOC,gBAGN,MAA7BjgF,EAAAwC,uBAAuB/E,IAAcuC,EAAAwC,uBAAuB89E,aAAal3E,OAAS,IAClFpJ,EAAAwC,uBAAuB83E,WAG3B9B,EAAAqB,uBAAuB0H,mBAGnBvB,OAAAhiF,UAAA+iF,aAAR,WACI,GAAI/1E,GAAatL,EAAAgC,WAAWsJ;AAC5B,GAAIA,EAAY,CACZ,GAAI6qE,GAAqD,IACzD,KAAK/2E,EAAAqG,MAAMC,kBAAkBlI,KAAK+jF,aAAc,CAC5C,GAAIO,GAAgBtkF,KAAK+jF,WAEzBpL,GAAU2L,EAAc78E,MACxBkxE,EAAQuK,OAASoB,EAAc78E,MAAM88E,kBAWzCviF,EAAAsC,UAAUA,UAAUkgF,YAAc,SAClCxiF,EAAAsC,UAAUA,UAAUC,cACpBuJ,EAAW22E,QAAQzkF,KAAKs1E,KAAMqD,KAI9BmK,OAAAhiF,UAAAgjF,eAAR,WACI9hF,EAAAsC,UAAUA,UAAUogF,gBAChB1iF,EAAAsC,UAAUA,UAAUqgF,kBAIxBlhF,OAAOC,SAASkhF,QAAO,IAGnB9B,OAAAhiF,UAAAsjF,oBAAR,SAA4BrL,GACxB,GAAIA,EAAQ7sE,OAAS,EAAG,CACpBlM,KAAK6kF,gBASL,KAAK,GANDC,MACAC,EAAuB,IACvBC,EAAY,EACZC,EAAe,EACfC,EAAW,EAENnlF,EAAI,EAAGA,EAAIg5E,EAAQ7sE,OAAQnM,IAAK,CACrC,GAAIolF,GAAgBpM,EAAQh5E,EAE5B,IAAIolF,GAAiBA,EAAoB,KAAG,CACxC,GAAIC,GAAsBj8E,SAASkX,cAAc,MACjD+kE,GAAO97E,UAAUC,IAAI,YAAa,mBAGlCvJ,KAAK0jF,sBAAsBpyE,YAAY8zE,GAEvCJ,EACI9uE,SAASzS,OAAO0S,iBAAiBivE,GAAQ/uE,iBAAiB,UAAY0uE,EAC1EE,EAAe/uE,SAASzS,OAAO0S,iBAAiBivE,GAAQ/uE,iBAAiB,aACzE,IAAIgvE,GAAe,CAWnB,QATIF,EAAoB,OACpBE,EAAerlF,KAAKslF,mBAAmBH,EAAoB,KAAGF,GAC9DG,EAAO7oB,YAAc4oB,EAAoB,MAGzCE,EAAeH,IACfA,EAAWG,GAGPF,EAAoB,MACxB,IAAK,WACDC,EAAO7C,QAAUviF,KAAKulF,gBAAgBlxE,KAAKrU,KAC3C,MACJ,KAAK,OACDolF,EAAO7C,QAAUviF,KAAKwlF,YACtB,MACJ,KAAK,UACDJ,EAAO7C,QAAUviF,KAAKylF,cACtB,MACJ,KAAK,SACDL,EAAO7C,QAAUviF,KAAK0lF,aACtB,MACJ,KAAK,UACDN,EAAO7C,QAAUviF,KAAK2lF,eAAetxE,KAAKrU,KAAMmlF,EAA0B,YAIlFL,EAAQ9xE,KAAKoyE,IAIrB,GAAIF,EAAWF,EAGX,IAAK,GAFDY,GAAc7mE,KAAK+0B,MAAMmxC,GAAgBD,EAAYE,IAEhDnlF,EAAI,EAAGA,EAAI+kF,EAAQ54E,OAAQnM,IAChC+kF,EAAQ/kF,GAAG8R,MAAMm3B,SAAW48C,EAAc,OAMlD9C,OAAAhiF,UAAAwkF,mBAAR,SAA2BpkB,EAAcl4B,GACrC,GAAIuxB,GAAOpxD,SAASkX,cAAc,OAElCk6C,GAAKgC,YAAc2E,EACnB3G,EAAK1oD,MAAMm3B,SAAWA,EAAW,KACjC7/B,SAASkI,KAAKC,YAAYipD,EAC1B,IAAI5zD,GAAQ4zD,EAAK/qB,WAGjB,OADArmC,UAASkI,KAAKoV,YAAY8zC,GACnB5zD,GAGHm8E,OAAAhiF,UAAA+jF,eAAR,WASI,IAR2B,MAAvB7kF,KAAKwjF,iBACLxjF,KAAKwjF,eAAe3xE,MAAMC,QAAU,QAGP,MAA7B9R,KAAKyjF,uBACLzjF,KAAKyjF,qBAAqB5xE,MAAMC,QAAU,QAGvC9R,KAAK0jF,sBAAsBmC,YAC9B7lF,KAAK0jF,sBAAsBj9D,YAAYzmB,KAAK0jF,sBAAsBmC,aAIlE/C,OAAAhiF,UAAA0kF,aAAR,WACIxjF,EAAAsC,UAAUA,UAAUkgF,YAAc,SAClC52E,EAAA1K,QAAQmB,QAGJy+E,OAAAhiF,UAAAykF,gBAAR,WACIvlF,KAAKk5D,cACL6b,EAAA+E,UAAUgM,gBAGNhD,OAAAhiF,UAAA2kF,eAAR,WACS7jF,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoH,aAEhDjK,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAG/D+C,EAAA1K,QAAQoH,uBAJRsD,EAAA1K,QAAQ0I,+BAQRk3E,OAAAhiF,UAAA4kF,cAAR,WACI1jF,EAAAsC,UAAUA,UAAUogF,gBAChB1iF,EAAAsC,UAAUA,UAAUqgF,kBAIxBlhF,OAAOC,SAASkhF,QAAO,IAGnB9B,OAAAhiF,UAAA6kF,eAAR,SAAuBrlF,GACnBN,KAAKk5D,cACLzqD,EAAAyB,cAAckoE,iBAAiB93E,IA7X5BwiF,OAAAC,cAAwB,YACxBD,OAAAoB,UAAoB,OACpBpB,OAAAqB,WAAqB,QA6XhCrB,SAhYaziF,GAAAyiF,OAAMA,GpC62eb,SAASxiF,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MqC14epFskF,EAAA5lF,EAAqC,IACrCsO,EAAAtO,EAA8B,IAC9BwC,EAAAxC,EAA4B,IAC5B6lF,EAAA7lF,EAAmC,IACnCwmE,EAAAxmE,EAA+B,IAE/BmF,EAAA,SAAAnC,GAA4C5B,EAAA+D,uBAAAnC,EAA5C,SAAAmC,0BAA4CnC,EAAA9B,MAAArB,KAAAoD,WAyB5C,MAxBkBkC,wBAAA2gF,cAAd,WACkC,WAA1Btf,EAAAkF,eAAezkE,QACfu/D,EAAAkF,eAAeV,OAAQ,EACvB6a,EAAAE,mBAAmBC,SAAS,UAC5B13E,EAAAyB,cAAcuqE,cACd93E,EAAAoG,YAAYutE,YAEZ7nE,EAAAyB,cAAcuqE,eAIRn1E,uBAAA8gF,aAAd,aAEc9gF,uBAAA8wE,qBAAd,WACI2P,EAAAM,qBAAqBviF,aACrBkiF,EAAAE,mBAAmBpiF,cAGTwB,uBAAA4wE,eAAd,WACIvP,EAAAkF,eAAetrE,GAAK,KACpBomE,EAAAkF,eAAewM,aAGL/yE,uBAAAghF,cAAd,aACJhhF,wBAzB4CqhE,EAAAkF,eAA/BxrE,GAAAiF,uBAAsBA,GrC46e7B,SAAShF,EAAQD,EAASF,GAE/B,YsCp7eD,IAAAwmE,GAAAxmE,EAA+B,IAC/ByC,EAAAzC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzBgiF,EAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAE3ByB,EAAAzB,EAA0B,GAC1B6B,EAAA7B,EAA0B,GAC1B6C,EAAA7C,EAA+B,IAC/Bm7E,EAAAn7E,EAAuC,IAEvCkmF,EAAA,mBAAAA,yBA0eA,MApdkBA,sBAAAviF,WAAd,WACIuiF,qBAAqBvD,OAAS35E,SAASC,eAAe,aACtDi9E,qBAAqBE,mBAAqBp9E,SAASC,eAAe,yBAClEi9E,qBAAqBG,oBAAsBr9E,SAASC,eAAe,0BACnEi9E,qBAAqBI,uBAAyBt9E,SAASC,eAAe,6BACtEi9E,qBAAqBK,wBAA0Bv9E,SAASC,eAAe,8BACvEi9E,qBAAqBM,iBAAmBx9E,SAASC,eAAe,uBAChEi9E,qBAAqBO,oBAAsBz9E,SAASC,eAAe,0BACnEi9E,qBAAqBQ,iBAAmB19E,SAASC,eAAe,uBAChEi9E,qBAAqBS,qBAAuB39E,SAASC,eAAe,2BACpEi9E,qBAAqBU,mBAAqB59E,SAASC,eAAe,yBAClEi9E,qBAAqBW,iBAAmB79E,SAASC,eAAe,iBAChEi9E,qBAAqBY,qBAAuB99E,SAASC,eAAe,qBACpEi9E,qBAAqBa,iBAAmB/9E,SAASC,eAAe,iBAChEi9E,qBAAqBc,eAAiBh+E,SAASC,eAAe,eAC9Di9E,qBAAqBe,gBAAkBj+E,SAASC,eAAe,gBAC/Di9E,qBAAqBgB,eAAiBl+E,SAASC,eAAe,eAC9Di9E,qBAAqBiB,aAErBjB,qBAAqBkB,iCAIXlB,qBAAAj2E,WAAd,SAAyB2jB,GAyBrB,OAxBAnxB,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASk9D,sBAAuBc,EAAAkF,eAAe2b,kBACpF5kF,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASm9D,qBAAsBa,EAAAkF,eAAe4b,iBACnF7kF,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASq9D,eAAgBW,EAAAkF,eAAe6b,SAC7E9kF,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASu9D,WAAYS,EAAAkF,eAAeyG,OACzE1vE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk9D,sBAAuBc,EAAAkF,eAAe2b,kBAC7E5kF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASm9D,qBAAsBa,EAAAkF,eAAe4b,iBAC5E7kF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASq9D,eAAgBW,EAAAkF,eAAe6b,SACtE9kF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu9D,WAAYS,EAAAkF,eAAeyG,OAClE+T,qBAAqBsB,WACrB/kF,EAAA6F,YAAYknE,iBAAiB,WAAY,IACN,KAA/BhJ,EAAAkF,eAAe+b,aACfhlF,EAAA6F,YAAYgnE,iBAAiB,YAEJ,KAAzB9I,EAAAkF,eAAeyG,MACf1vE,EAAA6F,YAAYgnE,iBAAiB,UAE7B7sE,EAAA6F,YAAYknE,iBAAiB,UAEjC0W,qBAAqBxB,iBACrBwB,qBAAqBwB,kBACrBjlF,EAAA6F,YAAYgnE,iBAAiB,iBAC7B7sE,EAAA6F,YAAYgnE,iBAAiB,8BAC7BztE,EAAAsC,UAAUA,UAAUwjF,YACpB9lF,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAChCruD,GACJ,IAAK,MACD4yC,EAAAkF,eAAe6G,MAAQ,MACvB2T,qBAAqB0B,YAAY1B,qBAAqBM,kBACtDN,qBAAqB0B,YAAY1B,qBAAqBW,kBACtDX,qBAAqB0B,YAAY1B,qBAAqBY,sBACtDZ,qBAAqB0B,YAAY1B,qBAAqBa,kBAElB,eAAhCvgB,EAAAkF,eAAepC,cACf7mE,EAAA6F,YAAYknE,iBAAiB,iBAG7B0W,qBAAqB2B,4BACrB3B,qBAAqB0B,YAAY1B,qBAAqBU,mBAG1D,MACJ,KAAK,QACDpgB,EAAAkF,eAAe6G,MAAQ,QACvB2T,qBAAqB4B,mBAEH,MAAdzlF,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkByjF,iBAE7B7B,qBAAqB0B,YAAY1B,qBAAqBE,oBAEtDF,qBAAqB0B,YAAY1B,qBAAqBG,qBAE1DH,qBAAqB0B,YAAY1B,qBAAqBc,gBACtDxgB,EAAAkF,eAAewM,WACf,MACJ,KAAK,SACD1R,EAAAkF,eAAe6G,MAAQ,SACvB2T,qBAAqB0B,YAAY1B,qBAAqBO,qBACtDP,qBAAqB0B,YAAY1B,qBAAqBc,gBAClB,eAAhCxgB,EAAAkF,eAAepC,cACf7mE,EAAA6F,YAAYknE,iBAAiB,gBAEjC,MACJ,KAAK,MACDhJ,EAAAkF,eAAe6G,MAAQ,MACvB2T,qBAAqB0B,YAAY1B,qBAAqBQ,kBACtDR,qBAAqB0B,YAAY1B,qBAAqBc,gBACxB,YAA1BxgB,EAAAkF,eAAezkE,QAAwBu/D,EAAAkF,eAAeT,SAAW,GACjExoE,EAAA6F,YAAYknE,iBAAiB,6BAEjC,MACJ,KAAK,UACDhJ,EAAAkF,eAAe6G,MAAQ,UACvB2T,qBAAqB0B,YAAY1B,qBAAqBS,sBACtDT,qBAAqB0B,YAAY1B,qBAAqBc,gBAG9DvkF,EAAA6F,YAAYgnE,iBAAiB,cAC7B7sE,EAAA6F,YAAYgnE,iBAAiB,cAEA,QAAzB9I,EAAAkF,eAAe6G,OAA4C,WAAzB/L,EAAAkF,eAAe6G,QACf,OAA9B/L,EAAAkF,eAAesc,YAAuBxhB,EAAAkF,eAAesc,YACrD9B,qBAAqBvD,OAAOx5E,UAAUC,IAAI,aAEF,MAApCo9D,EAAAkF,eAAe2b,iBACf5kF,EAAA6F,YAAYknE,iBAAiB,oBAE7B/sE,EAAA6F,YAAYknE,iBAAiB,wBAGjC0W,qBAAqBvD,OAAOx5E,UAAU6N,OAAO,aAEL,MAApCwvD,EAAAkF,eAAe2b,iBACf5kF,EAAA6F,YAAYknE,iBAAiB,oBAE7B/sE,EAAA6F,YAAYknE,iBAAiB,wBAKzC0W,qBAAqB0B,YAAY1B,qBAAqBvD,SAG3CuD,qBAAA+B,sBAAf,SAAqCr7E,GACjCs5E,qBAAqB2B,2BAA6Bj7E,GAGvCs5E,qBAAAgC,wBAAf,SAAuCt7E,GAAA,SAAAA,MAAA,IACnCs5E,qBAAqBW,iBAAiBn1E,MAAMy2E,cAAgBv7E,EAC5Ds5E,qBAAqBY,qBAAqBp1E,MAAMy2E,cAAgBv7E,EAChEs5E,qBAAqBa,iBAAiBr1E,MAAMy2E,cAAgBv7E,GAGlDs5E,qBAAAkC,WAAd,WACIvmF,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GACxCiE,qBAAqBmC,YAAYnC,qBAAqBvD,QACtDuD,qBAAqBmC,YAAYnC,qBAAqBU,qBAG3CV,qBAAAiB,WAAf,WACiD,MAAzCjB,qBAAqBW,mBACrBX,qBAAqBW,iBAAiBzE,QAAU8D,qBAAqBoC,QAGxB,MAA7CpC,qBAAqBY,uBACrBZ,qBAAqBY,qBAAqB1E,QAAU8D,qBAAqBqC,YAGhC,MAAzCrC,qBAAqBa,mBACrBb,qBAAqBa,iBAAiB3E,QAAU8D,qBAAqBsC,QAG9B,MAAvCtC,qBAAqBc,iBACrBd,qBAAqBc,eAAe5E,QAAU8D,qBAAqBuC,MAG3B,MAAxCvC,qBAAqBe,kBACrBf,qBAAqBe,gBAAgB7E,QAAU8D,qBAAqBwC,OAG7B,MAAvCxC,qBAAqBgB,iBACrBhB,qBAAqBgB,eAAe9E,QAAU8D,qBAAqByC,OAI5DzC,qBAAAxB,eAAf,WACIwB,qBAAqBmC,YAAYnC,qBAAqBW,kBACtDX,qBAAqBmC,YAAYnC,qBAAqBY,sBACtDZ,qBAAqBmC,YAAYnC,qBAAqBa,kBACtDb,qBAAqBmC,YAAYnC,qBAAqBc,iBAG3Cd,qBAAAwB,gBAAf,WACIxB,qBAAqBmC,YAAYnC,qBAAqBO,qBACtDP,qBAAqBmC,YAAYnC,qBAAqBM,kBACtDN,qBAAqBmC,YAAYnC,qBAAqBE,oBACtDF,qBAAqBmC,YAAYnC,qBAAqBG,qBACtDH,qBAAqBmC,YAAYnC,qBAAqBQ,kBACtDR,qBAAqBmC,YAAYnC,qBAAqBS,sBACtDT,qBAAqBmC,YAAYnC,qBAAqBU,qBAG3CV,qBAAA0B,YAAf,SAA2B1+E,GACR,MAAXA,IACIA,EAAQC,UAAUiO,SAAS,cAC3BlO,EAAQC,UAAU6N,OAAO,aAEzB9N,EAAQC,UAAUiO,SAAS,YAC3BlO,EAAQC,UAAU6N,OAAO,aAKtBkvE,qBAAAmC,YAAf,SAA2Bn/E,GACR,MAAXA,IACIA,EAAQC,UAAUiO,SAAS,cAC3BlO,EAAQC,UAAU6N,OAAO,aAExB9N,EAAQC,UAAUiO,SAAS,YAC5BlO,EAAQC,UAAUC,IAAI,aAKnB88E,qBAAA0C,eAAf,SAA8B1/E,GACX,MAAXA,IACKA,EAAQC,UAAUiO,SAAS,cAC5BlO,EAAQC,UAAUC,IAAI,aAEtBF,EAAQC,UAAUiO,SAAS,YAC3BlO,EAAQC,UAAU6N,OAAO,aAKtBkvE,qBAAAoC,OAAf,WACQpC,qBAAqB2B,6BAIzBrhB,EAAAkF,eAAe6G,MAAQ,GACvByP,EAAAp4D,SAASsS,KAAK,aACdgqD,qBAAqBkC,aACrB5hB,EAAAkF,eAAeoa,gBAEfI,qBAAqBgC,wBAAwB,IAC7CrlF,EAAAa,eAAemlF,eAGJ3C,qBAAAqC,WAAf,WACQrC,qBAAqB2B,6BAIzBrhB,EAAAkF,eAAe6G,MAAQ,GACvByP,EAAAp4D,SAASsS,KAAK,aACdgqD,qBAAqBkC,aACrB5hB,EAAAkF,eAAeod,aAEf5C,qBAAqBgC,wBAAwB,IAC7CrlF,EAAAa,eAAemlF,aAEf1N,EAAAqB,uBAAuBuM,kBAGZ7C,qBAAAsC,OAAf,WACQtC,qBAAqB2B,6BAIzB7F,EAAAp4D,SAASsS,KAAK,aACdgqD,qBAAqB0B,YAAY1B,qBAAqBU,oBAEtDV,qBAAqB+B,uBAAsB,GAC3C/B,qBAAqBgC,wBAAwB,QAC7CrlF,EAAAa,eAAemlF,aAEf1N,EAAAqB,uBAAuBuM,kBAGZ7C,qBAAAwC,MAAf,WACIliB,EAAAkF,eAAe6G,MAAQ,GACvByP,EAAAp4D,SAASsS,KAAK,aACdgqD,qBAAqBkC,aACrB5hB,EAAAkF,eAAeua,eAEfC,qBAAqB+B,uBAAsB,GAC3C/B,qBAAqBgC,wBAAwB,IAC7CrlF,EAAAa,eAAemlF,cAGJ3C,qBAAAyC,KAAf,WAEI3G,EAAAp4D,SAASsS,KAAK,aACdgqD,qBAAqBmC,YAAYnC,qBAAqBU,oBAEtDV,qBAAqB+B,uBAAsB,GAC3C/B,qBAAqBgC,wBAAwB,KAGlChC,qBAAAuC,KAAf,WACIjiB,EAAAkF,eAAe6G,MAAQ,GACvByP,EAAAp4D,SAASsS,KAAK,aAEdgqD,qBAAqBkC,aAEjB5hB,EAAAkF,eAAerC,UACf7C,EAAAkF,eAAesd,mBAEfxiB,EAAAkF,eAAeod,aAGnBjmF,EAAAa,eAAemlF,cAGL3C,qBAAA+C,qBAAd,WACI,GACkB,MAAd5mF,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACuC,KAAlDjC,EAAAgC,WAAWC,kBAAkBi2D,iBAE7B,OAAO,CAGX,IADA2rB,qBAAqBgD,mBACjB1iB,EAAAkF,eAAeuX,aAAal3E,OAAS,EAErC,IAAK,GADDy8C,IAAc,GAAIt9C,OAAOwO,UACpB9Z,EAAY,EAAGA,EAAI4mE,EAAAkF,eAAeuX,aAAal3E,OAAQnM,IAC5D,GAAiD,MAA7C4mE,EAAAkF,eAAeuX,aAAarjF,GAAY,QAAW,CACnD,GAAIupF,GAAwB,GAAIj+E,MAC5Bs7D,EAAAkF,eAAeuX,aAAarjF,GAAY,QAAI,UAC9C8Z,UACE0vE,EAAmBD,EAAgB3gC,CACnC4gC,GAAW,GAAmD,MAA9C5iB,EAAAkF,eAAeuX,aAAarjF,GAAa,UACzDsmF,qBAAqBgD,gBAAgBr2E,KAAK2zD,EAAAkF,eAAeuX,aAAarjF,GAAa,UAKnG,MAAIsmF,sBAAqBgD,gBAAgBn9E,OAAS,GAOxCm6E,qBAAA4B,iBAAd,WACuD,MAA/C5B,qBAAqBI,yBACrBJ,qBAAqBI,uBAAuBj9E,UAAY,IAER,MAAhD68E,qBAAqBK,0BACrBL,qBAAqBK,wBAAwBl9E,UAAY,GAE7D,KAAK,GAAIzJ,GAAY,EAAGA,EAAI,EAAGA,IACvBsmF,qBAAqBgD,gBAAgBn9E,OAAS,GAAgD,MAA3Cm6E,qBAAqBgD,gBAAgBtpF,KACxFsmF,qBAAqBmD,WACjBnD,qBAAqBgD,gBAAgBtpF,IACrC,EACAsmF,qBAAqBI,wBAEzBJ,qBAAqBmD,WACjBnD,qBAAqBgD,gBAAgBtpF,IACrC,EACAsmF,qBAAqBK,2BAMtBL,qBAAAmD,WAAf,SAA0BC,EAAkBC,EAAkBjxD,GAC1D,GACkB,MAAdj2B,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACuC,KAAlDjC,EAAAgC,WAAWC,kBAAkBi2D,iBAHjC,CAOA,GAAIivB,GAA6CxgF,SAASkX,cAAc,OACpEupE,EAA8CzgF,SAASkX,cAAc,OACrEwpE,EAAkD1gF,SAASkX,cAAc,OACzEypE,EAA2C3gF,SAASkX,cAAc,MAEtEspE,GAAWrgF,UAAUC,IAAI,gBACzBqgF,EAAYtgF,UAAUC,IAAI,kBAC1BsgF,EAAgBvgF,UAAUC,IAAI,eAC9BugF,EAASxgF,UAAUC,IAAI,eACvBugF,EAASx9E,aAAa,OAAQm9E,GAC9BK,EAASj4E,MAAM+kD,WACX,OAASp0D,EAAAgC,WAAWC,kBAAkBi2D,iBAAmB+uB,EAAW,IAAMhmF,OAAgB,QAAI,aAElGkmF,EAAWr4E,YAAYs4E,GACvBA,EAAYt4E,YAAYu4E,GACxBF,EAAWr4E,YAAYw4E,GAClBJ,IACDI,EAASvH,QAAU8D,qBAAqB0D,YAG9B,MAAVtxD,GACAA,EAAOnnB,YAAYq4E,KAIZtD,qBAAA0D,WAAf,SAA0BlqF,GAEtB,GADAsiF,EAAAp4D,SAASsS,KAAK,aACL,MAALx8B,GAAyB,MAAZA,EAAEkL,QAAkBlL,EAAEkL,OAAOyT,aAAa,QAAS,CAChE,GAAIlb,GAAkB1B,EAAA2B,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EAErE,IAAe,MAAXL,GAAmBA,EAAe,MAAa,WAAKA,EAAc,KAAG,CACrE,GAAIiI,GAAoBjI,EAAe,MAAa,UAChDkI,EAAgBlI,EAAc,KAAEmI,UAAU,GAC1Cu+E,EAAiBz+E,EAAY,UAAY1L,EAAEkL,OAAO8T,aAAa,QAAU,IAAMrT,EAC/EkvB,EAAoBvxB,SAASC,eAAe,OAMhD,IALY,MAARsxB,IACAA,EAAK7oB,MAAMC,QAAU,QAGzB9P,EAAAsC,UAAUA,UAAU2lF,WAAWpqF,EAAEkL,OAAO8T,aAAa,SACjD7c,EAAAsC,UAAUA,UAAU4lF,iBACpB,MAGJ50E,YAAW,WACP7R,OAAOC,SAASC,KAAOqmF,GACxB,QAKA3D,qBAAAsB,SAAf,WACI,GAA+B,MAA3BhhB,EAAAkF,eAAe8b,UAAgD,KAA5BhhB,EAAAkF,eAAe8b,SAElD,IAAK,GADDl1B,GAAsCtpD,SAASmzD,uBAAuB,aACjEv8D,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQiD,aAAa,OAAQq6D,EAAAkF,eAAe8b,UAG5Ct+E,EAAQ0I,iBAAiB,QAAS,SAAUlS,GACxCA,EAAEqV,uBAOPmxE,qBAAAkB,8BAAf,WACQ/kF,EAAAgC,WAAWC,oBACNjC,EAAAgC,WAAWC,kBAAkB0lF,mBAC9B9D,qBAAqB+D,oBAGpB5nF,EAAAgC,WAAWC,kBAAkB4lF,uBAC9BhE,qBAAqBiE,0BAKlBjE,qBAAA+D,kBAAf,WACQ/D,qBAAqBa,kBACrBb,qBAAqBa,iBAAiBruD,WAAWpS,YAAY4/D,qBAAqBa,iBAItF,IAAIqD,GAAUphF,SAASC,eAAe,2BAClCmhF,IACAA,EAAQ1xD,WAAWpS,YAAY8jE,IAIxBlE,qBAAAiE,sBAAf,WACQjE,qBAAqBY,sBACrBZ,qBAAqBY,qBAAqBpuD,WAAWpS,YAAY4/D,qBAAqBY,qBAI1F,IAAIsD,GAAUphF,SAASC,eAAe,2BAClCmhF,IACAA,EAAQ1xD,WAAWpS,YAAY8jE,IAIzBlE,qBAAAmE,aAAd,WACI,OAAQnE,qBAAqBvD,OAAOx5E,UAAUiO,SAAS,YAtd5C8uE,qBAAAgD,mBAEAhD,qBAAA2B,4BAAsC,EAsdzD3B,uBA1eahmF,GAAAgmF,qBAAoBA,GtCy0f3B,SAAS/lF,EAAQD,EAASF,GAE/B,YuCt1fD,IAAAyN,GAAAzN,EAAwB,GACxB6B,EAAA7B,EAAyC,GACzC4lF,EAAA5lF,EAAqC,IACrCsO,EAAAtO,EAA8B,IAC9BwC,EAAAxC,EAA4B,IAC5B6lF,EAAA7lF,EAAmC,IACnCsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAE1Bo0E,EAAAp0E,EAAmC,IACnCgiF,EAAAhiF,EAAyB,IACzB6C,EAAA7C,EAA+B,IAC/Bm7E,EAAAn7E,EAAuC,IAMnC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YACjCyuE,EAAe18E,EAAAkD,cAAcC,KAAKw5E,iBAEtC9S,EAAA,mBAAAA,mBAsnBA,MAzlBkBA,gBAAA/nE,WAAd,SAAyBmB,GAChB4mE,eAAe2J,gBAAgC,MAAdvwE,GAClCA,EACKwlF,4BAA4B78E,EAAA1K,QAAQmC,KACpC2yD,KAAK,SAACC,GACH4T,eAAe6e,wBAAwBzyB,KAH/ChzD,SAKW,SAAC0lF,GACJ9e,eAAe2J,gBAAiB,KAKlC3J,eAAAoa,cAAd,WACkC,WAA1Bpa,eAAezkE,QACfykE,eAAeV,OAAQ,EACvBnpE,EAAAsC,UAAUA,UAAUsmF,gBAAiB72D,KAAM,QAC3CiyD,EAAAE,mBAAmBC,SAAS,UAC5B13E,EAAAyB,cAAcuqE,cACY,MAAtB7sE,EAAA1K,QAAQ+B,YAA2C,MAArB4mE,eAAetrE,IAC7CqN,EAAA1K,QAAQ+B,WAAW4lF,WAAWhf,eAAetrE,IAEjDoC,EAAAoG,YAAYutE,aAEZ7nE,EAAAyB,cAAcuqE,cACY,MAAtB7sE,EAAA1K,QAAQ+B,YAA2C,MAArB4mE,eAAetrE,KAC7CqN,EAAA1K,QAAQ+B,WAAW4lF,WAAWhf,eAAetrE,IAC7CqN,EAAA1K,QAAQ+B,WACH6lF,mCAAmCl9E,EAAA1K,QAAQmC,IAAKwmE,eAAetrE,IAC/Dy3D,KAAK,SAACC,GACH4T,eAAekf,sBAAsB9yB,QAM3C4T,eAAAua,aAAd,WAC8B,MAAtBx4E,EAAA1K,QAAQ+B,YAA2C,MAArB4mE,eAAetrE,KAC7CwlF,EAAAM,qBAAqBkC,aACrBvC,EAAAE,mBAAmB8E,eACnBp9E,EAAA1K,QAAQ+B,WACHgmF,kCAAkCr9E,EAAA1K,QAAQmC,IAAKwmE,eAAetrE,IAC9Dy3D,KAAK,SAACC,GACH4T,eAAeqf,qBAAqBjzB,GACpC4T,eAAesf,2BAKjBtf,eAAAuK,qBAAd,WACI2P,EAAAM,qBAAqBviF,aACrBkiF,EAAAE,mBAAmBpiF,aACO,MAAtB8J,EAAA1K,QAAQ+B,YAA2C,MAArB4mE,eAAetrE,IAAwC,WAA1BsrE,eAAezkE,SAC1EwG,EAAA1K,QAAQ+B,WAAW4lF,WAAWhf,eAAetrE,IAC7CwlF,EAAAM,qBAAqBj2E,WAAW,UAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,UAC5Bta,eAAeV,OAAQ,EACvBnpE,EAAAsC,UAAUA,UAAU8mF,aAAcr3D,KAAM,UAIlC83C,eAAAqK,eAAd,WAC6B,MAArBrK,eAAetrE,IACfsrE,eAAewf,YAEe,WAA1Bxf,eAAezkE,OACXxE,EAAA6F,YAAY2gE,iBACZ2c,EAAAM,qBAAqBj2E,WAAW,OAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAeuR,YAEVvR,eAAeyf,UAChBtF,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAe+J,aAIlBhzE,EAAA6F,YAAY2gE,gBAKb36D,EAAAyB,cAAcuqE,eAJd5O,eAAe0f,UACfxF,EAAAM,qBAAqBkC,aACrB1c,eAAe+J,cAMvB/J,eAAewM,aAITxM,eAAA2f,iBAAd,WACI,GAAI5oF,EAAA6F,YAAY2gE,iBAAmByC,eAAerC,UAO9C,MANAwc,GAAAE,mBAAmBC,SAAS,UAC5Bta,eAAe+J,YACfhoE,EAAA1K,QAAQ+B,WAAW4lF,WAAW,MAC9B9E,EAAAM,qBAAqBj2E,WAAW,OAChCy7D,eAAewO,iBAAkB,MACjC5rE,GAAAyB,cAAcuqE,aA6BlB,IAzB8B,QAA1B5O,eAAezkE,QAA6C,QAAzBykE,eAAe6G,QAClD4I,EAAAqB,uBAAuB4L,aACvBjN,EAAAqB,uBAAuBzjB,cACvB6sB,EAAAM,qBAAqBj2E,WAAW,OAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAeuR,YAGU,WAAzBvR,eAAe6G,QACfqT,EAAAM,qBAAqBj2E,WAAW,UAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,UAC5Bta,eAAeuR,YAGU,QAAzBvR,eAAe6G,QACfsT,EAAAE,mBAAmBC,SAAS,UAC5Bta,eAAe+J,YACfhoE,EAAA1K,QAAQ+B,WAAW4lF,WAAW,MAC9B9E,EAAAM,qBAAqBj2E,WAAW,OAChCy7D,eAAewO,iBAAkB,EACjC5rE,EAAAyB,cAAcuqE,eAGW,UAAzB5O,eAAe6G,MACf,GAA8B,MAA1B7G,eAAe4f,QAAiB,CAChC,GAAInC,GAAwB,GAAIj+E,MAAKwgE,eAAe4f,QAAU,UAAU5xE,UACpE8uC,GAAc,GAAIt9C,OAAOwO,UACzB0vE,EAAmBD,EAAgB3gC,CAEnC4gC,GAAW,IACXxD,EAAAM,qBAAqBj2E,WAAW,SAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAeuR,gBAEZ2I,GAAAM,qBAAqB+C,yBAC5BrD,EAAAM,qBAAqBj2E,WAAW,SAChC3B,EAAAyB,cAAcuqE,cACduL,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAeuR,WAIM,MAAzBvR,eAAe6G,OACf7G,eAAeuR,YAITvR,eAAAwM,UAAd,WAC6B,MAArBxM,eAAetrE,IAAcwlF,EAAAM,qBAAqB+C,yBAClDvd,eAAe6f,iBACX9oF,EAAA6F,YAAY2gE,iBACZ4c,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAeuR,aAEf4I,EAAAE,mBAAmBC,SAAS,OAC5Bta,eAAe+J,eAKb/J,eAAAya,cAAd,WAC6B,MAArBza,eAAetrE,KACfqC,EAAA6F,YAAY2rE,aAAc,EAC1BvI,eAAe+J,YAC+B,MAA1CjzE,EAAAoG,YAAYgxD,aAAyB,aACqB,MAAtDp3D,EAAAoG,YAAYgxD,aAAyB,WAAY,WACjD8R,eAAeT,SAAWzoE,EAAAoG,YAAYgxD,aAAyB,WAAY,UAEvB,MAApDp3D,EAAAoG,YAAYgxD,aAAyB,WAAU,QACU,YAArDp3D,EAAAoG,YAAYgxD,aAAyB,WAAU,SAC/C8R,eAAezkE,OAASzE,EAAAoG,YAAYgxD,aAAyB,WAAU,SAInFnsD,EAAA1K,QAAQ+B,WAAW4lF,WAAW,MAC9B9E,EAAAM,qBAAqBj2E,WAAW,OAChCy7D,eAAewO,iBAAkB,IAI3BxO,eAAAsd,iBAAd,WACInD,EAAAE,mBAAmB8E,eACnBnf,eAAetrE,GAAK,KACpBsrE,eAAeV,OAAQ,EACvBnpE,EAAAsC,UAAUA,UAAUqnF,iBAAkB53D,KAAM,QAC5C83C,eAAerC,WAAY,EAC3BqC,eAAewO,iBAAkB,EACjCxO,eAAe2J,gBAAiB,EAChC3J,eAAeyK,UAAW,EAC1BzK,eAAe+f,kBAAoB,KACnC/f,eAAeggB,eAAiB,EAChChgB,eAAeigB,aAAe,EAC9BjgB,eAAekgB,cAAgB,EAC/BlgB,eAAesc,YAAa,EAC5Btc,eAAemgB,YAAc,KAC7BngB,eAAezkE,OAAS,KAEY,eAAhCykE,eAAepC,cACgB,MAA3BoC,eAAeT,UAAoBS,eAAeT,SAAW,IAC7D+W,EAAAp4D,SAASsS,KAAK,mBACd5tB,EAAAyB,cAAcuqE,cACdhsE,EAAAyB,cAAcuwE,sBAAsBxwE,EAAYioE,OAIxDrM,eAAesf,wBAGLtf,eAAAsf,qBAAd,WAC8B,MAAtBv9E,EAAA1K,QAAQ+B,YACR2I,EAAA1K,QAAQ+B,WACHwlF,4BAA4B78E,EAAA1K,QAAQmC,KACpC2yD,KAAK,SAACC,GAiBH,MAhBA4T,gBAAe6e,wBAAwBzyB,GAEd,MAArB4T,eAAetrE,IACfsrE,eAAeyK,UAAW,EACI,WAA1BzK,eAAezkE,OACfykE,eAAeuK,uBAEfvK,eAAeqK,mBAGnBvzE,EAAAoG,YAAYutE,WACZzK,eAAe+J,YACXhzE,EAAA6F,YAAY2gE,iBACZzmE,EAAAoG,YAAY2tE,WAGb,OAnBf9oE,SAqBW,SAAC+8E,GACJ9e,eAAe2J,gBAAiB,EAEhC7yE,EAAAoG,YAAYutE,WACZzK,eAAe+J,YACXhzE,EAAA6F,YAAY2gE,iBACZzmE,EAAAoG,YAAY2tE,aAMlB7K,eAAAogB,kBAAd,WACIjG,EAAAE,mBAAmB8E,eACnBnf,eAAetrE,GAAK,KACpBsrE,eAAeV,OAAQ,EACvBnpE,EAAAsC,UAAUA,UAAUqnF,iBAAkB53D,KAAM,QAC5C83C,eAAerC,WAAY,EAC3BqC,eAAewO,iBAAkB,EACjCxO,eAAeyK,UAAW,EAC1BzK,eAAe+f,kBAAoB,KACnC/f,eAAeggB,eAAiB,EAChChgB,eAAeigB,aAAe,EAC9BjgB,eAAekgB,cAAgB,EAC/BlgB,eAAesc,YAAa,EAC5Btc,eAAemgB,YAAc,KAC7BjG,EAAAM,qBAAqBj2E,WAAW,YAGrBy7D,eAAA6e,wBAAf,SAAuCzyB,GACnC4T,eAAeT,SAAW,EAC1BS,eAAe8b,SAAW,KAEV,MAAZ1vB,IACA4T,eAAe2J,gBAAiB,EAChCvd,EAASi0B,aAAe,KACK,MAAzBj0B,EAASi0B,eACuB,MAA5Bj0B,EAASi0B,aAAa3rF,KAAYsrE,eAAetrE,GAAK03D,EAASi0B,aAAa3rF,IAC1C,MAAlC03D,EAASi0B,aAAavE,WAAkB9b,eAAe8b,SAAW1vB,EAASi0B,aAAavE,UAChD,MAAxC1vB,EAASi0B,aAAaL,iBACtBhgB,eAAeggB,eAAiB5zB,EAASi0B,aAAaL,gBACf,MAAvC5zB,EAASi0B,aAAaH,gBACtBlgB,eAAekgB,cAAgB9zB,EAASi0B,aAAaH,eACf,MAAtC9zB,EAASi0B,aAAaJ,eACtBjgB,eAAeigB,aAAe7zB,EAASi0B,aAAaJ,cACZ,MAAxC7zB,EAASi0B,aAAa1E,iBACtB3b,eAAe+f,kBAAoB3zB,EAASi0B,aAAa1E,gBACxB,MAAjCvvB,EAASi0B,aAAaZ,UAAiBzf,eAAeyf,QAAUrzB,EAASi0B,aAAaZ,SACtD,MAAhCrzB,EAASi0B,aAAa9kF,SAAgBykE,eAAezkE,OAAS6wD,EAASi0B,aAAa9kF,QACnD,MAAjC6wD,EAASi0B,aAAaC,UAAiBtgB,eAAesgB,QAAUl0B,EAASi0B,aAAaC,SACrD,MAAjCl0B,EAASi0B,aAAaT,UAAiB5f,eAAe4f,QAAUxzB,EAASi0B,aAAaT,SAChD,MAAtCxzB,EAASi0B,aAAaziB,eACtBoC,eAAepC,aAAexR,EAASi0B,aAAaziB,cACZ,MAAxCxR,EAASi0B,aAAa3S,iBACtB1N,eAAe0N,eAAiBthB,EAASi0B,aAAa3S,gBACf,MAAvCthB,EAASi0B,aAAaE,gBACtBvgB,eAAesc,WAAalwB,EAASi0B,aAAaE,eACV,MAAxCn0B,EAASi0B,aAAaG,iBACtBxgB,eAAemgB,YAAc/zB,EAASi0B,aAAaG,gBAEf,MAApCxgB,eAAe+f,mBACsB,MAAjC/f,eAAeggB,gBAA0D,MAAhChgB,eAAekgB,gBACxDlgB,eAAe+f,kBAAoB/f,eAAeggB,eAAiBhgB,eAAekgB,eAIlD,MAApClgB,eAAe+f,mBAAkE,IAArC/f,eAAe+f,oBAC3D/f,eAAerC,WAAY,IAGnCqC,eAAeuX,gBACa,MAAxBnrB,EAASq0B,cACTzgB,eAAeuX,aAAenrB,EAASq0B,eAKpCzgB,eAAAkf,sBAAf,SAAqC9yB,GACjC4T,eAAeV,OAAQ,EACvBnpE,EAAAsC,UAAUA,UAAUsmF,gBAAiB72D,KAAM,QAC3C83C,eAAezkE,OAAS,SACxBzE,EAAAoG,YAAYutE,WACZ0P,EAAAE,mBAAmBC,SAAS,WAGjBta,eAAAqf,qBAAf,SAAoCjzB,GAChC4T,eAAetrE,GAAK,KACpBsrE,eAAeyK,UAAW,EAC1BzK,eAAe+f,kBAAoB,KACnC/f,eAAeggB,eAAiB,EAChChgB,eAAeigB,aAAe,EAC9BjgB,eAAekgB,cAAgB,EAC/BlgB,eAAesc,YAAa,EAC5Btc,eAAemgB,YAAc,MAGnBngB,eAAA6b,MAAd,WACI,GAAI7zC,GAAc,EAIlB,OAH8B,OAA1Bg4B,eAAe4f,UACf53C,EAAMg4B,eAAe4f,SAElB53C,GAGGg4B,eAAA4b,cAAd,WACI,GAAI5zC,GAAc,GAIlB,OAHqC,OAAjCg4B,eAAeggB,iBACfh4C,EAAMg4B,eAAeggB,eAAe39E,YAEjC2lC,GAGGg4B,eAAA2b,eAAd,WACI,GAAI3zC,GAAc,GAiBlB,OAfwC,OAApCg4B,eAAe+f,mBACsB,MAAjC/f,eAAeggB,gBAA0D,MAAhChgB,eAAekgB,gBACxDlgB,eAAe+f,kBAAoB/f,eAAeggB,eAAiBhgB,eAAekgB,eAIlD,MAApClgB,eAAe+f,oBAGX/3C,EADAg4B,eAAetrE,SAAasrE,eAAerC,UACrC,IAEAqC,eAAe+f,kBAAkB19E,YAIxC2lC,GAGGg4B,eAAA+b,UAAd,WACI,GAAI/zC,GAAc,EAIlB,OAH+B,OAA3Bg4B,eAAe8b,WACf9zC,EAAM,YAAcg4B,eAAe8b,SAAW,qBAAuB9b,eAAe8b,SAAW,QAE5F9zC,GAGGg4B,eAAAyG,IAAd,WACI,GAAIz+B,GAAc,EAOlB,OAN+B,OAA3Bg4B,eAAeT,UAAoBS,eAAeT,SAAW,IAC7Dv3B,EACIzxC,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAakL,eAAeT,SAASl9D,YACpE,IACAtL,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,eAElCliB,GAGGg4B,eAAA0f,QAAd,YAC6B,MAArB1f,eAAetrE,IAAesrE,eAAeV,SAG7CU,eAAeV,QACfvoE,EAAA6F,YAAY4+D,kBAAoB,KAEU,MAA1C1kE,EAAAoG,YAAYgxD,aAAyB,aAC0B,MAA3Dp3D,EAAAoG,YAAYgxD,aAAyB,WAAiB,gBACtD8R,eAAekgB,cAAgBppF,EAAAoG,YAAYgxD,aAAyB,WAAiB,eAE/B,MAAtDp3D,EAAAoG,YAAYgxD,aAAyB,WAAY,WACjD8R,eAAeT,SAAWzoE,EAAAoG,YAAYgxD,aAAyB,WAAY,UAGrB,MAAtDp3D,EAAAoG,YAAYgxD,aAAyB,WAAY,SACjD8R,eAAe+f,kBAAoBjpF,EAAAoG,YAAYgxD,aAAyB,WAAkB,eAErD,MAAjC8R,eAAeggB,gBAA0D,MAAhChgB,eAAekgB,gBACxDlgB,eAAe+f,kBAAoB/f,eAAeggB,eAAiBhgB,eAAekgB,gBAI9FnpF,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASk9D,sBAAuBgG,eAAe2b,kBACpF5kF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk9D,sBAAuBgG,eAAe2b,kBACrC,MAApC3b,eAAe+f,mBAAkE,IAArC/f,eAAe+f,oBAC3D/f,eAAerC,WAAY,EAC3B5mE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,OAIxBsE,eAAAwf,UAAf,WACI,GAA8B,MAA1Bxf,eAAe4f,QAAiB,CAChC,GAAInC,GAAwB,GAAIj+E,MAAKwgE,eAAe4f,QAAU,UAAU5xE,UACpE8uC,GAAc,GAAIt9C,OAAOwO,UACzB0vE,EAAmBD,EAAgB3gC,EACnC4jC,EAAextE,KAAKC,MAAMuqE,EAAW,OACrCjc,EAAgBvuD,KAAKC,MAAOuqE,EAAW,MAAyB,MAChE/b,EAAkBzuD,KAAKC,MAAOuqE,EAAW,KAAoB,KAC7D7b,EAAkB3uD,KAAKC,MAAOuqE,EAAW,IAAe,IAExDA,GAAW,GACX1d,eAAetrE,GAAK,KACpBsrE,eAAeyK,UAAW,EAC1BzK,eAAe+f,kBAAoB,KACnC/f,eAAeggB,eAAiB,EAChChgB,eAAeigB,aAAe,EAC9BjgB,eAAekgB,cAAgB,EAC/BlgB,eAAesc,YAAa,EAEC,QAAzBtc,eAAe6G,OAA4C,UAAzB7G,eAAe6G,QAC5CqT,EAAAM,qBAAqB+C,wBAMtBrD,EAAAM,qBAAqBkC,aACrB1c,eAAeod,eANflD,EAAAM,qBAAqBkC,aACrBvC,EAAAE,mBAAmB8E,eACnBnf,eAAe6G,MAAQ,UACvB7G,eAAeod,iBAOnBsD,EAAO,GACP3pF,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASs9D,kBAAmBsmB,EAAO,KACxE3pF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs9D,kBAAmBsmB,EAAO,MAC1Djf,EAAQ,GACf1qE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASs9D,kBAAmBqH,EAAQ,IAAME,EAAU,KACzF5qE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs9D,kBAAmBqH,EAAQ,IAAME,EAAU,MAC3EA,EAAU,IACjB5qE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASs9D,kBAAmBuH,EAAU,IAAME,EAAU,KAC3F9qE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs9D,kBAAmBuH,EAAU,IAAME,EAAU,MAGxFp4D,WAAW,WACPu2D,eAAewf,aAChB,QAKAxf,eAAA6f,eAAf,WACS3F,EAAAM,qBAAqB+C,uBAKtB9zE,WAAW,WACPu2D,eAAe6f,kBAChB,MANH3F,EAAAM,qBAAqBkC,aACrBvC,EAAAE,mBAAmB8E,eACnBnf,eAAeod,eAQTpd,eAAA2gB,kBAAd,WAEI,MAAyB,OAArB3gB,eAAetrE,IAAcsrE,eAAe+f,kBAAoB,GAO1D/f,eAAA4gB,qBAAd,SAAmC9yE,GAEN,MAArBkyD,eAAetrE,IAAesrE,eAAetrE,OAAoC,UAAzBsrE,eAAezkE,OAEnEuS,EAAQ,IACJkyD,eAAe6gB,oBACf7gB,eAAe8gB,kBAGiB,MAA5BhqF,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAahjE,SAAWs3E,EAAa5uE,UACrFlN,EAAA6F,YAAYmH,UAAW,GAE3Bi8D,eAAe+f,kBAAoBjyE,IAGpCkyD,eAAetrE,UAClBoZ,EAAQ,EACJkyD,eAAe+f,kBAAoB,GACnC/f,eAAerC,WAAY,EAC3BqC,eAAe+f,kBAAoBjyE,EACnC/W,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASk9D,sBAAuBlsD,EAAMzL,YAC3EtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk9D,sBAAuBlsD,EAAMzL,aAGpE29D,eAAe+f,kBAAoBjyE,EAEtB,IAAVA,GAEHkyD,eAAe+f,kBAAoB,IACnC/f,eAAe+f,kBAAoBjyE,EACnC/W,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASk9D,sBAAuBlsD,EAAMzL,YAC3EtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk9D,sBAAuBlsD,EAAMzL,YAEpE29D,eAAerC,WAAY,EACvB5mE,EAAA6F,YAAY2gE,kBAAoBxmE,EAAA6F,YAAYmH,UAAYi8D,eAAe+gB,UACvE/gB,eAAeya,gBAEf1jF,EAAA6F,YAAYmH,UAAW,KAO5Bi8D,eAAA6gB,kBAAf,WACI,OACK1G,EAAAE,mBAAmB2G,cACpBjqF,EAAA6F,YAAY2gE,kBACXxmE,EAAA6F,YAAYmH,WACZ2kE,EAAA+F,mBAAmBkH;EAId3V,eAAA8gB,eAAd,WACI/pF,EAAA6F,YAAYmH,UAAW,EACvBnB,EAAAyB,cAAcuqE,cACT5O,eAAeyK,WAChBzK,eAAeyK,UAAW,EAC1B3zE,EAAAoG,YAAY9D,WACPwlF,4BAA4B78E,EAAA1K,QAAQmC,KACpC2yD,KAAK,SAACC,GACH4T,eAAe6e,wBAAwBzyB,GACvC4T,eAAeuK,yBAJvBzzE,SAMW,SAACgoF,GACJ9e,eAAeyK,UAAW,EAC1BzK,eAAe2J,gBAAiB,EAChC/mE,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,UAK7CrM,eAAA+J,UAAd,WACI/J,eAAe+gB,WAAY,EAC3B7G,EAAAM,qBAAqBkC,aACrBvC,EAAAE,mBAAmB4G,qBAGTjhB,eAAAuR,SAAd,WACI,IAAK7I,EAAA+F,mBAAmBkH,OAAQ,CAG5B,GAFA3V,eAAe+gB,WAAY,EAEvB/gB,eAAe2gB,oBAEf,WADA3gB,gBAAe8gB,gBAKnB,IAAI9gB,eAAeV,OAAwC,cAA/BU,eAAepC,aACvC,MAGJuc,GAAAE,mBAAmB6G,qBAIblhB,eAAAod,WAAd,WACQpd,eAAeyK,UACf3zE,EAAAoG,YAAYutE,WACZzK,eAAeyK,UAAW,GAEqB,GAA/C7nE,EAAAyB,cAAcwwE,uBAAuBx0E,QACrCuC,EAAAyB,cAAcwwE,uBAAuBv1D,QAAQlb,EAAYioE,WAEzDzpE,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,MAE/Cl1E,EAAAa,eAAemlF,cAnnBLnd,eAAAV,OAAiB,EACjBU,eAAArC,WAAqB,EAQrBqC,eAAAyf,SAAmB,EAQnBzf,eAAAuX,gBAGAvX,eAAA2J,gBAA0B,EAE1B3J,eAAA6G,MAAgB,GAChB7G,eAAAwO,iBAA2B,EAE1BxO,eAAAyK,UAAoB,EACpBzK,eAAA+gB,WAAqB,EA2lBxC/gB,iBAtnBaxrE,GAAAwrE,eAAcA,GvCs5gBrB,SAASvrE,EAAQD,EAASF,GAE/B,YwC96gBD,IAAA6B,GAAA7B,EAA8B,GAC9B4lF,EAAA5lF,EAAqC,IACrCyC,EAAAzC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBsO,EAAAtO,EAA8B,IAC9B2C,EAAA3C,EAAuC,IACvCyN,EAAAzN,EAAwB,GACxBwmE,EAAAxmE,EAA+B,IAC/B6C,EAAA7C,EAA+B,IAI3B8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAErCi2E,EAAA,mBAAAA,uBAkNA,MA9MkBA,oBAAApiF,WAAd,WACIoiF,mBAAmB8G,QAAU7jF,SAASC,eAAe,cACrD88E,mBAAmB+G,WAAa9jF,SAASC,eAAe,iBACxD88E,mBAAmBoB,cAITpB,mBAAAC,SAAd,SAAuBpyD,GAEnB,OADAmyD,mBAAmB8E,eACXj3D,GACJ,IAAK,MACDnxB,EAAA6F,YAAYknE,iBAAiB,UAAW,SACxC/sE,EAAA6F,YAAYknE,iBAAiB,eAAgB,QAC7CuW,mBAAmB6B,YAAY7B,mBAAmB8G,SAClDhqF,EAAAa,eAAemlF,YACf,MACJ,KAAK,SACDpmF,EAAA6F,YAAYknE,iBAAiB,UAAW,SACxC/sE,EAAA6F,YAAYknE,iBAAiB,eAAgB,QAC7CuW,mBAAmB6B,YAAY7B,mBAAmB+G,YACd,eAAhCtmB,EAAAkF,eAAepC,cACsB,MAAjCyc,mBAAmB+G,YACnB/G,mBAAmB+G,WAAW3jF,UAAUC,IAAI,aAGpDvG,EAAAa,eAAemlF,aAGvB9C,mBAAmBgH,oBAMRhH,mBAAAgH,iBAAf,WACgD,eAAxCpqF,EAAAwC,uBAAuBmkE,aACc,MAAjCyc,mBAAmB+G,YACnB/G,mBAAmB+G,WAAW3jF,UAAUC,IAAI,iBAGX,MAAjC28E,mBAAmB+G,YACnB/G,mBAAmB+G,WAAW3jF,UAAU6N,OAAO,kBAK5C+uE,mBAAAoB,WAAf,WACsC,MAA9BpB,mBAAmB8G,UACnB9G,mBAAmB8G,QAAQzK,QAAU2D,mBAAmBiH,gBAAgB94E,KACpErU,KACAkmF,mBAAmBkH,QAIU,MAAjClH,mBAAmB+G,aACnB/G,mBAAmB+G,WAAW1K,QAAU2D,mBAAmBiH,gBAAgB94E,KACvErU,KACAkmF,mBAAmBmH,YAKjBnH,mBAAA8E,aAAd,WACIpoF,EAAA6F,YAAYgnE,iBAAiB,WAC7ByW,mBAAmBsC,YAAYtC,mBAAmB8G,SAClD9G,mBAAmBsC,YAAYtC,mBAAmB+G,aAGxC/G,mBAAA4G,kBAAd,WAEsC,MAA9B5G,mBAAmB8G,SAClB9G,mBAAmB8G,QAAQ1jF,UAAUiO,SAAS,YAC9C2uE,mBAAmB8G,QAAQ1jF,UAAUiO,SAAS,cAE/C2uE,mBAAmB8G,QAAQ1jF,UAAUC,IAAI,aAGR,MAAjC28E,mBAAmB+G,YAClB/G,mBAAmB+G,WAAW3jF,UAAUiO,SAAS,YACjD2uE,mBAAmB+G,WAAW3jF,UAAUiO,SAAS,cAElD2uE,mBAAmB+G,WAAW3jF,UAAUC,IAAI,cAItC28E,mBAAA6G,iBAAd,WACQnqF,EAAA6F,YAAYmH,WAAagP,WAAWhc,EAAA6F,YAAY0+D,eAAiB,GAAmC,MAA9BvkE,EAAA6F,YAAY0+D,iBAIpD,MAA9B+e,mBAAmB8G,UAClB9G,mBAAmB8G,QAAQ1jF,UAAUiO,SAAS,YAC/C2uE,mBAAmB8G,QAAQ1jF,UAAUiO,SAAS,cAE9C2uE,mBAAmB8G,QAAQ1jF,UAAU6N,OAAO,aAGX,MAAjC+uE,mBAAmB+G,aAClB/G,mBAAmB+G,WAAW3jF,UAAUiO,SAAS,YAClD2uE,mBAAmB+G,WAAW3jF,UAAUiO,SAAS,cAEjD2uE,mBAAmB+G,WAAW3jF,UAAU6N,OAAO,aAEnDnU,EAAAa,eAAemlF,eAGJ9C,mBAAA6B,YAAf,SAA2B1+E,GACR,MAAXA,IACIA,EAAQC,UAAUiO,SAAS,cAC3BlO,EAAQC,UAAU6N,OAAO,aAEzB9N,EAAQC,UAAUiO,SAAS,YAC3BlO,EAAQC,UAAU6N,OAAO,WAES,QAAlC9N,EAAQwV,aAAa,WACrBxV,EAAQiD,aAAa,SAAU,UAK5B45E,mBAAAsC,YAAf,SAA2Bn/E,GACR,MAAXA,IACIA,EAAQC,UAAUiO,SAAS,cAC3BlO,EAAQC,UAAU6N,OAAO,aAExB9N,EAAQC,UAAUiO,SAAS,YAC5BlO,EAAQC,UAAUC,IAAI,WAEY,SAAlCF,EAAQwV,aAAa,WACrBxV,EAAQiD,aAAa,SAAU,WAK5B45E,mBAAA6C,eAAf,SAA8B1/E,GACX,MAAXA,IACKA,EAAQC,UAAUiO,SAAS,cAC5BlO,EAAQC,UAAUC,IAAI,aAEtBF,EAAQC,UAAUiO,SAAS,YAC3BlO,EAAQC,UAAU6N,OAAO,WAES,QAAlC9N,EAAQwV,aAAa,WACrBxV,EAAQiD,aAAa,SAAU,UAK7B45E,mBAAA2G,WAAd,WACI,GAAIS,IAAiB,CAOrB,OANkC,OAA9BpH,mBAAmB8G,SAAmB9G,mBAAmB8G,QAAQ1jF,UAAUiO,SAAS,eACpF+1E,GAAQ,GAEyB,MAAjCpH,mBAAmB+G,YAAsB/G,mBAAmB+G,WAAW3jF,UAAUiO,SAAS,eAC1F+1E,GAAQ,GAELA,GAGIpH,mBAAAiH,gBAAf,SAA+Bt5D,EAAsBjf,GACjD,GAAIvL,GAAmBuL,EAAM7J,MAExBm7E,oBAAmB2G,cAA2B,MAAXxjF,IACpCA,EAAQC,UAAUC,IAAI,YAEtBqE,EAAA1K,QAAQ+B,WACHwlF,4BAA4B78E,EAAA1K,QAAQmC,KACpC2yD,KAAK,SAACC,GACa,MAAZA,IAC6B,MAAzBA,EAASi0B,cAAgD,MAAxBj0B,EAASq0B,aAC1Cz4D,IAKJ/wB,EAAAwC,uBAAuB2mF,sBAVnCr+E,WAaa,WACLvE,EAAQC,UAAU6N,OAAO,gBAK1B+uE,mBAAAkH,MAAf,WACSlH,mBAAmB2G,eACpB1K,EAAAp4D,SAASsS,KAAK,aACW,MAArBsqC,EAAAkF,eAAetrE,GACfwlF,EAAAM,qBAAqBj2E,WAAW,OAE5Bu2D,EAAAkF,eAAeuX,aAAal3E,OAAS,GACrC65E,EAAAM,qBAAqBj2E,WAAW,SAGxC3B,EAAAyB,cAAcuqE,gBAIPyL,mBAAAmH,SAAf,YACSnH,mBAAmB2G,cAAgB32E,SAASywD,EAAAkF,eAAe2b,kBAAoB,IAChFrF,EAAAp4D,SAASsS,KAAK,aACd0pD,EAAAM,qBAAqBj2E,WAAW,UAChC3B,EAAAyB,cAAcuqE,cACdhsE,EAAAyB,cAAcuwE,sBAAsBxwE,EAAYioE,QAG5DgO,qBAlNa7lF,GAAA6lF,mBAAkBA,GxCqmhBzB,SAAS5lF,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GyC1nhBjEna,EAAAzB,EAAwC,GAExCic,EAAAjc,EAA+B,IAC/BotF,EAAAptF,EAA6B,IAG7B4pB,EAAA,mBAAAA,aAqEA,MAlEWA,UAAAyjE,cAAP,SAAqBC,GACjB1jE,SAAS2jE,MAAMD,EAAKltF,IAAMktF,GAG9B1jE,SAAAjpB,UAAAa,OAAA,SAAOmc,GACHyvE,EAAAI,aAAa75B,cAAch2C,EAAMA,EAAKI,WAGnC6L,SAAA5P,UAAP,SAAiBszE,GACb,GAA4B,MAAxB1jE,SAAS2jE,MAAMD,GACf,MAAO1jE,UAAS2jE,MAAMD,GAAMtzE,aAI7B4P,SAAAsS,KAAP,SAAYoxD,EAAcG,EAAoB1xB,GAApB,SAAA0xB,MAAA,GAAoB,SAAA1xB,OAAA,GACd,MAAxBnyC,SAAS2jE,MAAMD,IACf1jE,SAAS2jE,MAAMD,GAAMpxD,MAAK,EAAOuxD,EAAQ1xB,IAI1CnyC,SAAA8jE,KAAP,SAAYJ,EAAcG,EAAoB1xB,GAApB,SAAA0xB,MAAA,GAAoB,SAAA1xB,OAAA,GACd,MAAxBnyC,SAAS2jE,MAAMD,IACf1jE,SAAS2jE,MAAMD,GAAMpxD,MAAK,EAAMuxD,EAAQ1xB,IAIzCnyC,SAAArU,KAAP,SAAY+3E,EAAcK,GAAA,SAAAA,MAAA,GACM,MAAxB/jE,SAAS2jE,MAAMD,IACf1jE,SAAS2jE,MAAMD,GAAM/3E,KAAKo4E,IAI3B/jE,SAAAgkE,QAAP,SAAeD,GACX,GADW,SAAAA,MAAA,GACW,MAAlB/jE,SAAS2jE,MACT,IAAK,GAAID,KAAQ1jE,UAAS2jE,MACtB3jE,SAAS2jE,MAAMD,GAAM/3E,KAAKo4E,IAK/B/jE,SAAAikE,eAAP,SAAsBC,EAAeC,GACjC,GADiC,SAAAA,OAAA,GACX,MAAlBnkE,SAAS2jE,MACT,IAAK,GAAID,KAAQ1jE,UAAS2jE,MACtB3jE,SAAS2jE,MAAMD,GAAMU,YAAYF,EAAOC,IAK7CnkE,SAAAqkE,UAAP,SAAiBX,EAAc1lF,GACC,MAAxBgiB,SAAS2jE,MAAMD,IACf1jE,SAAS2jE,MAAMD,GAAMW,UAAUrmF,IAIhCgiB,SAAAskE,cAAP,SAAqBZ,GACW,MAAxB1jE,SAAS2jE,MAAMD,IACf1jE,SAAS2jE,MAAMD,GAAMY,iBAItBtkE,SAAA3R,IAAP,SAAWC,KA9DJ0R,SAAA2jE,SAFX3jE,SAAAnO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeoD,WzC+rhBxBA,YyC9rhBK1pB,GAAA0pB,SAAQA,GzCsshBf,SAASzpB,EAAQD,EAASF,GAE/B,Y0C9shBD,IAAAyB,GAAAzB,EAA+C,GAC/Cic,EAAAjc,EAA+B,IAC/BgiF,EAAAhiF,EAAyB,IAMzBwtF,EAAA,mBAAAA,iBAuDA,MA7CmBA,cAAAv1E,IAAf,SAAmBkU,KAaZqhE,aAAA75B,cAAP,SAAqBh2C,EAAewwE,GAChC,GADgC,SAAAA,MAAA,IACpB,MAARxwE,EAGA,IAFA,GAAIwL,GAAgBxL,EAAKyL,kBAEV,MAARD,GAAc,CACjB,GAAIkoD,GAAc,EASlB,IARIloD,EAAK9K,aAAa,WAClBgzD,EAAMloD,EAAKzK,aAAa,UAOhB,KAAR2yD,EACA,GAAI5vE,EAAAsyD,uBAAuBC,SAASqd,EAAKp1D,EAAAuK,eAAeoD,UAAW,CAC/D,GAAI1gB,GAAezH,EAAAsyD,uBAAuBjwD,IAAIutE,EAC9Cmc,cAAaY,UAAUjlE,EAAKpL,UAAY7U,EACxCA,EAAQ1H,OAAO2nB,OACZ,IAAI1nB,EAAAsyD,uBAAuBC,SAASqd,EAAKp1D,EAAAuK,eAAeqD,MAAO,CAClE,GAAI3gB,GAAezH,EAAAsyD,uBAAuBjwD,IAAIutE,EAC9CnoE,GAAQ1H,OAAO2nB,GAEE,KAAbglE,GACAnM,EAAAp4D,SAASyjE,cAAcnkF,GAInCigB,EAAOA,EAAKG,qBAjDjBkkE,aAAAY,aAqDXZ,eAvDattF,GAAAstF,aAAYA,G1C0vhBnB,SAASrtF,EAAQD,EAASF,GAE/B,Y2CpwhBD,IAAAyB,GAAAzB,EAAoC,GACpC4C,EAAA5C,EAAwB,GACxB6B,EAAA7B,EAA0B,GAC1Bm7E,EAAAn7E,EAAuC,IAEvC0D,EAAA,WA6CI,QAAAA,kBACI7D,KAAK+qE,OAAS,KACd/qE,KAAKwuF,MAAQ,KACbxuF,KAAKyuF,MAAQ,KACbzuF,KAAK0uF,UAAY,EAEjB1uF,KAAK2uF,cAyPb,MAlPW9qF,gBAAA/C,UAAAkoF,WAAP,WACSnlF,eAAe+qF,SAID,MAAf5uF,KAAK+qE,QAIS,MAAd/qE,KAAKwuF,QAITxuF,KAAKoY,IAAI,cACLpY,KAAK6uF,iBACL1lF,SAASkI,KAAK/H,UAAUC,IAAI,0BAC5B1F,eAAeirF,WAAa54E,SAASzS,OAAO0S,iBAAiBnW,KAAKwuF,OAAO7nF,SAEzEwC,SAASkI,KAAK/H,UAAU6N,OAAO,0BAC/BtT,eAAeirF,WAAa,GAEhC9uF,KAAK+uF,mBACLhsF,EAAAuF,QAAQqO,eAAiB9S,eAAeirF,aAOpCjrF,eAAA/C,UAAAiuF,iBAAR,cAAAv1E,GAAAxZ,KACQgvF,EAAW7lF,SAAS8lF,cAAc,qBAEtC,IAAIprF,eAAeqrF,WAAY,CAC3B,GAAIC,GAAehmF,SAAS8lF,cAAc,mBACtCG,EAC0C,MAA1CjmF,SAASC,eAAe,gBAClB3F,OAAO0S,iBAAiBhN,SAASC,eAAe,gBAAgBimF,gBAEtEC,EACsC,MAAtCnmF,SAAS8lF,cAAc,aACjBxrF,OAAO0S,iBAAiBhN,SAAS8lF,cAAc,aAAatoF,KAEtD,OAAZqoF,GAAoC,MAAhBG,GAAwBC,GAA0BE,GACtEH,EAAa7iF,aACT,QACA,oBACI8iF,EACA,qEACAE,EACA,6DAERN,EAAS1lF,UAAU6N,OAAO,YAE1B7B,WAAW,WACPkE,EAAKu1E,oBACNlrF,eAAe0rF,2BAGtBP,GAAS1lF,UAAUC,IAAI,YAIvB1F,eAAA/C,UAAA6tF,YAAR,WACI,GAAMj0D,GAAOvxB,SAASC,eAAevF,eAAe2rF,cAExC,OAAR90D,IAOJ16B,KAAK+qE,OAAS/qE,KAAKqgB,cAAc,MAAO,mBAAoB,WAC5DrgB,KAAKyvF,QAAUzvF,KAAKqgB,cAAc,MAAO,oBACzCrgB,KAAKwuF,MAAQxuF,KAAKqgB,cAAc,MAAO,kBAAmB,iBAC1DrgB,KAAKyuF,MAAQzuF,KAAKqgB,cAAc,MAAO,uBAEvCrgB,KAAK0vF,yBAAyB1vF,KAAKyvF,SACnCzvF,KAAK2vF,uBAAuB3vF,KAAKyuF,OAEjCzuF,KAAK+qE,OAAOz5D,YAAYtR,KAAKyvF,SAC7BzvF,KAAK+qE,OAAOz5D,YAAYtR,KAAKwuF,OAC7BxuF,KAAKwuF,MAAMl9E,YAAYtR,KAAKyuF,OAE5B/zD,EAAKppB,YAAYtR,KAAK+qE,UAGlBlnE,eAAA/C,UAAA4uF,yBAAR,SAAiCE,GACR,MAAjBA,IAIJA,EAAct+E,YAAYtR,KAAKqgB,cAAc,MAAO,qBAAsB,4BAC1EuvE,EAAct+E,YAAYtR,KAAKqgB,cAAc,MAAO,oBAAqB,8BAGrExc,eAAA/C,UAAA6uF,uBAAR,SAA+BE,GAC3B,GAAmB,MAAfA,EAAJ,CAIAA,EAAYv+E,YAAYtR,KAAKqgB,cAAc,MAAO,kBAAmB,yBACrEwvE,EAAYv+E,YAAYtR,KAAKqgB,cAAc,MAAO,iBAAkB,wBAEpE,KAAK,GAAItgB,GAAI,EAAGA,EAAI8vF,EAAY1yE,SAASjR,OAAQnM,IAAK,CAClD,GAAI86B,GAAQg1D,EAAY1yE,SAASpd,EACjC86B,GAAM9oB,iBAAiB,QAAS,SAAC6C,GAC7B0mE,EAAAqB,uBAAuBzjB,mBAK3Br1D,eAAA/C,UAAAuf,cAAR,SAAsB0T,EAAcxzB,EAAiB+I,GAAjB,SAAA/I,MAAA,IAAiB,SAAA+I,SACjD,IAAMixD,GAAOpxD,SAASkX,cAAc0T,EAMpC,IAJKnyB,EAAA4I,YAAYC,cAAclK,KAC3Bg6D,EAAKh6D,GAAKA,GAGV+I,EAAU4C,OAAS,EACnB,IAAK,GAAInM,GAAI,EAAGA,EAAIuJ,EAAU4C,OAAQnM,IAClCw6D,EAAKjxD,UAAUC,IAAID,EAAUvJ,GAIrC,OAAOw6D,IAGJ12D,eAAA/C,UAAAgvF,YAAP,SAAmBC,GAAA,SAAAA,UACfA,EAAeA,MAAqB/vF,KAAK0uF,UAAYqB,CAErD,IAAMp4E,GAAa5U,EAAAuF,QAAQqP,aACrBq4E,EAAQr4E,EACR9T,eAAeosF,qBAAuBF,EACtClsF,eAAeqsF,sBAAwBH,CAEzC/vF,MAAKmwF,iBAAmBH,IACxBhwF,KAAKmwF,gBAAkBH,EACvBhuF,EAAAsC,UAAUA,UAAU8rF,oBAAoBJ,GAG5C,IAAMK,GAAcrwF,KAAKqwF,YAAYN,EACrC/vF,MAAKyuF,MAAMnlF,UAAU6N,OACjB,wBAA0BnX,KAAK0uF,UAC/B,wBAA0B1uF,KAAK0uF,UAAY,MAE/C1uF,KAAKyuF,MAAMnlF,UAAUC,IACjB,wBAA0BwmF,GAAgBM,GAAexsF,eAAeqrF,WAAa,KAAO,KAEhGlvF,KAAK0uF,UAAYqB,GAGblsF,eAAA/C,UAAAuvF,YAAR,SAAoB12E,GAChB,GAAa,GAATA,GAAcA,EAAQ,EACtB,OAAO,CAGX,IAAM9H,GAAQpO,OAAO0S,iBAAiBnW,KAAKyuF,OACrC9nF,EAAQuP,SAASrE,EAAMlL,OACvBC,EAASsP,SAASrE,EAAMjL,OAE9B,OAAgB,IAATD,GAAaC,EAASD,EAAQ,KAGjC9C,eAAA/C,UAAA+tF,cAAR,WACI,GAAkB,MAAd7uF,KAAKwuF,MACL,OAAO,CAGX,IAAkB,MAAdxuF,KAAKyuF,MACL,OAAO,CAOX,KAAK,GAJDtnF,IAAS,EACTwS,EAAQ,EAENwD,EAAWnd,KAAKyuF,MAAMtxE,SACnBpd,EAAI,EAAGA,EAAIod,EAASjR,OAAQnM,IAAK,CACtC,GAAM86B,GAAQ1d,EAASpd,EACvB,IAAa,MAAT86B,EAAe,CACf,GAAMy1D,GAAez1D,EAAM1d,QAEX,mBAAZ0d,EAAMt6B,KACNsD,eAAeqrF,WAAaoB,EAAapkF,OAAS,EAGtD,KAAK,GAAIy2B,GAAI,EAAGA,EAAI2tD,EAAapkF,OAAQy2B,IAAK,CAC1C,GAAM4tD,GAAYD,EAAa3tD,EAES,SAApC4tD,EAAU1xE,aAAa,YACvB1X,GAAS,EACTwS,OAOhB,MADA3Z,MAAK8vF,YAAYn2E,GACVxS,GAGDtD,eAAA/C,UAAAsX,IAAV,SAAcC,KAUCxU,eAAAmoE,YAAf,WAKI,MAJ+B,OAA3BnoE,eAAeyL,WACfzL,eAAeyL,SAAW,GAAIzL,iBAG3BA,eAAeyL,UAGZzL,eAAAC,WAAd,WACID,eAAemoE,eAGLnoE,eAAA6xD,KAAd,WACI7xD,eAAe+qF,SAAU,EACzB/qF,eAAemlF,aAEfjmF,EAAAuF,QAAQgM,QAAQJ,GAAGnR,EAAAuF,QAAQoP,YAAa,WACpC7T,eAAemoE,cAAc8jB,cAC7BjsF,eAAemoE,cAAcgd,eAIjC1zE,WAAW,WACPzR,eAAemlF,cAChBnlF,eAAe0rF,wBAGR1rF,eAAAmlF,WAAd,WACInlF,eAAemoE,cAAcgd,aAC7BjmF,EAAAuF,QAAQC,YAAW,GAAO,IA/Rf1E,eAAA2rF,cAAwB,OAExB3rF,eAAA0rF,sBAAgC,IAEhC1rF,eAAAqsF,sBAAsD,WAAtBzsF,OAAgB,QAAiB,EAAI,EAErEI,eAAAosF,qBAA+B,EAM/BpsF,eAAAirF,WAAqB,EAErBjrF,eAAA+qF,SAAmB,EAEnB/qF,eAAAqrF,YAAsB,EAiRzCrrF,iBA5SaxD,GAAAwD,eAAcA,G3Cq9hBrB,SAASvD,EAAQD,EAASF,GAE/B,Y4C59hBD,IAAAiC,GAAAjC,EAA0B,IAC1BqC,EAAArC,EAA2B,GAC3BomE,EAAApmE,EAA2B,IAC3ByC,EAAAzC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzB6B,EAAA7B,EAA8B,GAC9BsO,EAAAtO,EAA8B,IAC9BwmE,EAAAxmE,EAA+B,IAC/BkT,EAAAlT,EAAwB,IACxB4lF,EAAA5lF,EAAqC,IAKrCw8E,EAAA,mBAAAA,2BA0JA,MAhJkBA,wBAAAtjB,WAAd,WACI,GACKr5D,KAAKwwF,+BACLxwF,KAAKywF,YAAezwF,KAAK0wF,iBAC1B3K,EAAAM,qBAAqBmE,eAHzB,CAQA,GAAMpM,GACFh8E,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa3gE,KAAK2wF,YAAYziF,YAC7D,IACAtL,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,cAC/BruD,EAAUtF,EAAAsH,UAAUC,OAAO,iBAAkBy0E,GAE7ChD,GACFla,KAAMx5D,EACNqxE,UAEQhlD,KAAM,UACNmtC,KAAM9+D,EAAAsH,UAAUC,OAAO,YACvBmuD,WAAY91D,EAAAkD,cAAcC,KAAK8K,YAAYioE,OAGnD7nE,SAAS,EAGb7N,GAAAgC,WAAWsD,QAAQsI,WAAW1I,GAAS,EAAO,KAAM,KAAM,KAAM0zE,GAChEp7E,KAAKywF,YAAa,EAClBzwF,KAAK4wF,WAAY,IAOPjU,uBAAAkU,cAAd,WACI,MACIruF,GAAAgC,WAAWC,kBAAkBqsF,yBAC5B9wF,KAAK+wF,aACLtiF,EAAAyB,cAAckqE,kBACbzT,EAAAkF,eAAezkE,QAAoC,WAA1Bu/D,EAAAkF,eAAezkE,UACzCiM,EAAAwD,QAAQgjD,gBACR75D,KAAKywF,YACNzwF,KAAKgxF,yBAQCrU,uBAAAzjB,YAAd,SAA0BgkB,GAClBl9E,KAAK4wF,YACL5wF,KAAK4wF,WAAY,EACjBpuF,EAAAgC,WAAWsD,QAAQoxD,eAEnBgkB,IACAl9E,KAAKywF,YAAa,IAOZ9T,uBAAA4L,WAAd,WACQvoF,KAAK4wF,YACL5wF,KAAK0wF,eAAgB,IAOf/T,uBAAAuM,cAAd,WACQlpF,KAAK0wF,gBACL1wF,KAAKq5D,aACLr5D,KAAK0wF,eAAgB,IAOf/T,uBAAA0H,gBAAd,WACQrkF,KAAK4wF,YACL5wF,KAAK4wF,WAAY,IAQVjU,uBAAAsU,kBAAf,WACI,MACIxiF,GAAAyB,cAAckqE,gBACbzT,EAAAkF,eAAezkE,QAAoC,WAA1Bu/D,EAAAkF,eAAezkE,QACzCiM,EAAAwD,QAAQgjD,gBACPj3D,EAAA6F,YAAY2gE,iBAQNuT,uBAAAoU,SAAf,WAEI,MADAxqB,GAAAsD,WAAWgT,oBACJtW,EAAAsD,WAAWuU,QAORzB,uBAAA6T,0BAAd,WACI,OACKxwF,KAAK+wF,YACNvuF,EAAAgC,WAAWC,kBAAkBqsF,wBAC7B9wF,KAAKgxF,0BACJhxF,KAAKixF,qBAQCtU,uBAAAgU,UAAf,WACI,MAAO5xE,MAAK0xB,IAAGpvC,MAAR0d,KAAYwnD,EAAAsD,WAAWiH,YAOpB6L,uBAAAC,6BAAd,WAKI,MAJI58E,MAAKkxF,eACLlxF,KAAKgxF,wBAA0BhxF,KAAKixF,oBACpCjxF,KAAKkxF,cAAe,IAEhBlxF,KAAKgxF,yBAA2BxuF,EAAAgC,WAAWC,kBAAkBqsF,wBAvJ1DnU,uBAAA8T,YAAsB,EACtB9T,uBAAAiU,WAAqB,EACrBjU,uBAAA+T,eAAyB,EACzB/T,uBAAAqU,yBAAmC,EACnCrU,uBAAAuU,cAAwB,EAqJ3CvU,yBA1Jat8E,GAAAs8E,uBAAsBA,G5C6jiB7B,SAASr8E,EAAQD,EAASF,GAE/B,Y6C7kiBD,IAAAyB,GAAAzB,EAAwD,GACxD6B,EAAA7B,EAAkD,GAClDiC,EAAAjC,EAA0B,IAE1BqC,EAAArC,EAA2B,GAC3ByN,EAAAzN,EAAwB,GACxByC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzB2C,EAAA3C,EAAuC,IACvC4lF,EAAA5lF,EAAqC,IAErComE,EAAApmE,EAA2B,IAC3Bq0E,EAAAr0E,EAA+B,IAC/BkT,EAAAlT,EAAwB,IACxBm7E,EAAAn7E,EAAuC,IAMvCm6E,EAAA,mBAAAA,uBAmPA,MAtOWA,oBAAAjhB,WAAP,SAAkB/sC,GACV9pB,EAAAgC,WAAWC,kBAAkB0sF,QAC7BxuF,EAAAoG,YAAY9D,WAAWmsF,sBAAsBp5B,KAAK,SAACC,GAC/CqiB,mBAAmB+W,mBAAmB/kE,EAAM2rC,KAGhDqiB,mBAAmB+W,mBAAmB/kE,IAIvCguD,mBAAA+W,mBAAP,SACI/kE,EACAglE,GAMA,GANA,SAAAA,MAAA,MAEmC,MAA/BhX,mBAAmB+H,WACnB/H,mBAAmB+H,SAAWl5E,SAASC,eAAe,6BAIrDxH,EAAAqG,MAAMC,kBAAkBopF,KACxB1vF,EAAAqG,MAAMC,kBAAkBopF,EAAe,WACxCA,EAAe,SAAEplF,OAAS,EAG1B,WADAsoE,GAAAuC,eAAeC,SAASsD,mBAAmBiX,WAAYD,EAI3D,IAAIE,GAA0BroF,SAASC,eAAe,UAClDqoF,EAA2BtoF,SAASC,eAAe,WACnDsiE,EAAoB,CAExB1pE,GAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAE5B,MAARkP,EACIA,EAAK5lB,WAAa,GAClB8lB,EAAW3/E,MAAMC,QAAU,OAC3B2/E,EAAY5/E,MAAMC,QAAU,QAC5B45D,KAAiB4lB,EAAK5lB,YAEtB8lB,EAAW3/E,MAAMC,QAAU,QAC3B2/E,EAAY5/E,MAAMC,QAAU,OAC5B45D,EAAY4lB,EAAK5lB,YAGrB8lB,EAAW3/E,MAAMC,QAAU,OAC3B2/E,EAAY5/E,MAAMC,QAAU,QAGhCwpE,EAAAqB,uBAAuB4L,aACvB/lF,EAAAgC,WAAWsD,QAAQoxD,cACnB6sB,EAAAM,qBAAqBkC,aACrBzlF,EAAAwC,uBAAuBswE,YACvBviE,EAAAwD,QAAQoiD,yBACRqhB,mBAAmBkH,QAAS,EAEc,MAAtClH,mBAAmBoX,kBACnBpX,mBAAmBoX,gBAAkBvoF,SAASC,eAAe,kBACnB,MAAtCkxE,mBAAmBoX,kBACnBpX,mBAAmBoX,gBAAgBnP,QAAUjI,mBAAmBiX,WAC5DjlE,cACAguD,mBAAmBoX,gBAAgB7/E,MAAMC,QAAU,eAEnDwoE,mBAAmBoX,gBAAgB7/E,MAAMC,QAAU,SAKtB,MAArCwoE,mBAAmBqX,iBACnBrX,mBAAmBqX,eAAiBxoF,SAASC,eAAe,iBACnB,MAArCkxE,mBAAmBqX,iBACfrlE,EAAKznB,SACLy1E,mBAAmBqX,eAAepP,QAAUjI,mBAAmBsX,UAC/DtX,mBAAmBqX,eAAe9/E,MAAMC,QAAU,gBAE7ClQ,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAIpDrI,EAAAgC,WAAWC,kBAAkBotF,sBAC7BvX,mBAAmBqX,eAAepP,QAAUjI,mBAAmBwX,mBAC/DxX,mBAAmBqX,eAAe9/E,MAAMC,QAAU,gBAElDwoE,mBAAmBqX,eAAe9/E,MAAMC,QAAU,QAPtDwoE,mBAAmBqX,eAAepP,QAAUjI,mBAAmBwX,mBAC/DxX,mBAAmBqX,eAAe9/E,MAAMC,QAAU,kBAa3B,MAAnCwoE,mBAAmBsI,eACnBtI,mBAAmBsI,aAAez5E,SAASC,eAAe,eACnB,MAAnCkxE,mBAAmBsI,eACnBtI,mBAAmBsI,aAAaL,QAAUjI,mBAAmBmH,QACzDn1D,EAAKjoB,KACLi2E,mBAAmBsI,aAAa/wE,MAAMC,QAAU,eAEhDwoE,mBAAmBsI,aAAa/wE,MAAMC,QAAU,QAM5D,IAAI04C,IAAqBn/C,KAAKs9C,MAAQr8B,EAAKk+B,UAAU3wC,WAAa,IAC9Dk4E,EAAmB,GACnBt8D,EAAY+0B,EAAY,GACxBxY,EAAY97B,SAASuf,EAAI,GAAK,IAAM,EACpCvf,UAAS87B,GAAK,KACdA,EAAI,IAAMA,EAEd,IAAItxC,GAAYwV,SAAUuf,EAAI,GAAM,IAAM,EACtCvf,UAASxV,GAAK,KACdA,EAAI,IAAMA,GAIVqxF,EADAzlE,EAAKylE,SAAW,KAAO,GACXzlE,EAAKylE,SAAW,IAAIC,QAAQ,IAE5B1lE,EAAKylE,SAAW,IAAIC,QAAQ,GAG5CpvF,EAAA6F,YAAY4/D,kBAAkB,uBAAwBtpD,KAAKC,MAAMyW,GAAK,IAElEjzB,EAAAgC,WAAWC,kBAAkB0sF,SACjB,MAARG,IACI1uF,EAAA6F,YAAY0jE,kBAAkBprE,eAAeuwF,EAAKl1B,YAClDk1B,EAAKl1B,SAAWx5D,EAAA6F,YAAY0jE,kBAAkBmlB,EAAKl1B,WAGnD55D,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,SACpDzoE,EAAA6F,YAAY4/D,kBACR,2BACAzmE,EAAA4L,YAAY89D,OAAOI,EAAWnF,EAAAsD,WAAWwB,UAAUn9D,WAAa,IAAMojF,EAAKl1B,UAG/Ex5D,EAAA6F,YAAY4/D,kBACR,2BACAjmE,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa+K,EAAUx9D,YAAc,IAAMojF,EAAKl1B,WAO/Fx5D,EAAA6F,YAAY4/D,kBAAkB,gCAAiC0pB,EAE/D,IAAIE,GAAyB9oF,SAASC,eAAe,kBACjD5G,GAAAgC,WAAWC,kBAAkBytF,gBACC,MAA1BD,IACAA,EAAuBpgF,MAAMC,QAAU,SAGb,MAA1BmgF,IACAA,EAAuBpgF,MAAMC,QAAU,QAIZ,MAA/BwoE,mBAAmB+H,UACf/H,mBAAmB+H,SAAS/4E,UAAUiO,SAAS+iE,mBAAmByI,gBAClEzI,mBAAmB+H,SAAS/4E,UAAU6N,OAAOmjE,mBAAmByI,gBASrEzI,mBAAAiX,WAAP,WACIvvF,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAExC9H,mBAAmBkH,QAAS,EACvBlH,mBAAmB+H,SAAS/4E,UAAUiO,SAAS+iE,mBAAmByI,gBACnEzI,mBAAmB+H,SAAS/4E,UAAUC,IAAI+wE,mBAAmByI,eAGjEZ,EAAAp4D,SAASsS,KAAK,aACdzuB,EAAA1K,QAAA0K,cACAjL,EAAAoG,YAAYsyE,0BACZC,EAAAqB,uBAAuBuM,gBACvBpmF,EAAAwC,uBAAuBkmF,oBAGpBlR,mBAAAsX,UAAP,WACI5vF,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAExC9H,mBAAmBkH,QAAS,EACvBlH,mBAAmB+H,SAAS/4E,UAAUiO,SAAS+iE,mBAAmByI,gBACnEzI,mBAAmB+H,SAAS/4E,UAAUC,IAAI+wE,mBAAmByI,eAGjEZ,EAAAp4D,SAASsS,KAAK,aACdzuB,EAAA1K,QAAQ4B,oBACR8I,EAAA1K,QAAQ2B,UACRlC,EAAAoG,YAAYsyE,0BACZC,EAAAqB,uBAAuBuM,gBACvBpmF,EAAAwC,uBAAuBkmF,oBAGpBlR,mBAAAwX,mBAAP,WACI9vF,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAExC9H,mBAAmBkH,QAAS,EACvBlH,mBAAmB+H,SAAS/4E,UAAUiO,SAAS+iE,mBAAmByI,gBACnEzI,mBAAmB+H,SAAS/4E,UAAUC,IAAI+wE,mBAAmByI,eAGjEZ,EAAAp4D,SAASsS,KAAK,aACdzuB,EAAA1K,QAAQ4B,oBACHlD,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAGxD+C,EAAA1K,QAAQoH,uBAFRsD,EAAA1K,QAAQ0I,8BAIZjJ,EAAAoG,YAAYsyE,0BACZC,EAAAqB,uBAAuBuM,gBACvBpmF,EAAAwC,uBAAuBkmF,oBAGpBlR,mBAAAmH,QAAP,WACIz/E,EAAAsC,UAAUA,UAAU89E,aAAa,OAAO,GAExC9H,mBAAmBkH,QAAS,EACvBlH,mBAAmB+H,SAAS/4E,UAAUiO,SAAS+iE,mBAAmByI,gBACnEzI,mBAAmB+H,SAAS/4E,UAAUC,IAAI+wE,mBAAmByI,eAGjEZ,EAAAp4D,SAASsS,KAAK,aACdr6B,EAAAsC,UAAUA,UAAUkgF,YAAc,oBAClC52E,EAAA1K,QAAQmB,QAhPLi2E,mBAAAkH,QAAkB,EAElBlH,mBAAAyI,cAAwB,YAOxBzI,mBAAAC,iCAA2C,EAyOtDD,qBAnPaj6E,GAAAi6E,mBAAkBA,G7C8xiBzB,SAASh6E,EAAQD,EAASF,GAE/B,Y8CrziBD,IAAAyB,GAAAzB,EAAmC,GACnC6B,EAAA7B,EAA0B,GAC1BgiF,EAAAhiF,EAAyB,IACzBiC,EAAAjC,EAA0B,IAC1ByN,EAAAzN,EAAwB,GACxBqC,EAAArC,EAA2B,GAC3B40E,EAAA50E,EAA0B,IAE1B42E,EAAA,mBAAAA,mBAsOA,MA7MkBA,gBAAAC,SAAd,SAAuBnjD,EAAmCokC,IAEjDr2D,EAAAqG,MAAMC,kBAAkB+vD,KACxBr2D,EAAAqG,MAAMC,kBAAkB+vD,EAASohB,WAClCphB,EAASohB,SAASntE,OAAS,GAEvBtK,EAAAqG,MAAMC,kBAAkB6uE,eAAelgB,UACvCkgB,eAAelgB,OAAS1tD,SAASC,eAAe,iBAE3CxH,EAAAqG,MAAMC,kBAAkB6uE,eAAelgB,UACxCkgB,eAAeob,MAAQpb,eAAelgB,OAAOu7B,qBAAqB,MAAM,GACxErb,eAAe7V,KAAO/3D,SAASC,eAAe,qBAE9C2tE,eAAesb,cAAgBlpF,SAASC,eAAe,wBACvD2tE,eAAe+N,aAInBljF,EAAAqG,MAAMC,kBAAkB6uE,eAAelgB,QACvChjC,EAASokC,IAET8e,eAAeljD,SAAWA,EAC1BkjD,eAAe9e,SAAWA,EAC1B8e,eAAeub,KAAO,EACtBvb,eAAenlE,WAGnBiiB,EAASokC,IAQA8e,eAAAwb,iBAAjB,SAAkCjmE,GAW9B,GAVAyqD,eAAeyb,kBAEV5wF,EAAAqG,MAAMC,kBAAkBokB,EAAY,SACrCyqD,eAAeob,MAAM3oF,UAAY8iB,EAAY,OAG5C1qB,EAAAqG,MAAMC,kBAAkBokB,EAAW,QACpCyqD,eAAe7V,KAAK13D,UAAY8iB,EAAW,OAG1C1qB,EAAAqG,MAAMC,kBAAkBokB,EAAc,SAAI,CAC3CyqD,eAAe0b,kBAEf,KAAK,GAAI1yF,GAAI,EAAGA,EAAIusB,EAAc,QAAEpgB,OAAQnM,IAAK,CAC7C,GAAImgF,GAAS5zD,EAAc,QAAEvsB,EAE7B,QAAQmgF,EAAOnsD,MACX,IAAK,WACDgjD,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAe4b,eAAet+E,KAAKrU,KAAMkgF,GACrF,MACJ,KAAK,OACDnJ,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAe6b,WAAWv+E,KAAKrU,KAAMkgF,GACjF,MACJ,KAAK,UACDnJ,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAe8b,cAAcx+E,KAAKrU,KAAMkgF,GACpF,MACJ,KAAK,SACDnJ,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAe+b,aAAaz+E,KAAKrU,KAAMkgF,GACnF,MACJ,KAAK,UACDnJ,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAegc,cAAc1+E,KAAKrU,KAAMkgF,GACpF,MACJ,KAAK,OACDnJ,eAAe2b,aAAaxS,EAAa,KAAGnJ,eAAeic,WAAW3+E,KAAKrU,KAAMkgF,QAOpFnJ,eAAAyb,gBAAjB,WAEIzb,eAAeob,MAAM3oF,UAAYpH,EAAAsH,UAAUC,OAAO,YAGlDotE,eAAe0b,mBAGf1b,eAAe2b,aAAatwF,EAAAsH,UAAUC,OAAO,YAAaotE,eAAe4b,iBAG5D5b,eAAA0b,iBAAjB,WACI,KAAO1b,eAAe+N,QAAQ54E,OAAS,GAAG,CACtC,GAAIk5E,GAASrO,eAAe+N,QAAQ1jC,KACpC21B,gBAAesb,cAAc5rE,YAAY2+D,KAIhCrO,eAAA2b,aAAjB,SAA8BxxB,EAAcgf,GACxC,GAAIkF,GAAsBj8E,SAASkX,cAAc,MACjD+kE,GAAO7oB,YAAc2E,EACrBkkB,EAAO97E,UAAUC,IAAI,YAAa,mBAClC67E,EAAO7C,QAAUrC,EAEjBnJ,eAAesb,cAAc/gF,YAAY8zE,GACzCrO,eAAe+N,QAAQ9xE,KAAKoyE,IAOfrO,eAAA4b,eAAjB,SAAgCrmE,GAC5B61D,EAAAp4D,SAASsS,KAAK,aACd06C,eAAenlE,UAGFmlE,eAAA6b,WAAjB,SAA4BtmE,GACxB61D,EAAAp4D,SAASsS,KAAK,aACdr6B,EAAAsC,UAAUA,UAAUkgF,YAAc,gBAClC52E,EAAA1K,QAAQmB,QAGK0yE,eAAA+b,aAAjB,SAA8BxmE,GAC1B61D,EAAAp4D,SAASsS,KAAK,aACdr6B,EAAAsC,UAAUA,UAAUogF,gBAChB1iF,EAAAsC,UAAUA,UAAUqgF,kBAIxBlhF,OAAOC,SAASkhF,QAAO,IAGV7N,eAAA8b,cAAjB,SAA+BvmE,GAG3B,GAFA61D,EAAAp4D,SAASsS,KAAK,aAETz6B,EAAAqG,MAAMC,kBAAkBokB,EAAc,SAM/B1qB,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoH,aAEvDjK,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBoG,eAG/D+C,EAAA1K,QAAQoH,uBAJRsD,EAAA1K,QAAQ0I,kCAPmC,CAE3C,GADA5J,EAAAsC,UAAUA,UAAUwG,aAAcC,OAAQuhB,EAAc,UACpDtqB,EAAAsC,UAAUA,UAAU0G,sBACpB,MAEJvH,QAAOwH,KAAKqhB,EAAc,QAAI1qB,EAAAqG,MAAMC,kBAAkBokB,EAAiB,YAA0B,SAArBA,EAAiB,cAUpFyqD,eAAAgc,cAAjB,SAA+BzmE,GAG3B,GAFA61D,EAAAp4D,SAASsS,KAAK,aAETz6B,EAAAqG,MAAMC,kBAAkBokB,EAAc,UAMpC,IAAK1qB,EAAA4I,YAAYC,cAAcjI,EAAAgC,WAAWC,kBAAkBu+E,YAAa,CAK5E,GAJAhhF,EAAAsC,UAAUA,UAAU2+E,YAChBC,OAAQ,oBACRn4E,OAAQvI,EAAAgC,WAAWC,kBAAkBu+E,aAErChhF,EAAAsC,UAAUA,UAAU6+E,sBACpB,MAEJ1/E,QAAOwH,KAAKzI,EAAAgC,WAAWC,kBAAkBu+E,WAAY,cAdV,CAE3C,GADAhhF,EAAAsC,UAAUA,UAAU2+E,YAAaC,OAAQ,oBAAqBn4E,OAAQuhB,EAAc,UAChFtqB,EAAAsC,UAAUA,UAAU6+E,sBACpB,MAEJ1/E,QAAOwH,KAAKqhB,EAAc,QAAI1qB,EAAAqG,MAAMC,kBAAkBokB,EAAiB,YAA0B,QAArBA,EAAiB,cAapFyqD,eAAAic,WAAjB,SAA4B1mE,GACxB61D,EAAAp4D,SAASsS,KAAK,aAETz6B,EAAAqG,MAAMC,kBAAkBokB,EAAc,UACvC7oB,OAAOwH,KAAKqhB,EAAc,QAAI1qB,EAAAqG,MAAMC,kBAAkBokB,EAAiB,YAA0B,SAArBA,EAAiB,aAQpFyqD,eAAAnlE,OAAjB,WACQmlE,eAAe9e,SAASohB,SAASntE,SAAW6qE,eAAeub,MAC3Dvb,eAAelgB,OAAOvtD,UAAUC,IAAI,aACpCwtE,eAAeljD,SAASkjD,eAAe9e,UACvCj2D,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,IAEsB,UAA9DrL,eAAe9e,SAASohB,SAAStC,eAAeub,MAAMv+D,MACtD/xB,EAAAsC,UAAUA,UAAU2uF,kBAAkBlc,eAAe9e,SAASohB,SAAStC,eAAeub,MAAMpxB,MAC5F6V,eAAeub,OACfvb,eAAenlE,WAEfmlE,eAAelgB,OAAOvtD,UAAU6N,OAAO,aACvC4/D,eAAewb,iBAAiBxb,eAAe9e,SAASohB,SAAStC,eAAeub,OAChFvb,eAAeub,OACftwF,EAAAsC,UAAUA,UAAU89E,aAAa,WAAW,KAQ1CrL,eAAAmC,YAAd,SAA0BjhB,GACtB8c,EAAA+E,UAAUgM,gBAElB/O,iBAtOa12E,GAAA02E,eAAcA,G9Cq+iBrB,SAASz2E,EAAQD,EAASF,GAE/B,Y+C/+iBD,IAAAiT,GAAAjT,EAA2E,GAE3EyB,EAAAzB,EAAmC,GACnC6B,EAAA7B,EAAyC,GAEzComE,EAAApmE,EAA2B,IAC3ByC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5Bq0E,EAAAr0E,EAA+B,IAC/BwmE,EAAAxmE,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAGxB8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAErC6pE,EAAA,WAkBI,QAAAA,WAAYqZ,GACRnzF,KAAKmzF,WAAaA,EAClBnzF,KAAKozF,aAAehgF,EAAAa,iBAAiB,eACrCjU,KAAKozF,aAAal/E,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKqzF,oBAAoBh/E,KAAKrU,OA8EtF,MAvEW85E,WAAAh5E,UAAAwyF,KAAP,cAAA95E,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAE1B2D,UAAUyZ,eACVzZ,UAAUyZ,YAAYjzF,OAAS0B,EAAAkD,cAAcC,KAAK8K,YAAYioE,KAC9D4B,UAAUyZ,YAAY3nB,IAAMrF,EAAAsD,WAAW4U,mBACvC3E,UAAUyZ,YAAYC,YAAcxzF,KAAKyzF,aAAap/E,KAAKrU,MAE3D4C,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WACPquF,KAAKtxF,EAAAkD,cAAcC,KAAK8K,YAAYioE,KAAM3R,EAAAsD,WAAW4U,oBACrDzmB,KAAK,SAACC,GACHuc,EAAAuC,eAAeC,SAASx9D,EAAKi6E,aAAap/E,KAAKmF,GAAOy+C,OAIpD6hB,UAAAgM,aAAd,YACSnjF,EAAAoG,YAAYotE,aAAe2D,UAAUyZ,cACtC5wF,EAAAoG,YAAYotE,aAAc,EAE1BxzE,EAAAoG,YAAY9D,WACPquF,KAAKxZ,UAAUyZ,YAAYjzF,OAAQw5E,UAAUyZ,YAAY3nB,KACzD5T,KAAK,SAACC,GACHuc,EAAAuC,eAAeC,SAAS8C,UAAUyZ,YAAYC,YAAav7B,KAInEj2D,EAAAsC,UAAUA,UAAUovF,cAChBzX,SAAU1V,EAAAsD,WAAWK,IACrBypB,UAAWhtB,EAAAkF,eAAeV,MAC1BxmE,WAAY/B,EAAA6F,YAAYupE,qBAAqBkhB,EAAAU,YAAYC,gBAS3D/Z,UAAAh5E,UAAA2yF,aAAV,SAAuBx7B,GACnBj4D,KAAK8zF,iBAAmB77B,EACyC,MAA7DA,EAAS33D,OAA+B2P,EAAYioE,QACpD4B,UAAUC,WAAa9hB,EAAS33D,OAA+B2P,EAAYioE,MAAMnN,QAGrF/qE,KAAKozF,aAAaz9E,MAAM,KAGpBmkE,UAAAh5E,UAAAuyF,oBAAR,WACSzxF,EAAAqG,MAAMC,kBAAkBlI,KAAK8zF,oBAC9BnxF,EAAAoG,YAAYgtE,eAAe/1E,KAAK8zF,kBAChClxF,EAAA6F,YAAY0gE,qBAEZ2Q,UAAUyZ,YAAc,KACxBvzF,KAAKmzF,WAAWM,eAChBzxF,EAAAsC,UAAUA,UAAUmvF,cAChBzpB,QAASprD,WACLhd,EAAA4L,YAAYjE,IAAIvJ,KAAK8zF,iBAAiB9pB,QAAQ8N,KAAM93E,KAAK8zF,iBAAiB9pB,QAAQC,QAEtFqI,IAAK3vE,EAAAoG,YAAYqhE,aAAa2pB,WAC9B9X,SAAU1V,EAAAsD,WAAW4U,mBAAmBxC,SACxC1R,QAASvqE,KAAK8zF,iBAAiBvpB,WAIvC5nE,EAAAoG,YAAYotE,aAAc,GAhGhB2D,UAAAC,cAMCD,UAAAyZ,YAAiC,KA4FpDzZ,YAnGaz5E,GAAAy5E,UAASA,G/CgjjBhB,SAASx5E,EAAQD,GAEtB,YgDjkjBD,IAAAuzF,GAAA,mBAAAA,gBAiBA,MAhBWA,aAAAC,WAAqB,OACrBD,YAAAI,eAAyB,YACzBJ,YAAAK,eAAyB,WACzBL,YAAAM,mBAA6B,gBAC7BN,YAAAO,cAAwB,WACxBP,YAAAQ,eAAyB,YACzBR,YAAAS,eAAyB,YACzBT,YAAAU,aAAuB,UACvBV,YAAAW,kBAA4B,eAC5BX,YAAAY,oBAA8B,kBAC9BZ,YAAAa,kBAA4B,eAC5Bb,YAAAc,uBAAiC,sBACjCd,YAAAe,sBAAgC,oBAChCf,YAAAgB,2BAAqC,2BACrChB,YAAAiB,gBAA0B,aAC1BjB,YAAAkB,qBAA+B,oBAC1ClB,cAjBavzF,GAAAuzF,YAAWA,GhD4ljBlB,SAAStzF,EAAQD,EAASF,GAE/B,YiD9ljBD,IACA6B,IADA7B,EAA+B,GAC/BA,EAA0B,IAG1BsmE,EAAAtmE,EAA2B,IAE3BqC,EAAArC,EAA2B,GAE3BsO,EAAAtO,EAA8B,IAC9BomE,EAAApmE,EAA2B,IAC3BgiF,EAAAhiF,EAAyB,IACzByN,EAAAzN,EAAwB,GACxB+yF,EAAA/yF,EAA4B,IAG5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BkT,EAAAlT,EAAwB,IACxBumE,EAAAvmE,EAAgC,IAEhCy0E,EAAAz0E,EAAyB,IACzBm7E,EAAAn7E,EAAuC,IAMvCiI,EAAA,mBAAAA,mBA4uBA,MArtBWA,gBAAA2sF,sBAAP,SAA6B7U,EAAgB72E,GAKN,MAA/BrJ,KAAKiyE,eAAeiO,KACpBlgF,KAAKiyE,eAAeiO,OAExBlgF,KAAKiyE,eAAeiO,GAAQltE,KAAK3J,IAU9BjB,eAAA4sF,wBAAP,SAA+B9U,EAAgB72E,GAKN,MAAjCrJ,KAAKi1F,iBAAiB/U,KACtBlgF,KAAKi1F,iBAAiB/U,OAE1BlgF,KAAKi1F,iBAAiB/U,GAAQltE,KAAK3J,IAUhCjB,eAAA8sF,0BAAP,SAAiChV,EAAgB72E,GAKN,MAAnCrJ,KAAKm1F,mBAAmBjV,KACxBlgF,KAAKm1F,mBAAmBjV,OAE5BlgF,KAAKm1F,mBAAmBjV,GAAQltE,KAAK3J,IAGlCjB,eAAAgtF,8BAAP,SAAqClV,EAAgB72E,GAKN,MAAvCrJ,KAAKq1F,uBAAuBnV,KAC5BlgF,KAAKq1F,uBAAuBnV,OAEhClgF,KAAKq1F,uBAAuBnV,GAAQltE,KAAK3J,IAUtCjB,eAAAktF,gCAAP,SAAuCpV,EAAgB72E,GAKN,MAAzCrJ,KAAKu1F,yBAAyBrV,KAC9BlgF,KAAKu1F,yBAAyBrV,OAElClgF,KAAKu1F,yBAAyBrV,GAAQltE,KAAK3J,IAUxCjB,eAAAotF,oBAAP,SAA2BlpE,EAAcjjB,GAKN,MAA3BrJ,KAAKy1F,aAAanpE,KAClBtsB,KAAKy1F,aAAanpE,OAEtBtsB,KAAKy1F,aAAanpE,GAAMtZ,KAAK3J,IAS1BjB,eAAA+wD,eAAP,SAAsB+mB,GAKlB,GAAK93E,eAAe4H,sBAApB,CAIA,GAAI0lF,IAAoB,CA2CxB,IA1CIxV,IAAWgT,EAAAU,YAAYa,oBACvBiB,GAAW,EAC0B,MAAjCnvB,EAAAsD,WAAWmT,oBACXzW,EAAAsD,WAAWmT,mBAAmB4C,UAEH,MAA3BrZ,EAAAsD,WAAWoT,cACX1W,EAAAsD,WAAWoT,aAAa2C,UAES,MAAjCx3E,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElCuC,EAAAp4D,SAASsS,KAAK,cAGd6jD,IAAWgT,EAAAU,YAAYe,wBACvBe,GAAW,EACsB,MAA7BnvB,EAAAsD,WAAWiT,gBACXvW,EAAAsD,WAAWiT,eAAe8C;AAEC,MAA3BrZ,EAAAsD,WAAWoT,cACX1W,EAAAsD,WAAWoT,aAAa2C,UAES,MAAjCx3E,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElCuC,EAAAp4D,SAASsS,KAAK,cAGd6jD,IAAWgT,EAAAU,YAAYiB,kBACvBa,GAAW,EACsB,MAA7BnvB,EAAAsD,WAAWiT,gBACXvW,EAAAsD,WAAWiT,eAAe8C,UAEC,MAA3BrZ,EAAAsD,WAAWoT,cACX1W,EAAAsD,WAAWoT,aAAa2C,UAES,MAAjCx3E,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElCuC,EAAAp4D,SAASsS,KAAK,cAG+B,WAA7C75B,EAAAgC,WAAW2B,eAAe0O,eAC1B,OAAQqrE,GACJ,IAAKgT,GAAAU,YAAYO,cACbuB,GAAW,CACX,MACJ,KAAKxC,GAAAU,YAAYQ,eACbsB,GAAW,EAKnBA,GACA11F,KAAK41F,iBAAiB,IAE1BnnF,EAAAyB,cAAcipD,eAAe+mB,KAG1B93E,eAAAC,SAAP,SAAgB8zD,GACZ,GAAqC,MAAjC/zD,eAAeutF,eAEf,WADAvtF,gBAAeutF,eAAeE,SAAS15B,EAI3C,KAAK,GAAIp8D,GAAY,EAAGA,EAAIqI,eAAe6sF,iBAAiBxuB,EAAA6B,WAAWwtB,mBAAmB5pF,OAAQnM,IAAK,CACnG,GAAIg2F,GAAyB3tF,eAAe6sF,iBAAiBxuB,EAAA6B,WAAWwtB,mBAAmB/1F,EAC3F,IAAoB,MAAhBg2F,EAAIzmF,SAMJ,OALAymF,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAEtBglD,GACJ,IAAK,GACD45B,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,EACvBh0F,EAAAsC,UAAUA,UAAU8pF,UAAU,EAC9B,MACJ,KAAK,GACD2H,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,IACvBh0F,EAAAsC,UAAUA,UAAU8pF,UAAU,EAC9B,MACJ,KAAK,GACD2H,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,GACvBh0F,EAAAsC,UAAUA,UAAU8pF,UAAU,EAC9B,MACJ,KAAK,GACL,QACI2H,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,EACvBh0F,EAAAsC,UAAUA,UAAU8pF,UAAU,MAa3ChmF,eAAAwtF,iBAAP,SAAwB1V,GAKpB,GAAK93E,eAAe4H,sBAApB,CAIAsrE,EAAAqB,uBAAuBzjB,cAEvB7lD,EAAAwD,QAAQoiD,yBACRj3D,EAAAsC,UAAUA,UAAU2xF,gBAEL,UAAX/V,IACAiC,EAAAp4D,SAASsS,KAAK,aACd6jD,EAAS,GAGb,IAAIgW,IAAqB,CAEzB,IAAI9tF,eAAe+tF,sBAAwC,iBAAG,CAC1D,GAAIC,GAAyChuF,eAAe+tF,sBAAwC,gBAE5E,OAApBC,GAC6B,MAA7BA,EAAiB9mF,UAChB8mF,EAAiB9mF,SAAShG,UAAUiO,SAAS,eAE1C6+E,EAAiBC,mBACjBD,EAAiB9mF,SAASgsC,gBAAgB,SAE9C86C,EAAiB9mF,SAAShG,UAAUC,IAAI,cAIhD,GAAInB,eAAe+tF,sBAAsC,eAAG,CACxD,GAAIG,GAAuCluF,eAAe+tF,sBAAsC,cAE1E,OAAlBG,GAC2B,MAA3BA,EAAehnF,UACdgnF,EAAehnF,SAAShG,UAAUiO,SAAS,cAE5C++E,EAAehnF,SAAShG,UAAUC,IAAI,aAe9C,OAXiC,MAA7Bg9D,EAAAsD,WAAWiT,gBACXvW,EAAAsD,WAAWiT,eAAe8C,UAGO,MAAjCrZ,EAAAsD,WAAWmT,oBACXzW,EAAAsD,WAAWmT,mBAAmB4C,UAE9BM,IAAWzZ,EAAA6B,WAAWiuB,YAA0C,MAA5B3zF,EAAA6F,YAAYwtE,cAChDrzE,EAAA6F,YAAYwtE,aAAa2J,UAGrBM,GACJ,IAAK,GACDtL,EAAAc,SAAS8gB,iBACTx2F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OAC5D72F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACnB,MAAjC1uF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElCsW,GAAY,CACZ,MACJ,KAAKzvB,GAAA6B,WAAWyuB,mBACZtoF,EAAAyB,cAAciwE,YACuB,MAAjC/3E,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAW0uB,sBACZ5uF,eAAewtF,iBAAiB,IAChChoF,EAAA1K,QAAQoH,sBAAqB,GACQ,MAAjClC,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWiuB,WACZv2F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OAC5D72F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxB,MAA5Bl0F,EAAA6F,YAAYwtE,cAAwBrzE,EAAA6F,YAAYwtE,aAAar4C,SACzDh7B,EAAA6F,YAAYwtE,aAAahrE,QAEzBjL,KAAK41F,iBAAiB,IAEW,MAAjCxtF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,YAGlC59E,EAAAsC,UAAUA,UAAUkgF,YAAc,UAClC52E,EAAA1K,QAAQmB,QAEyB,MAAjC+D,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWiuB,WAAa,IACzBv0F,EAAAsC,UAAUA,UAAUkgF,YAAc,sBAClC52E,EAAA1K,QAAQmB,OAC6B,MAAjC+D,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWwtB,kBACZ,GAAqC,MAAjC1tF,eAAeutF,eACfvtF,eAAeutF,eAAezH,aAE9B,IAAqE,MAAjE9lF,eAAe6sF,iBAAiBxuB,EAAA6B,WAAWwtB,mBAC3C,IACI,GAAI/1F,GAAY,EAChBA,EAAIqI,eAAe6sF,iBAAiBxuB,EAAA6B,WAAWwtB,mBAAmB5pF,OAClEnM,IACF,CACE,GAAIg2F,GACA3tF,eAAe6sF,iBAAiBxuB,EAAA6B,WAAWwtB,mBAAmB/1F,EAC9C,OAAhBg2F,EAAIzmF,WACAymF,EAAIzmF,SAAShG,UAAUiO,SAAS,QAChCw+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,EACvBxzF,EAAAgC,WAAWsD,QAAQsmF,UAAU,GAC7BpsF,EAAAsC,UAAUA,UAAU8pF,UAAU,IACvB2H,EAAIzmF,SAAShG,UAAUiO,SAAS,QACvCw+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3B2sF,GAAY,EACZ/rF,KAAKC,MAAM4rF,UAAY,EACvBxzF,EAAAgC,WAAWsD,QAAQsmF,UAAU,GAC7BpsF,EAAAsC,UAAUA,UAAU8pF,UAAU,IACvB2H,EAAIzmF,SAAShG,UAAUiO,SAAS,QACvCw+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,IACvBxzF,EAAAgC,WAAWsD,QAAQsmF,UAAU,GAC7BpsF,EAAAsC,UAAUA,UAAU8pF,UAAU,IACvB2H,EAAIzmF,SAAShG,UAAUiO,SAAS,SACvCw+E,EAAIzmF,SAAShG,UAAU6N,OAAO,OAC9B4+E,EAAIzmF,SAAShG,UAAUC,IAAI,OAC3BY,KAAKC,MAAM4rF,UAAY,GACvBxzF,EAAAgC,WAAWsD,QAAQsmF,UAAU,GAC7BpsF,EAAAsC,UAAUA,UAAU8pF,UAAU,KAMlD,KACJ,KAAK3nB,GAAA6B,WAAW2uB,gBACZj3F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,MAC5D,MACJ,KAAKpwB,GAAA6B,WAAW6uB,qBACZn3F,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAKk3F,eAAezwB,EAAA6B,WAAW8uB,aAAc,OAC7Cp3F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACnB,MAAjC1uF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElChL,EAAAc,SAASpmE,SAAS+nF,kBAClB,MACJ,KAAK5wB,GAAA6B,WAAWgvB,iBACZt3F,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,OACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,UACnB,MAAjCxuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWivB,qBACZv3F,KAAKk3F,eAAezwB,EAAA6B,WAAWgvB,iBAAkB,UACjDt3F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACnB,MAAjCxuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAW8uB,aACZp3F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,OACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,UACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElC59E,EAAAsC,UAAUA,UAAUkzF,UACpB,MACJ,KAAK/wB,GAAA6B,WAAWwuB,cACZ92F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWmvB,iBACZz3F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,OACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,UACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElC59E,EAAAsC,UAAUA,UAAUozF,eACpB9iB,EAAAc,SAASpmE,SAAS+nF,kBAClB,MACJ,KAAK5wB,GAAA6B,WAAWuuB,kBACZjiB,EAAAc,SAAS8gB,iBACTx2F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWqvB,qBACZ,GAAItmF,GAAOlI,SAASkI,IAChBA,GAAK/H,UAAUiO,SAAS,WACxBlG,EAAK/H,UAAU6N,OAAO,WAEtB9F,EAAK/H,UAAUC,IAAI,UAEvB,MACJ,KAAKk9D,GAAA6B,WAAWsvB,iBACZ53F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAKk3F,eAAehX,EAAQ,UAC5BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,UAElC59E,EAAAsC,UAAUA,UAAUuzF,cACpB,MACJ,KAAKpxB,GAAA6B,WAAWwvB,kBACZ93F,KAAKy2F,wBAAwBvW,GAC7BlgF,KAAK02F,yBAAyBjwB,EAAA6B,WAAWquB,aAAc,UACvD32F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWsuB,cAAe,OACxD52F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWwuB,cAAe,OACxD92F,KAAK02F,yBAAyBjwB,EAAA6B,WAAWuuB,kBAAmB,OACvB,MAAjCzuF,eAAeutF,gBACfvtF,eAAeutF,eAAe/V,SAElC,MACJ,KAAKnZ,GAAA6B,WAAWyvB,yBACZrxB,EAAAoC,gBAAgB5P,aAChB,MACJ,KAAKuN,GAAA6B,WAAWC,sBACZ3lE,EAAA6F,YAAY2/D,cACZ,MACJ,KAAK3B,GAAA6B,WAAWY,sBACZtmE,EAAA6F,YAAYsgE,eAQhBmtB,GACA/T,EAAAp4D,SAASsS,KAAK,eAUPj0B,eAAAquF,wBAAf,SAAuCvW,GACnC,IAAK,GAAI76E,KAAOrF,MAAKm1F,mBACjB,IAAK,GAAIp1F,GAAY,EAAGA,EAAIC,KAAKm1F,mBAAmB9vF,GAAK6G,OAAQnM,IAC7D,GACIC,KAAKm1F,mBAAmB9vF,GAAKtF,GAAGuP,SAAShG,UAAUiO,SAASnP,eAAe26E,kBACvE,GACJ19E,GAAO66E,IAEPlgF,KAAKm1F,mBAAmB9vF,GAAKtF,GAAGuP,SAAShG,UAAUC,IAAInB,eAAe26E,eAC5B,MAAtC/iF,KAAKu1F,yBAAyBlwF,IAC9B,IAAK,GAAIs9B,GAAY,EAAGA,EAAI3iC,KAAKu1F,yBAAyBlwF,GAAK6G,OAAQy2B,IACnE3iC,KAAKu1F,yBAAyBlwF,GAAKs9B,GAAGrzB,SAAShG,UAAU4kF,OACrD9lF,eAAe26E,gBAgB5B36E,eAAAsuF,yBAAf,SAAwCxW,EAAgBnsD,GACpD,GAA6C,MAAzC/zB,KAAKu1F,yBAAyBrV,GAC9B,IAAK,GAAIngF,GAAY,EAAGA,EAAIC,KAAKu1F,yBAAyBrV,GAAQh0E,OAAQnM,IACzD,QAATg0B,EAEI/zB,KAAKu1F,yBAAyBrV,GAAQngF,GAAGuP,SAAShG,UAAUiO,SACxDnP,eAAe26E,kBACb,GAEN/iF,KAAKu1F,yBAAyBrV,GAAQngF,GAAGuP,SAAShG,UAAUC,IAAInB,eAAe26E,eAEnE,WAAThvD,EACP/zB,KAAKu1F,yBAAyBrV,GAAQngF,GAAGuP,SAAShG,UAAU6N,OAAO/O,eAAe26E,eAElF/iF,KAAKu1F,yBAAyBrV,GAAQngF,GAAGuP,SAAShG,UAAU4kF,OAAO9lF,eAAe26E,gBAanF36E,eAAA8uF,eAAf,SAA8BhX,EAAgBnsD,GAC1C,GAAuC,MAAnC/zB,KAAKm1F,mBAAmBjV,GACxB,IAAK,GAAIngF,GAAY,EAAGA,EAAIC,KAAKm1F,mBAAmBjV,GAAQh0E,OAAQnM,IACnD,QAATg0B,EAEI/zB,KAAKm1F,mBAAmBjV,GAAQngF,GAAGuP,SAAShG,UAAUiO,SAASnP,eAAe26E,kBAC9E,GAEA/iF,KAAKm1F,mBAAmBjV,GAAQngF,GAAGuP,SAAShG,UAAUC,IAAInB,eAAe26E,eAE7D,WAAThvD,EACP/zB,KAAKm1F,mBAAmBjV,GAAQngF,GAAGuP,SAAShG,UAAU6N,OAAO/O,eAAe26E,eAE5E/iF,KAAKm1F,mBAAmBjV,GAAQngF,GAAGuP,SAAShG,UAAU4kF,OAAO9lF,eAAe26E,gBAarF36E,eAAAigE,kBAAP,SAAyB/7C,EAAcvf,GACnC,GAA+B,MAA3B/M,KAAKy1F,aAAanpE,GAClB,IAAK,GAAIvsB,GAAY,EAAGA,EAAIC,KAAKy1F,aAAanpE,GAAMpgB,OAAQnM,IACxDqI,eAAe4vF,eAAe1rE,EAAMvf,GACpC/M,KAAKy1F,aAAanpE,GAAMvsB,GAAGk4F,QAAQlrF,IAexC3E,eAAAkiE,mBAAP,SAA0B4tB,GAKtB,IAAK,GAAI7yF,KAAO6yF,GACZ,GAA8B,MAA1Bl4F,KAAKy1F,aAAapwF,GAClB,IAAK,GAAItF,GAAY,EAAGA,EAAIC,KAAKy1F,aAAapwF,GAAK6G,OAAQnM,IACvDqI,eAAe4vF,eAAe3yF,EAAK6yF,EAAS7yF,IAC5CrF,KAAKy1F,aAAapwF,GAAKtF,GAAGk4F,QAAQC,EAAS7yF,KAUpD+C,eAAA4vF,eAAP,SAAsB1rE,EAAcvf,GAChC,GAAIorF,EAGAA,GADU,KAAVprF,EACc,EAEA6R,WAAW7R,GAGzBuf,IAAS7pB,EAAAkG,SAASs7D,aACE,IAAhBk0B,EACA/vF,eAAegwF,sBAAsB,kBAErChwF,eAAegwF,sBAAsB,kBAAkB,GAEpD9rE,IAAS7pB,EAAAkG,SAAS87D,qBACL,IAAhB0zB,EACA/vF,eAAegwF,sBAAsB,wBAErChwF,eAAegwF,sBAAsB,wBAAwB,KAKlEhwF,eAAAgwF,sBAAP,SAA6B5mB,EAAa9b,GAAA,SAAAA,OAAA,EAEtC,KAAK,GADDjD,GAAsCtpD,SAASmzD,uBAAuBkV,GACjEzxE,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACIqsD,EACArsD,EAAQwI,MAAMC,QAAU,GAExBzI,EAAQwI,MAAMC,QAAU,UAYjC1J,eAAAiwF,qBAAP,SAA4BC,GAKxB,IAAK,GAAIjzF,KAAOizF,GACZ,GAAgC,MAA5Bt4F,KAAKiyE,eAAe5sE,GAAc,CAClC,GAAItF,EACJ,KAAKA,EAAI,EAAGA,EAAIC,KAAKiyE,eAAe5sE,GAAK6G,OAAQnM,IAC7CC,KAAKiyE,eAAe5sE,GAAKtF,GAAGw4F,YAAYD,EAAWjzF,GAGvD,IAAwC,MAApCrF,KAAKq1F,uBAAuBhwF,GAC5B,IAAKtF,EAAI,EAAGA,EAAIC,KAAKq1F,uBAAuBhwF,GAAK6G,OAAQnM,IACrDC,KAAKq1F,uBAAuBhwF,GAAKtF,GAAGw4F,YAAYD,EAAWjzF,WAaxE+C,eAAAowF,oBAAP,SAA2BnzF,EAAa0H,GACpC,GAAIhN,EACJ,IAAgC,MAA5BC,KAAKiyE,eAAe5sE,GACpB,IAAKtF,EAAI,EAAGA,EAAIC,KAAKiyE,eAAe5sE,GAAK6G,OAAQnM,IAC7CC,KAAKiyE,eAAe5sE,GAAKtF,GAAGw4F,YAAYxrF,EAIhD,IAAwC,MAApC/M,KAAKq1F,uBAAuBhwF,GAC5B,IAAKtF,EAAI,EAAGA,EAAIC,KAAKq1F,uBAAuBhwF,GAAK6G,OAAQnM,IACrDC,KAAKq1F,uBAAuBhwF,GAAKtF,GAAGw4F,YAAYxrF,IAW7C3E,eAAAgQ,IAAf,SAAmBkU,KAtuBZlkB,eAAAqwF,gBAAmBC,oBAAoB,GACvCtwF,eAAA6pE,kBACA7pE,eAAA6sF,oBACA7sF,eAAA+sF,sBACA/sF,eAAAmtF,4BACAntF,eAAAitF,0BACAjtF,eAAA+tF,yBACA/tF,eAAAqtF,gBACArtF,eAAA6D,eACA7D,eAAA26E,cAAwB,YAGjB36E,eAAAk2E,eACAl2E,eAAA4H,uBAAiC,EA8tBnD5H,iBA5uBa/H,GAAA+H,eAAcA,GjDwrkBrB,SAAS9H,EAAQD,GAEtB,YkDhtkBD,IAAAioE,GAAA,mBAAAA,eAuCA,MArCWA,YAAAwtB,kBAA4B,eAG5BxtB,WAAAiuB,WAAqB,OAGrBjuB,WAAA6uB,qBAA+B,kBAC/B7uB,WAAAmvB,iBAA2B,cAC3BnvB,WAAAuuB,kBAA4B,eAG5BvuB,WAAAquB,aAAuB,UACvBruB,WAAAsuB,cAAwB,WACxBtuB,WAAAgvB,iBAA2B,cAC3BhvB,WAAAivB,qBAA+B,mBAC/BjvB,WAAAqvB,qBAA+B,kBAG/BrvB,WAAA8uB,aAAuB,UACvB9uB,WAAAwuB,cAAwB,WACxBxuB,WAAAyuB,mBAA6B,sBAG7BzuB,WAAA2uB,gBAA0B,aAG1B3uB,WAAAsvB,iBAA2B,cAC3BtvB,WAAAwvB,kBAA4B,eAG5BxvB,WAAAyvB,yBAAmC,uBACnCzvB,WAAAC,sBAAgC,mBAGhCD,WAAAY,sBAAgC,mBAEhCZ,WAAA0uB,sBAAgC,oBAC3C1uB,aAvCajoE,GAAAioE,WAAUA,GlD+ukBjB,SAAShoE,EAAQD,EAASF,GAE/B,YmDpvkBD,IAAA+B,GAAA/B,EAAgC,GAChCoY,EAAApY,EAA+B,IAC/B0sB,EAAA1sB,EAAyB,IACzBwO,EAAAxO,EAAsC,IACtC6B,EAAA7B,EAA0B,GAC1ByC,EAAAzC,EAA4B,IAE5B2oE,EAAA,mBAAAA,oBAmDA,MA9CWA,iBAAAzP,WAAP,WACIyP,gBAAgB6vB,mBAEX7vB,gBAAgB8vB,SAAY9vB,gBAAgB2nB,aACX,MAA9B3nB,gBAAgB+vB,YAAsB/vB,gBAAgB+vB,WAAWvvF,UAAUiO,SAAS,cACpFuxD,gBAAgB+vB,WAAWvvF,UAAU6N,OAAO,aAGhDhN,KAAKC,MAAM2F,WACX7N,EAAAsD,gBAAgBD,kBAChBgT,EAAAkB,eAAeO,QACf6S,EAAA4D,SAAS1gB,WAETpB,EAAAkB,sBAAsBC,SAAU,EAChCg5D,gBAAgB8vB,SAAU,EAC1B9vB,gBAAgB2nB,YAAa,EAE7BzuF,EAAAsC,UAAUA,UAAU89E,aAAa,aAAa,KAI/CtZ,gBAAA5P,YAAP,WACQ4P,gBAAgB8vB,UAChB9vB,gBAAgB6vB,mBACkB,MAA9B7vB,gBAAgB+vB,YAAuB/vB,gBAAgB+vB,WAAWvvF,UAAUiO,SAAS,cACrFuxD,gBAAgB+vB,WAAWvvF,UAAUC,IAAI,aAG7CY,KAAKC,MAAM2uB,YACX72B,EAAAsD,gBAAgBC,mBAChB8S,EAAAkB,eAAeW,UACfyS,EAAA4D,SAASsI,YAETpqB,EAAAkB,sBAAsBC,SAAU,EAChCg5D,gBAAgB8vB,SAAU,EAE1B52F,EAAAsC,UAAUA,UAAUw0F,gBAAgBl2F,EAAA6F,YAAYo/D,oBAChD7lE,EAAAsC,UAAUA,UAAU89E,aAAa,aAAa,KAIvCtZ,gBAAA6vB,iBAAf,WACsC,MAA9B7vB,gBAAgB+vB,aAChB/vB,gBAAgB+vB,WAAa1vF,SAASC,eAAe,qBA/C9C0/D,gBAAA8vB,SAAmB,EACnB9vB,gBAAA2nB,YAAsB,EAiDzC3nB,kBAnDazoE,GAAAyoE,gBAAeA,GnDqykBtB,SAASxoE,EAAQD,EAASF,GAE/B,YoDhzkBD,IAAAoY,GAAApY,EAA+B,IAC/B0sB,EAAA1sB,EAAyB,IAEzB0P,EAAA,mBAAAA,0BAwEA,MAnEkBA,uBAAA+B,OAAd,WACI,GAAImnF,GACAC,CACJ,IAA+B,mBAApB7vF,UAAS4vF,OAChBA,EAAS,SACTC,EAAmB,uBAChB,IAAkC,mBAAvB7vF,UAAS8vF,UACvBF,EAAS,YACTC,EAAmB,0BAChB,IAAiC,mBAAtB7vF,UAAS+vF,SACvBH,EAAS,WACTC,EAAmB,yBAChB,IAAqC,mBAA1B7vF,UAASgwF,aAIvB,MAHAJ,GAAS,eACTC,EAAmB,yBAKvB7vF,SAAS4I,iBACLinF,EACA,SAACn5F,GACG,GAAIgQ,sBAAsBC,QAAS,CAC/B,GAAIspF,GAAQ,4BAA4B1lF,KAAKC,UAAUC,SAEnDzK,UAAS4vF,GACTlpF,sBAAsBE,WAElBqpF,GACAn/E,aAAapK,sBAAsBwpF,OACnCxpF,sBAAsBwpF,MAAQ/jF,WAAW,WACrCzF,sBAAsBkpB,aACvB,MAEHlpB,sBAAsBkpB,eAKtC,GAIJt1B,OAAOsO,iBAAiB,QAAS,WAC7B,GAAIqnF,GAAQ,4BAA4B1lF,KAAKC,UAAUC,SACvD,IAAIwlF,EAAO,CACP,GAAME,GAAenvF,KAAKC,MAAMkvF,QAAQC,YAElB,eAAlBD,EAAQ5mB,OAA2C,gBAAlB4mB,EAAQ5mB,OACzC4mB,EAAQhvC,aAMVz6C,sBAAAE,SAAd,WACI8c,EAAA4D,SAAS1gB,WACTwI,EAAAkB,eAAeO,QACf7P,KAAKC,MAAM2F,YAGDF,sBAAAkpB,UAAd,WACIlM,EAAA4D,SAASsI,YACTxgB,EAAAkB,eAAeW,UACfjQ,KAAKC,MAAM2uB,YACX5uB,KAAKC,MAAMovF,aArED3pF,sBAAAC,SAAmB,EAuErCD,wBAxEaxP,GAAAwP,sBAAqBA,GpDy3kB5B,SAASvP,EAAQD,EAASF,GAE/B,YqD93kBD,IAAAs5F,GAAAt5F,EAA8B,IAC9BuC,EAAAvC,EAA+B,IAC/BgiF,EAAAhiF,EAAyB,IACzByB,EAAAzB,EAA4B,GAC5BomE,EAAApmE,EAA2B,IAC3BiC,EAAAjC,EAA0B,IAC1BqC,EAAArC,EAA2B,GAC3BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BsmE,EAAAtmE,EAA2B,IAC3BsO,EAAAtO,EAA8B,IAC9BwmE,EAAAxmE,EAA+B,IAE/Bu1E,EAAA,WAmBI,QAAAA,YACIA,SAASpmE,SAAWtP,KAsT5B,MAnTI01E,UAAA50E,UAAAgD,WAAA,WACI,GAAI41F,GAA8BvwF,SAASC,eAAe,sBACtDuwF,EAA8BxwF,SAASC,eAAe,sBAEpC,OAAlBswF,IACAA,EAAenX,QAAUviF,KAAK45F,SAASvlF,KAAKrU,OAG1B,MAAlB25F,IACAA,EAAepX,QAAUviF,KAAK65F,SAASxlF,KAAKrU,OAGhDA,KAAK85F,OAAS3wF,SAASmzD,uBAAuB,gBAC9Ct8D,KAAK+5F,aAAe5wF,SAASmzD,uBAAuB,sBAEpDt8D,KAAKq3F,oBAGF3hB,SAAA50E,UAAAu2F,iBAAP,WACI,GAAIroE,GAAkByqE,EAAAO,cAAcvB,eAAsC,qBAE1E,IAAc,MAAVzpE,EAAgB,CAIhB,IAHA,GAAI1C,MACAhD,EAAgB0F,EAAOzF,kBACvB0wE,EAAW,EACA,MAAR3wE,GAAc,CACjB,GAAqB,SAAjBA,EAAKpL,SACDoL,EAAK9K,aAAa,aAClBk3D,SAASwkB,WAAahkF,SAASoT,EAAKzK,aAAa,YAAc,OAEhE,IAAIyK,EAAK9K,aAAa,UAAW,CACpC,GAIIze,GAJAQ,EAAa+oB,EAAKzK,aAAa,UAC/Bs7E,EAAqB,KACrBC,EAAqB,IAGzB,IAAI9wE,EAAK9K,aAAa,UAAW,CAC7B27E,EAAa7wE,EAAKzK,aAAa,SAC/B,IAAIw7E,GAAwB/wE,EAAKzK,aAAa,UAAUmH,MAAM,IAC9D,KAAKjmB,EAAI,EAAGA,EAAIs6F,EAAOnuF,OAAQnM,IAC3BusB,EAAK,cAAgB/rB,EAAK,WAAaR,EAAI,IACvC21E,SAAS+iB,eAAe6B,sBACxBD,EAAOt6F,GACP21E,SAAS+iB,eAAe8B,uBAIpC,GAAIjxE,EAAK9K,aAAa,UAAW,CAC7B47E,EAAa9wE,EAAKzK,aAAa,SAC/B,IAAIiH,GAAwBwD,EAAKzK,aAAa,UAAUmH,MAAM,IAC9D,KAAKjmB,EAAI,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IACvBmW,SAAS4P,EAAO/lB,IAAMk6F,IACtBA,EAAW/jF,SAAS4P,EAAO/lB,KAE/BusB,EAAK,cAAgB/rB,EAAK,WAAaR,EAAI,IAAMC,KAAKw6F,iBAAiB10E,EAAO/lB,KAI1FupB,EAAOA,EAAKG,mBAGhB,GAAkB,MAAdjnB,EAAAgC,YAAsBhC,EAAAgC,WAAWC,kBAAkBg2F,iBAAkB,CAErE,IAAK,GADDhoC,GAAWtpD,SAASmzD,uBAAuB,gCACtCzD,EAAI,EAAGA,EAAIpG,EAASvmD,OAAQ2sD,IACjCpG,EAASoG,GAAGvvD,UAAUC,IAAI,UAG9BkpD,GAAWtpD,SAASmzD,uBAAuB,wBAC3C,KAAK,GAAIo+B,GAAI,EAAGA,EAAIjoC,EAASvmD,OAAQwuF,IACjCjoC,EAASioC,GAAGpxF,UAAUC,IAAI,cAItB,MAAR+iB,IACAtsB,KAAK26F,eAAeV,EAAU3tE,GAC9B5pB,EAAA0F,eAAekiE,mBAAmBh+C,IAGtCtsB,KAAK46F,kBAILllB,SAAA50E,UAAA05F,iBAAR,SAAyBztF,EAAe8tF,GAAA,SAAAA,MAAA,IAGpC,KAAK,GAFCC,GAAa/tF,EAAMiZ,MAAM60E,GAEtB96F,EAAI,EAAGA,EAAI+6F,EAAW5uF,OAAQnM,IACjB,MAAdyC,EAAAgC,YAAsBhC,EAAAgC,WAAWC,kBAAkBg2F,iBACnDK,EAAW/6F,GACPqC,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa/+D,EAAA4L,YAAYgvE,SAASse,EAAW/6F,GAAIwmE,EAAAsD,WAAWK,MAC3F,IACAtnE,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,cAErC+kC,EAAW/6F,GACP21E,SAAS+iB,eAAesC,sBACxBD,EAAW/6F,GACX21E,SAAS+iB,eAAeuC,sBAIpC,OAAOF,GAAWrhE,KAAKohE,IAGnBnlB,SAAA50E,UAAA65F,eAAR,SAAuBV,EAAkB3tE,GACrC,GAAkB,MAAd9pB,EAAAgC,YAAuBhC,EAAAgC,WAAWC,kBAAkBg2F,iBAAxD,CAIA,GAAIhoC,GAAW/vD,EAAA0F,eAAeqtF,aAAmC,qBAC7DwF,EAAiB,CAErB,IAAgB,MAAZxoC,GAAoBA,EAASvmD,OAAS,EAAG,CACzC,GAAM7C,GAAUopD,EAAS,GAAGnjD,QAE5B,IADAjG,EAAQiyC,gBAAgB,SACEtwB,QAAtBhrB,KAAKk7F,cAA4B,CACjCl7F,KAAKm7F,iBAAmBjlF,SAASzS,OAAO0S,iBAAiB9M,GAAS2/B,SAClE,IAAMoyD,GAAe33F,OAAO0S,iBAAiB9M,GAAS1C,KACtD3G,MAAKk7F,cACDE,EAAajwE,QAAQ,QAAYH,OAAY9U,SAASzS,OAAO0S,iBAAiB9M,GAAS1C,OAC3F3G,KAAKq7F,QAAUt8E,KAAKmf,IAAG78B,MAAR0d,KAAYwnD,EAAAsD,WAAWiH,WAG1CznE,EAAQkzD,YACJn6D,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa/+D,EAAA4L,YAAYgvE,SAASyd,EAAU1zB,EAAAsD,WAAWK,MACtF,IACAtnE,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,cACrC1sD,EAAQwI,MAAMm3B,SAAWhpC,KAAKm7F,iBAAmB,KACjD9xF,EAAQwI,MAAMlL,MAAQ,OACtB0C,EAAQwI,MAAMypF,WAAa,SAC3BjyF,EAAQmmC,WACR,IAAI61C,GAAezmE,WAAWnb,OAAO0S,iBAAiB9M,GAAS1C,MAC/Ds0F,GAAiBj7F,KAAKk7F,eAAgC,IAAf7V,IACnCt4D,MAAMkuE,IAAmBA,EAAiB,KAC1CA,EAAiB,GAErB5xF,EAAQwI,MAAMm3B,SAAW,GACzB3/B,EAAQwI,MAAMlL,MAAQ,GAG1B,GAAI40F,GAAsC,UAArB93F,OAAgB,QAAgB,IAAO,EACxDulC,EAAWjqB,KAAKC,MAAMhf,KAAKm7F,iBAAmBF,EAAiBM,GAAkB,IACrF,KAAK,GAAIl2F,KAAOinB,GAGZ,GAFAmmC,EAAW/vD,EAAA0F,eAAeqtF,aAAapwF,GAEvB,MAAZotD,EACA,IAAK,GAAI1yD,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IACjC0yD,EAAS1yD,GAAGuP,SAASuC,MAAMm3B,SAAWA,IAM9C0sC,SAAA50E,UAAA85F,cAAR,WACsB,MAAdp4F,EAAAgC,aAAuBhC,EAAAgC,WAAWC,kBAAkBg2F,kBAKpD/kB,SAAA50E,UAAA84F,SAAR,WACI,GAAI4B,GAAsBx7F,KAAKy7F,gCACZ,OAAfz7F,KAAK85F,SACe,IAAhB0B,GACAx7F,KAAK85F,OAAO95F,KAAK85F,OAAO5tF,OAAS,GAAG5C,UAAU6N,OAAO,aACrDnX,KAAK85F,OAAO95F,KAAK85F,OAAO5tF,OAAS,GAAG5C,UAAUC,IAAI,aAElDvJ,KAAK85F,OAAO0B,EAAc,GAAGlyF,UAAU6N,OAAO,aAC9CnX,KAAK85F,OAAO0B,EAAc,GAAGlyF,UAAUC,IAAI,YAE/C44E,EAAAp4D,SAASsS,KAAK,cAEO,MAArBr8B,KAAK+5F,eACe,IAAhByB,GACAx7F,KAAK+5F,aAAa/5F,KAAK+5F,aAAa7tF,OAAS,GAAG5C,UAAU6N,OAAO,aACjEnX,KAAK+5F,aAAa/5F,KAAK+5F,aAAa7tF,OAAS,GAAG5C,UAAUC,IAAI,aAE9DvJ,KAAK+5F,aAAayB,EAAc,GAAGlyF,UAAU6N,OAAO,aACpDnX,KAAK+5F,aAAayB,EAAc,GAAGlyF,UAAUC,IAAI,cAKrDmsE,SAAA50E,UAAA+4F,SAAR,WACI,GAAI2B,GAAsBx7F,KAAKy7F,gCACZ,OAAfz7F,KAAK85F,SACD0B,IAAgBx7F,KAAK85F,OAAO5tF,OAAS,GACrClM,KAAK85F,OAAO,GAAGxwF,UAAU6N,OAAO,aAChCnX,KAAK85F,OAAO,GAAGxwF,UAAUC,IAAI,aAE7BvJ,KAAK85F,OAAO0B,EAAc,GAAGlyF,UAAU6N,OAAO,aAC9CnX,KAAK85F,OAAO0B,EAAc,GAAGlyF,UAAUC,IAAI,YAE/C44E,EAAAp4D,SAASsS,KAAK,cAEO,MAArBr8B,KAAK+5F,eACDyB,IAAgBx7F,KAAK+5F,aAAa7tF,OAAS,GAC3ClM,KAAK+5F,aAAa,GAAGzwF,UAAU6N,OAAO,aACtCnX,KAAK+5F,aAAa,GAAGzwF,UAAUC,IAAI,aAEnCvJ,KAAK+5F,aAAayB,EAAc,GAAGlyF,UAAU6N,OAAO,aACpDnX,KAAK+5F,aAAayB,EAAc,GAAGlyF,UAAUC,IAAI,cAKrDmsE,SAAA50E,UAAA46F,QAAR,SAAgBC,GACRA,EAAO,GAAKA,EAAO37F,KAAK85F,OAAO5tF,OAAS,IAI5ClM,KAAKy7F,iCACc,MAAfz7F,KAAK85F,SACL95F,KAAK85F,OAAO6B,GAAMryF,UAAU6N,OAAO,aACnCnX,KAAK85F,OAAO6B,GAAMryF,UAAUC,IAAI,WAC/BvJ,KAAK85F,OAAO6B,GAAsBC,kBAGd,MAArB57F,KAAK+5F,eACL/5F,KAAK+5F,aAAa4B,GAAMryF,UAAU6N,OAAO,aACzCnX,KAAK+5F,aAAa4B,GAAMryF,UAAUC,IAAI,cAItCmsE,SAAA50E,UAAA26F,+BAAR,WAEI,IAAK,GADDD,GAAsB,EACjBz7F,EAAY,EAAGA,EAAIC,KAAK85F,OAAO5tF,OAAQnM,IAAK,CACjD,GAAIsJ,GAAoCrJ,KAAK85F,OAAO/5F,EACrC,OAAXsJ,IACKA,EAAQC,UAAUiO,SAAS,cAC5BlO,EAAQC,UAAUC,IAAI,aAEtBF,EAAQC,UAAUiO,SAAS,aAC3BikF,EAAcz7F,EACdsJ,EAAQC,UAAU6N,OAAO,aAKrC,IAAK,GAAIpX,GAAY,EAAGA,EAAIC,KAAK+5F,aAAa7tF,OAAQnM,IAAK,CACvD,GAAIsJ,GAAoCrJ,KAAK+5F,aAAah6F,EAC3C,OAAXsJ,IACKA,EAAQC,UAAUiO,SAAS,cAC5BlO,EAAQC,UAAUC,IAAI,aAEtBF,EAAQC,UAAUiO,SAAS,YAC3BlO,EAAQC,UAAU6N,OAAO,YAKrC,MAAOqkF,IAGG9lB,SAAAC,YAAd,SAA0BkmB,GAAA,SAAAA,OAAA,GAClBnmB,SAASomB,WAAWD,IACpBnmB,SAAShgB,QAIHggB,SAAAhgB,KAAd,WACIggB,SAASqmB,kBAAmB,CAE5B,IAAIC,GAAmBv1B,EAAA6B,WAAWmvB,gBAClC,IAAI/0F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,GACIA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAC1DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWmvB,kBAKvD/hB,SAASwmB,iBACTz4F,OAAOsO,iBAAiB,SAAU2jE,SAASwmB,iBAGhCxmB,SAAAwmB,eAAf,WACIxmB,SAASpmE,SAASosF,QAAQhmB,SAASwkB,aAGzBxkB,SAAA8gB,eAAd,WACI/yF,OAAO6kD,oBAAoB,SAAUotB,SAASwmB,iBAGpCxmB,SAAAomB,WAAd,SAAyBD,EAA+BM,GACpD,MADqB,UAAAN,OAAA,GAA+B,SAAAM,OAAA,MAC/C35F,EAAAgC,aAAehC,EAAAgC,WAAWC,kBAAkB23F,yBAK7C1mB,SAASqmB,mBAAoBF,MAI7BptF,EAAAyB,cAAckqE,oBAIbx3E,EAAA6F,YAAY2gE,kBAAoB+yB,KAIjCx1B,EAAAkF,eAAerC,cAnUhBkM,SAAA+iB,gBACH6B,sBAAuB,GACvBC,uBAAwB,GACxBQ,sBAAuB,GACvBC,uBAAwB,KAKbtlB,SAAAqmB,kBAA4B,EAC5BrmB,SAAAwkB,cA+TnBxkB,WA1Uar1E,GAAAq1E,SAAQA,GrDkqlBf,SAASp1E,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsDtrlBjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAO/B65F,EAAA,mBAAAA,kBAEA,MADWA,eAAAvB,kBAFXuB,cAAAp+E,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAekD,UtDyrlBxBmwE,iBsDxrlBK35F,GAAA25F,cAAaA,EAIb35F,EAAAg8F,gCAMTC,WAAY,YAMZC,OAAQ,QAMRC,OAAQ,QAMRC,aAAc,cAMdC,cAAe,eAIfC,oBAAqB,oBAIrBC,iBAAkB,iBAMlBC,qBAAsB,qBAMtBC,iBAAkB,kBAMlBC,gBAAiB,kBAGR18F,EAAA28F,6BAMTC,YAAa,aAMbC,sBAAuB,sBAMvBC,SAAU,UAMVC,eAAgB,eAMhBC,UAAW,WAMXC,gBAAiB,gBAMjBC,MAAO,SAGEl9F,EAAAm9F,gCAMTC,kBAAmB,kBAMnBC,uBAAwB,sBAMxBC,YAAa,aAMbC,WAAY,YAOZC,mBAAoB,oBAQpBC,SAAU,WAMVC,gBAAiB,iBAIjBC,mBAAoB,qBtDkklBlB,SAAS19F,EAAQD,EAASF,GAE/B,YuDvulBD,IAAAgiF,GAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3ByB,EAAAzB,EAA0B,GAC1ByN,EAAAzN,EAAwB,GACxB6B,EAAA7B,EAA0B,GAE1B81E,EAAA,WAUI,QAAAA,gBATOj2E,KAAA49B,SAAmB,EAKlB59B,KAAA85F,UACA95F,KAAAi+F,WACAj+F,KAAAk+F,YAAsB,EA6PlC,MAzPIjoB,cAAAn1E,UAAAgD,WAAA,WAEsB,MAAdtB,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkByjF,kBACqB,KAAlD1lF,EAAAgC,WAAWC,kBAAkBi2D,kBAC7B16D,KAAKm+F,sBAAsBjyF,OAAS,IAEpClM,KAAKo+F,QAAUj1F,SAASC,eAAe,gBACvCpJ,KAAKq+F,aAAel1F,SAASC,eAAe,8BAC5CpJ,KAAKs+F,cAAgBn1F,SAASC,eAAe,sBAEzB,MAAhBpJ,KAAKo+F,SAAwC,MAArBp+F,KAAKq+F,eAC7Br+F,KAAKu+F,cACLv+F,KAAK49B,SAAU,KAKnBq4C,aAAAn1E,UAAAq9F,oBAAR,WACI,MACkB,OAAd37F,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkB+5F,iBAAiBtyF,OAAS,EAEhD1J,EAAAgC,WAAWC,kBAAkB+5F,iBAAiBzyD,OAAO,SAAClsC,GAAM,MAAAA,KAAM+N,EAAA1K,QAAQmC,UAMjF4wE,aAAAn1E,UAAAy9F,YAAR,WACI,GAAkB,MAAd/7F,EAAAgC,YAAsD,MAAhChC,EAAAgC,WAAWC,mBAA6BzE,KAAKm+F,sBAAsBjyF,OAAS,EAGlG,IAAK,GAFDuyF,GAA6Bz+F,KAAKm+F,sBAClCxC,EAAe,EACV57F,EAAY,EAAGA,EAAI0+F,EAAYvyF,OAAQnM,IACxCA,EAAI,KAAO,IACX47F,EAAO37F,KAAK0+F,kBAEhB1+F,KAAK2+F,eAAeF,EAAY1+F,GAAI47F,EAI5C,IAAI37F,KAAK85F,OAAO5tF,OAAS,EAAG,CACxB,GAAIwtF,GAA8BvwF,SAASC,eAAe,yBACtDuwF,EAA8BxwF,SAASC,eAAe,wBACpC,OAAlBswF,IACAA,EAAepwF,UAAU6N,OAAO,WAChCuiF,EAAenX,QAAUviF,KAAK45F,SAASvlF,KAAKrU,OAE1B,MAAlB25F,IACAA,EAAerwF,UAAU6N,OAAO,WAChCwiF,EAAepX,QAAUviF,KAAK65F,SAASxlF,KAAKrU,OAEtB,MAAtBA,KAAKs+F,eACLt+F,KAAKs+F,cAAch1F,UAAU6N,OAAO,WAI5C,GAAMynF,GAAUz1F,SAASC,eAAe,UACzB,OAAXw1F,IAEkB,MAAdp8F,EAAAgC,YACgC,MAAhChC,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkBo6F,mBAE7BD,EAAQt1F,UAAU6N,OAAO,WAEzBynF,EAAQt1F,UAAUC,IAAI,aAK1B0sE,aAAAn1E,UAAA49F,eAAR,WACI,GAAII,GAA0C31F,SAASkX,cAAc,OACjE0+E,EAA+C51F,SAASkX,cAAc,OACtE2+E,EAA4C71F,SAASkX,cAAc,MAwBvE,OAtBAy+E,GAAQx1F,UAAUC,IAAI,oBACtBw1F,EAAaz1F,UAAUC,IAAI,iBAC3By1F,EAAU11F,UAAUC,IAAI,0BAEG,IAAvBvJ,KAAK85F,OAAO5tF,QACZ4yF,EAAQx1F,UAAUC,IAAI,WACtBy1F,EAAU11F,UAAUC,IAAI,YAExBu1F,EAAQx1F,UAAUC,IAAI,aAG1Bu1F,EAAQxtF,YAAYytF,GAEpB/+F,KAAK85F,OAAO9mF,KAAK8rF,GACjB9+F,KAAKi+F,QAAQjrF,KAAKgsF,GACO,MAArBh/F,KAAKq+F,cACLr+F,KAAKq+F,aAAa/sF,YAAYwtF,GAER,MAAtB9+F,KAAKs+F,eACLt+F,KAAKs+F,cAAchtF,YAAY0tF,GAG5Bh/F,KAAK85F,OAAO5tF,OAAS,GAGxB+pE,aAAAn1E,UAAA69F,eAAR,SAAuB1gF,EAAc09E,GACjC,GAAIhS,GAA6CxgF,SAASkX,cAAc,OACpEk0C,EAAuCprD,SAASkX,cAAc,OAC9DupE,EAA8CzgF,SAASkX,cAAc,OACrEwpE,EAAkD1gF,SAASkX,cAAc,OACzEypE,EAA2C3gF,SAASkX,cAAc,MAEtEspE,GAAWrgF,UAAUC,IAAI,wBACzBgrD,EAAKjrD,UAAUC,IAAI,mBACnBqgF,EAAYtgF,UAAUC,IAAI,sBAC1BsgF,EAAgBvgF,UAAUC,IAAI,eAC9BugF,EAASxgF,UAAUC,IAAI,mBACvBugF,EAASx9E,aAAa,OAAQ2R,EAE9B,IAAIg9C,GAAM9xD,SAASkX,cAAc,MACjC46C,GAAI3uD,aACA,MACA9J,EAAAgC,WAAWC,kBAAkBi2D,iBAAmBz8C,EAAO,IAAMxa,OAAgB,QAAI,aAErFw3D,EAAIlpD,iBAAiB,OAAQ/R,KAAKi/F,YAAY5qF,KAAKrU,KAAM8pF,EAAUF,EAAa3rE,IAEhF0rE,EAAWr4E,YAAYijD,GACvBA,EAAKjjD,YAAYs4E,GACjBA,EAAYt4E,YAAYu4E,GACxBt1B,EAAKjjD,YAAYw4E,GACjBA,EAASvH,QAAUviF,KAAK+pF,WAAW11E,KAAKrU,MAEf,MAArBA,KAAK85F,OAAO6B,IACZ37F,KAAK85F,OAAO6B,GAAM9V,WAAWv0E,YAAYq4E,IAIzC1T,aAAAn1E,UAAAm+F,YAAR,SAAoBnV,EAA0BF,EAA6B3rE,GACvE2rE,EAAY/wD,WAAWpS,YAAYmjE,GACnCE,EAASj4E,MAAM+kD,WACX,OAASp0D,EAAAgC,WAAWC,kBAAkBi2D,iBAAmBz8C,EAAO,IAAMxa,OAAgB,QAAI,cAG1FwyE,aAAAn1E,UAAA84F,SAAR,WACS55F,KAAK49B,UAGVukD,EAAAp4D,SAASsS,KAAK,aACdr8B,KAAKk/F,kBACLl/F,KAAKk+F,cACgC,MAAjCl+F,KAAK85F,OAAO95F,KAAKk+F,eACjBl+F,KAAKk+F,YAAcl+F,KAAK85F,OAAO5tF,OAAS,GAEP,MAAjClM,KAAK85F,OAAO95F,KAAKk+F,eACjBl+F,KAAK85F,OAAO95F,KAAKk+F,aAAa50F,UAAU6N,OAAO,aAC/CnX,KAAK85F,OAAO95F,KAAKk+F,aAAa50F,UAAUC,IAAI,YAEV,MAAlCvJ,KAAKi+F,QAAQj+F,KAAKk+F,cAClBl+F,KAAKi+F,QAAQj+F,KAAKk+F,aAAa50F,UAAUC,IAAI,aAI7C0sE,aAAAn1E,UAAA+4F,SAAR,WACS75F,KAAK49B,UAGVukD,EAAAp4D,SAASsS,KAAK,aACdr8B,KAAKk/F,kBACLl/F,KAAKk+F,cACgC,MAAjCl+F,KAAK85F,OAAO95F,KAAKk+F,eACjBl+F,KAAKk+F,YAAc,GAEc,MAAjCl+F,KAAK85F,OAAO95F,KAAKk+F,eACjBl+F,KAAK85F,OAAO95F,KAAKk+F,aAAa50F,UAAU6N,OAAO,aAC/CnX,KAAK85F,OAAO95F,KAAKk+F,aAAa50F,UAAUC,IAAI,YAEV,MAAlCvJ,KAAKi+F,QAAQj+F,KAAKk+F,cAClBl+F,KAAKi+F,QAAQj+F,KAAKk+F,aAAa50F,UAAUC,IAAI,aAI7C0sE,aAAAn1E,UAAAo+F,gBAAR,WACI,GAAKl/F,KAAK49B,QAAV,CAGA,IAAK,GAAI79B,GAAY,EAAGA,EAAIC,KAAK85F,OAAO5tF,OAAQnM,IACxCC,KAAK85F,OAAO/5F,GAAGuJ,UAAUiO,SAAS,YAClCvX,KAAK85F,OAAO/5F,GAAGuJ,UAAU6N,OAAO,WAE/BnX,KAAK85F,OAAO/5F,GAAGuJ,UAAUiO,SAAS,cACnCvX,KAAK85F,OAAO/5F,GAAGuJ,UAAUC,IAAI,YAIrC,KAAK,GAAIxJ,GAAY,EAAGA,EAAIC,KAAKi+F,QAAQ/xF,OAAQnM,IACzCC,KAAKi+F,QAAQl+F,GAAGuJ,UAAUiO,SAAS,YACnCvX,KAAKi+F,QAAQl+F,GAAGuJ,UAAU6N,OAAO,aAKrC8+D,aAAAn1E,UAAAipF,WAAR,SAAmBlqF,GACf,GAAKG,KAAK49B,UAGVukD,EAAAp4D,SAASsS,KAAK,aACL,MAALx8B,GAAyB,MAAZA,EAAEkL,QAAkBlL,EAAEkL,OAAOyT,aAAa,SAAS,CAChE,GAAIlb,GAAkB1B,EAAA2B,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EAErE,IAAe,MAAXL,GAAmBA,EAAe,MAAa,WAAKA,EAAc,KAAG,CACrE,GAAIiI,GAAoBjI,EAAe,MAAa,UAChDkI,EAAgBlI,EAAc,KAAEmI,UAAU,GAC1Cu+E,EAAiBz+E,EAAY,UAAY1L,EAAEkL,OAAO8T,aAAa,QAAU,IAAMrT,EAC/EkvB,EAAoBvxB,SAASC,eAAe,OAKhD,IAJY,MAARsxB,IACAA,EAAK7oB,MAAMC,QAAU,QAEzB9P,EAAAsC,UAAUA,UAAU2lF,WAAWpqF,EAAEkL,OAAO8T,aAAa,SACjD7c,EAAAsC,UAAUA,UAAU4lF,iBACpB,MAIJ50E,YAAW,WACP7R,OAAOC,SAAS0J,QAAQ48E,IACzB,QAKR/T,aAAAn1E,UAAAmK,KAAP,WACI,QAAIjL,KAAK49B,YACD59B,KAAKo+F,QAAQ90F,UAAUiO,SAAS,eAChCvX,KAAKo+F,QAAQ90F,UAAU6N,OAAO,cACvB,KASZ8+D,aAAAn1E,UAAA8+E,QAAP,WACS5/E,KAAK49B,UAGL59B,KAAKo+F,QAAQ90F,UAAUiO,SAAS,cACjCvX,KAAKo+F,QAAQ90F,UAAUC,IAAI,eAGvC0sE,eArQa51E,GAAA41E,aAAYA,GvD68lBnB,SAAS31E,EAAQD,EAASF,GAE/B,YwDv9lBD,IAAAiT,GAAAjT,EAA2E,GAC3EgiF,EAAAhiF,EAAyB,IACzB6B,EAAA7B,EAA0B,GAE1Bg4E,EAAA,mBAAAA,gBAkEA,MA5DWA,aAAA9e,WAAP,WACI8e,YAAYwgB,mBAEPxgB,YAAYygB,UACbzgB,YAAYgnB,WAAWxpF,MAAM,GACH,MAAtBwiE,YAAYinB,SACZjnB,YAAYinB,OAAOvtF,MAAMC,QAAU,SAGvCqmE,YAAYygB,SAAU,EACtB52F,EAAAsC,UAAUA,UAAU89E,aAAa,SAAS,KAI3CjK,YAAAjf,YAAP,WACQif,YAAYygB,UACZzgB,YAAYwgB,mBAEZxgB,YAAYknB,YAAY1pF,MAAM,IACJ,MAAtBwiE,YAAYinB,QAAmBjnB,YAAYinB,OAAO91F,UAAUiO,SAAS,cACrE4gE,YAAYinB,OAAO91F,UAAUC,IAAI,aAGrCvH,EAAAsC,UAAUA,UAAU89E,aAAa,SAAS;EAInCjK,YAAAwgB,iBAAf,WAC8B,MAAtBxgB,YAAYinB,SACZjnB,YAAYinB,OAASj2F,SAASC,eAAe,gBAGnB,MAA1B+uE,YAAYgnB,aACZhnB,YAAYgnB,WAAa/rF,EAAAa,iBAAiB,aAC1CkkE,YAAYgnB,WAAWjrF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKoQ,aAG/B,MAA3B+nE,YAAYknB,cACZlnB,YAAYknB,YAAcjsF,EAAAa,iBAAiB,cAC3CkkE,YAAYknB,YAAYnrF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKuoF,cAIpDpQ,YAAA/nE,WAAf,WACI+nE,YAAYwgB,mBAEc,MAAtBxgB,YAAYinB,QAAkBjnB,YAAYinB,OAAO91F,UAAUiO,SAAS,eACpE4gE,YAAYinB,OAAO91F,UAAU6N,OAAO,aACpCgrE,EAAAp4D,SAASsS,KAAK,mBAIP87C,YAAAoQ,WAAf,WACIpQ,YAAYwgB,mBACc,MAAtBxgB,YAAYinB,SACZjnB,YAAYinB,OAAOvtF,MAAMC,QAAU,QAGvCqmE,YAAYygB,SAAU,GA/DXzgB,YAAAygB,SAAmB,EAiEtCzgB,cAlEa93E,GAAA83E,YAAWA,GxDkhmBlB,SAAS73E,EAAQD,EAASF,GAE/B,YyDxhmBD,IAAA6B,GAAA7B,EAAuC,GACvCm/F,EAAAn/F,EAAgC,IAChCqmE,EAAArmE,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAE5BsO,EAAAtO,EAA8B,IAC9BwO,EAAAxO,EAAsC,IACtCuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3BwmE,EAAAxmE,EAA+B,IAC/B4C,EAAA5C,EAAwB,GACxBo/F,EAAAp/F,EAAmC,IACnCyC,EAAAzC,EAA4B,IAC5BkT,EAAAlT,EAAwB,IAExBk1E,EAAA,WAmBI,QAAAA,uBACQ7yE,EAAAgC,WAAWC,kBAAkBmoE,sBAC7B5sE,KAAKw/F,mBAAqB,GAAID,GAAAE,mBAE9Bz/F,KAAK0/F,gBAAkB,GAAIJ,GAAAK,gBAG/B3/F,KAAK4/F,eA0Mb,MAnMYvqB,qBAAAv0E,UAAA8+F,aAAR,WACgC,MAAxB5/F,KAAK0/F,kBACL1/F,KAAK0/F,gBAAgBxrF,GAAG,iBAAkBlU,KAAK8hF,eAAeztE,KAAKrU,OACnEA,KAAK0/F,gBAAgBxrF,GAAG,eAAgBlU,KAAK6/F,aAAaxrF,KAAKrU,OAC/DA,KAAK0/F,gBAAgBxrF,GAAG,kBAAmBlU,KAAK8/F,gBAAgBzrF,KAAKrU,QAG1C,MAA3BA,KAAKw/F,oBACLx/F,KAAK+/F,iBAAiB//F,KAAKggG,gBAAgB3rF,KAAKrU,QAQhDq1E,oBAAAv0E,UAAAm/F,YAAR,SAAoBv4F,GAChB,GAA4B,MAAxB1H,KAAK0/F,gBAAyB,CAC9B,GAAIQ,GAAax4F,EAAQw4E,OACrB5zD,EAAO5kB,EAAQ4kB,IAED,cAAd4zE,IACAA,EAAa,YAGjBlgG,KAAK0/F,gBAAgBO,YAAYC,EAAY5zE,GAGjD,GAA+B,MAA3BtsB,KAAKw/F,mBAA4B,CACjC,IAAKx/F,KAAKw/F,mBAAmBW,0BAEzB,WADAngG,MAAKw/F,mBAAmBY,WAAWpgG,KAAKigG,YAAY5rF,KAAKrU,KAAM0H,GAInE1H,MAAKw/F,mBACAS,YAAYv4F,GACZswD,KAAK,cAFVh4D,SAOW,SAACyH,QAQZ4tE,oBAAAv0E,UAAAu/F,cAAR,SAAsB34F,GAClB,MAA+B,OAA3B1H,KAAKw/F,mBACEx/F,KAAKw/F,mBAAmBa,cAAc34F,GAG1CX,QAAQu5F,QAAS5oC,KAAM,oCAG1B2d,oBAAAv0E,UAAAi/F,iBAAR,SAAyBQ,GACU,MAA3BvgG,KAAKw/F,oBACLx/F,KAAKw/F,mBAAmBO,iBAAiBQ,IAIzClrB,oBAAAv0E,UAAA84E,WAAR,WACmC,MAA3B55E,KAAKw/F,oBACLx/F,KAAKw/F,mBAAmB5lB,cAQxBvE,oBAAAv0E,UAAAk/F,gBAAR,SAAwBt4F,GACpB,GAAe,MAAXA,GAOqC,OAArCA,EAAQ84F,YAAY51F,cAAxB,CAOA,GAAqC,gBAAjClD,EAAQ+4F,QAAQ71F,cAChB,OAAQlD,EAAQw4E,OAAOt1E,eACnB,IAAK,iBACD5K,KAAK8hF,eAAep6E,EAAQ4kB,KAC5B,MACJ,KAAK,eACDtsB,KAAK6/F,cACL,MACJ,KAAK,kBACD7/F,KAAK8/F,gBAAgBp4F,EAAQ4kB,MAKzC,GAAqC,cAAjC5kB,EAAQ+4F,QAAQ71F,cAChB,OAAQlD,EAAQw4E,OAAOt1E,eACnB,IAAK,SACD5K,KAAK0gG,iBAAiBh5F,EAAQ4kB,SAMtC+oD,oBAAAv0E,UAAAghF,eAAR,SAAuBx1D,GAEO,MAAtBA,EAAiB,YACjBq6C,EAAAkF,eAAe4gB,qBAAqBngE,EAAiB,YAIrDjZ,EAAAwD,QAAQ8iD,iBAIZ6M,EAAAkD,eAAesY,gBAAgB11D,IAG3B+oD,oBAAAv0E,UAAA++F,aAAR,WACI,IAAK,GAAIx6F,KAAOrD,GAAAkD,cAAcC,KAAK8K,YAC/BxB,EAAAyB,cAAcC,qBAAqBnO,EAAAkD,cAAcC,KAAK8K,YAAY5K,GAGtEsJ,GAAAkB,sBAAsBC,SAAU,EAChCnB,EAAAkB,sBAAsBE,WACtBrN,EAAA0F,eAAe4H,uBAAwB,EAEvCrN,EAAAoG,YAAYmsE,eACRwD,aACIC,QAAStD,oBACTzwE,IAAK,KACLsG,QAAS,MAEb2tE,eAAgB,OAIhBxD,oBAAAv0E,UAAAg/F,gBAAR,SAAwBxzE,GACpB,GAAIy/C,GAAY/pE,EAAA8T,QAAQC,UAAUi2D,aAC9BD,GAAUG,gBAAgB,qBAA+B,MAAR5/C,GAAgBA,EAAuB,mBACxFy/C,EAAUxiE,IAAIvH,EAAA8T,QAAQC,UAAUzO,MAAM+nE,iBAAkB,mBAAoB/iD,EAAuB,kBACnGvpB,EAAAuF,QAAQC,eAIR8sE,oBAAAv0E,UAAA4/F,iBAAR,SAAyBp0E,GACT,MAARA,GAIJ1pB,EAAA6F,YAAYikE,mBAAmBpgD,IAOrB+oD,oBAAAvxE,WAAd,WACwC,MAAhCuxE,oBAAoB/lE,WACpB+lE,oBAAoB/lE,SAAW,GAAI+lE,uBAI7BA,oBAAA4qB,YAAd,SAA0Bv4F,GACc,MAAhC2tE,oBAAoB/lE,UACpB+lE,oBAAoB/lE,SAAS2wF,YAAYv4F,IAInC2tE,oBAAAgrB,cAAd,SAA4B34F,GACxB,MAAoC,OAAhC2tE,oBAAoB/lE,SACb+lE,oBAAoB/lE,SAAS+wF,cAAc34F,GAG/CX,QAAQu5F,QAAS5oC,KAAM,oCAGpB2d,oBAAA0qB,iBAAd,SAA+BQ,GAC3B,GAAoC,MAAhClrB,oBAAoB/lE,SACpB,MAAO+lE,qBAAoB/lE,SAASywF,iBAAiBQ,IAI/ClrB,oBAAAuE,WAAd,WACwC,MAAhCvE,oBAAoB/lE,UACpB+lE,oBAAoB/lE,SAASsqE,cAGzCvE,sBApOah1E,GAAAg1E,oBAAmBA,GzDgsmB1B,SAAS/0E,EAAQD,EAASF,GAE/B,Y0DhtmBD,IAAAyB,GAAAzB,EAA0B,GAC1BqC,EAAArC,EAA2B,GAE3Bw/F,EAAA,WAII,QAAAA,mBACI3/F,KAAK2gG,WAAY,CAEjB,IAAMr9F,GAAkB1B,EAAA2B,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EACvE,IAAe,MAAXL,GAAmBA,EAAe,MAAa,WAAKA,EAAc,KAAG,CACrE,GAAIiI,GAAoBjI,EAAe,MAAa,SAEpD,KACItD,KAAK4gG,cAAgB,GAAIC,eAAcC,wBACnCv1F,EACAvL,KAAK+gG,SACLv+F,EAAAgC,WAAWC,mBAEfzE,KAAK2gG,WAAY,EACnB,MAAO9gG,MA8BrB,MAtBY8/F,iBAAA7+F,UAAAigG,SAAR,WACI,GAAIv1F,GAAQ,GAENlI,EAAkB1B,EAAA2B,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EAKvE,OAJe,OAAXL,GAAmBA,EAAc,OACjCkI,EAAQlI,EAAc,KAAEmI,UAAU,GAAGua,MAAM,KAAK,IAG7Cxa,GAGJm0F,gBAAA7+F,UAAAm/F,YAAP,SAAmBC,EAAoB5zE,GACT,MAAtBtsB,KAAK4gG,eAAyB5gG,KAAK2gG,WACnC3gG,KAAK4gG,cAAcX,YAAYC,EAAY5zE,IAI5CqzE,gBAAA7+F,UAAAoT,GAAP,SAAUgsF,EAAoBc,GACA,MAAtBhhG,KAAK4gG,eACL5gG,KAAK4gG,cAAc1sF,GAAGgsF,EAAYc,IAG9CrB,kBAhDat/F,GAAAs/F,gBAAeA,G1D0vmBtB,SAASr/F,EAAQD,EAASF,GAE/B,Y2DhwmBD,IAAO8gG,GAAsBC,UAAUD,oBAEhCE,EAAqBD,UAAUC,mBACtC3+F,EAAArC,EAA2B,GAC3ByB,EAAAzB,EAA0B,GAE1B6B,EAAA7B,EAA0B,GAE1Bs/F,EAAA,WAMI,QAAAA,sBANJ,GAAAjmF,GAAAxZ,IAOQ,IAAoC,MAAhCwC,EAAAgC,WAAWC,mBAI4C,KAAvDjC,EAAAgC,WAAWC,kBAAkBmoE,sBAIjC,IACI5sE,KAAKohG,mBACLphG,KAAKqhG,uBAAwB,EAC7BrhG,KAAKshG,oBAAsB,GAAIL,GAC3Bz+F,EAAAgC,WAAWC,kBAAkBmoE,sBAC7B5sE,KAAK+gG,SACL,WACIvnF,EAAK6nF,uBAAwB,EAC7Br/F,EAAAsC,UAAUA,UAAUi9F,wBACpB/nF,EAAKgoF,wBAGbxhG,KAAKyhG,SAAWzhG,KAAK+gG,WACvB,MAAOlhG,KA0GjB,MAnGY4/F,oBAAA3+F,UAAAigG,SAAR,WACI,GAAIv1F,GAAQ,GAENlI,EAAkB1B,EAAA2B,UAAUC,SAASC,OAAOC,SAASC,MAAM,GAAM,EAKvE,OAJe,OAAXL,GAAmBA,EAAc,OACjCkI,EAAQlI,EAAc,KAAEmI,UAAU,GAAGua,MAAM,KAAK,IAG7Cxa,GAGHi0F,mBAAA3+F,UAAA4gG,aAAR,WACI,GAAMC,GAAe3hG,KAAK+gG,UAC1B,OAAOY,IAAgB3hG,KAAKyhG,UAGxBhC,mBAAA3+F,UAAA8gG,YAAR,WACI,GAAK5hG,KAAK0hG,gBAIL1hG,KAAKshG,oBAAV,CAIA,GAAMl4C,GAAQppD,KACRwL,EAAQxL,KAAK+gG,UACnB/gG,MAAKshG,oBACAM,YAAY,GAAIT,GAAmB31F,IACnCwsD,KAAK,WAIF5O,EAAMq4C,SAAWj2F,IANzBxL,SAQW,SAACH,QAOR4/F,mBAAA3+F,UAAA0gG,oBAAR,WACI,IAAK,GAAIzhG,GAAI,EAAGA,EAAIC,KAAKohG,gBAAgBl1F,OAAQnM,IAAK,CAClD,GAAMoB,GAAKnB,KAAKohG,gBAAgBrhG,EAC5BoB,IACAA,IAIRnB,KAAKohG,oBAGF3B,mBAAA3+F,UAAAs/F,WAAP,SAAkB14F,GACc,MAAxB1H,KAAKohG,iBACLphG,KAAKohG,gBAAgBpuF,KAAKtL,IAI3B+3F,mBAAA3+F,UAAAq/F,wBAAP,WACI,MAAOngG,MAAKqhG,uBAGT5B,mBAAA3+F,UAAAm/F,YAAP,SAAmBv4F,GACf,MAAK1H,MAAKshG,qBAIVthG,KAAK4hG,cACE5hG,KAAKshG,oBAAoBrB,YAAYv4F,IAJjCX,QAAQu5F,OAAO,GAAItlF,OAAM,qBAOjCykF,mBAAA3+F,UAAAu/F,cAAP,SAAqB34F,GACjB,MAAK1H,MAAKshG,qBAIVthG,KAAK4hG,cACE5hG,KAAKshG,oBAAoBjB,cAAc34F,IAJnCX,QAAQu5F,QAAS5oC,KAAM,qBAO/B+nC,mBAAA3+F,UAAAi/F,iBAAP,SAAwBQ,GACfvgG,KAAKshG,sBAIVthG,KAAK4hG,cACL5hG,KAAKshG,oBAAoBvB,iBAAiBQ,KAGvCd,mBAAA3+F,UAAA84E,WAAP,WACS55E,KAAKshG,qBAIVthG,KAAKshG,oBAAoB1nB,aAAzB55E,SAA4C,SAACH,OAIrD4/F,qBAtIap/F,GAAAo/F,mBAAkBA,G3D+2mBzB,SAASn/F,EAAQD,EAASF,GAE/B,Y4Dz3mBD,IAAAgiF,GAAAhiF,EAAyB,IACzByN,EAAAzN,EAAwB,GACxBwC,EAAAxC,EAA4B,IAC5B6B,EAAA7B,EAAyC,GACzC40E,EAAA50E,EAA0B,IAE1BiC,EAAAjC,EAA0B,IAC1ByB,EAAAzB,EAAmC,GAEnCs5E,EAAA,mBAAAA,iBAuTA,MAtRkBA,cAAAzC,SAAd,SAAuBnjD,EAAmCokC,IAEjDr2D,EAAAqG,MAAMC,kBAAkB+vD,KACxBr2D,EAAAqG,MAAMC,kBAAkB+vD,EAASohB,WAClCphB,EAASohB,SAASntE,OAAS,GAEvBtK,EAAAqG,MAAMC,kBAAkBuxE,aAAa5iB,UACrC4iB,aAAa5iB,OAAS1tD,SAASC,eAAe,iBAEzCxH,EAAAqG,MAAMC,kBAAkBuxE,aAAa5iB,UACtC4iB,aAAa5iB,OAAOvtD,UAAUC,IAAI,gBAClCkwE,aAAa0Y,MAAQ1Y,aAAa5iB,OAAOu7B,qBAAqB,MAAM,GACpE3Y,aAAavY,KAAO/3D,SAASC,eAAe,qBAE5CqwE,aAAa4Y,cAAgBlpF,SAASC,eAAe,wBACrDqwE,aAAaqL,aAIjBljF,EAAAqG,MAAMC,kBAAkBuxE,aAAa5iB,QACrChjC,EAASokC,IAETwhB,aAAa5lD,SAAWA,EACxB4lD,aAAaxhB,SAAWA,EACxBwhB,aAAa6Y,KAAO,EACpB7Y,aAAa7nE,WAGjBiiB,EAASokC,IAQAwhB,aAAA8Y,iBAAjB,SAAkCjmE,GAW9B,GAVAmtD,aAAa+Y,kBAER5wF,EAAAqG,MAAMC,kBAAkBokB,EAAY,SACrCmtD,aAAa0Y,MAAM3oF,UAAY8iB,EAAY,OAG1C1qB,EAAAqG,MAAMC,kBAAkBokB,EAAW,QACpCmtD,aAAavY,KAAK13D,UAAY8iB,EAAW,OAGxC1qB,EAAAqG,MAAMC,kBAAkBokB,EAAc,SAAI,CAC3CmtD,aAAagZ,kBAEb,KAAK,GAAI1yF,GAAI,EAAGA,EAAIusB,EAAc,QAAEpgB,OAAQnM,IAAK,CAC7C,GAAImgF,GAAS5zD,EAAc,QAAEvsB,EAE7B,QAAQmgF,EAAOnsD,MACX,IAAK,WACD0lD,aAAaiZ,aAAaxS,EAAa,KAAGzG,aAAakZ,eAAet+E,KAAKrU,KAAMkgF,GACjF,MACJ,KAAK,OACDzG,aAAaiZ,aAAaxS,EAAa,KAAGzG,aAAamZ,WAAWv+E,KAAKrU,KAAMkgF,MAMxFt+E,EAAAqG,MAAMC,kBAAkBokB,EAAgB,YACzCmtD,aAAaooB,gBAAgBv1E,EAAgB,YAIpCmtD,aAAA+Y,gBAAjB,WAEI/Y,aAAa0Y,MAAM3oF,UAAYpH,EAAAsH,UAAUC,OAAO,YAGhD8vE,aAAagZ,mBAGbhZ,aAAaiZ,aAAatwF,EAAAsH,UAAUC,OAAO,YAAa8vE,aAAakZ,gBAElC,MAA/BlZ,aAAaqoB,iBACbroB,aAAaqoB,eAAehqF,cAAc2O,YAAYgzD,aAAaqoB,gBACnEroB,aAAaqoB,eAAiB,OAIrBroB,aAAAgZ,iBAAjB,WACI,KAAOhZ,aAAaqL,QAAQ54E,OAAS,GAAG,CACpC,GAAIk5E,GAAS3L,aAAaqL,QAAQ1jC,KAClCq4B,cAAa4Y,cAAc5rE,YAAY2+D,KAI9B3L,aAAAsoB,kBAAjB,WACI,IAAK,GAAIhiG,GAAI,EAAGA,EAAI05E,aAAaqL,QAAQ54E,OAAQnM,IAAK,CAClD,GAAIqlF,GAAS3L,aAAaqL,QAAQ/kF,EAEpB,OAAVqlF,IACAA,EAAO97E,UAAUC,IAAI,aACrB67E,EAAO7C,QAAU,QAKZ9I,aAAAiZ,aAAjB,SAA8BxxB,EAAcgf,GACxC,GAAIkF,GAAsBj8E,SAASkX,cAAc,MACjD+kE,GAAO7oB,YAAc2E,EACrBkkB,EAAO97E,UAAUC,IAAI,YAAa,mBAClC67E,EAAO7C,QAAUrC,EAEjBzG,aAAa4Y,cAAc/gF,YAAY8zE,GACvC3L,aAAaqL,QAAQ9xE,KAAKoyE,IAOb3L,aAAAkZ,eAAjB,cAAAn5E,GAAAxZ,IACImiF,GAAAp4D,SAASsS,KAAK,aAEdo9C,aAAasoB,mBAEb,IAAIhQ,EAC0B,OAA1BtY,aAAauoB,WAAqBvoB,aAAawoB,cAAgB,IAC/DlQ,EAAWtY,aAAauoB,UAAUvoB,aAAawoB,gBAEnDt/F,EAAAoG,YAAY9D,WAAWi9F,kBAAkBnQ,GAAU/5B,KAAK,SAACC,GACrDz+C,EAAK2oF,8BAII1oB,aAAA0oB,yBAAjB,WACI1oB,aAAa7nE,UAGA6nE,aAAAmZ,WAAjB,cAAAp5E,GAAAxZ,IACImiF,GAAAp4D,SAASsS,KAAK,aAEdo9C,aAAasoB,oBAEbp/F,EAAAoG,YAAY9D,WAAWH,oBAAoBkzD,KAAK,SAACC,GAC7Cz+C,EAAK4oF,0BAII3oB,aAAA2oB,qBAAjB,WACIpgG,EAAAsC,UAAUA,UAAUkgF,YAAc,oBAClC52E,EAAA1K,QAAQmB,QAOKo1E,aAAA7nE,OAAjB,WACQ6nE,aAAaxhB,SAASohB,SAASntE,SAAWutE,aAAa6Y,MACvD7Y,aAAa5iB,OAAOvtD,UAAUC,IAAI,aAClCkwE,aAAa5lD,SAAS4lD,aAAaxhB,UACnCj2D,EAAAsC,UAAUA,UAAU89E,aAAa,gBAAgB,IAEa,UAA1D3I,aAAaxhB,SAASohB,SAASI,aAAa6Y,MAAMv+D,MAClD/xB,EAAAsC,UAAUA,UAAU2uF,kBAAkBxZ,aAAaxhB,SAASohB,SAASI,aAAa6Y,MAAMpxB,MACxFuY,aAAa6Y,OACb7Y,aAAa7nE,WAEb6nE,aAAa5iB,OAAOvtD,UAAU6N,OAAO,aACrCsiE,aAAa8Y,iBAAiB9Y,aAAaxhB,SAASohB,SAASI,aAAa6Y,OAC1E7Y,aAAa6Y,OACbtwF,EAAAsC,UAAUA,UAAU89E,aAAa,gBAAgB,KAS5C3I,aAAAooB,gBAAjB,SAAiCG,GAC7B,GAAkC,MAA9BvoB,aAAa4Y,cAAuB,CACpC5Y,aAAauoB,UAAYA,EACzBvoB,aAAawoB,cAAgB,EAE7BxoB,aAAaqoB,eAAiB34F,SAASkX,cAAc,OACrDo5D,aAAaqoB,eAAex1F,aAAa,QAAS,mBAElD,IAAI+1F,GAAcl5F,SAASkX,cAAc,MACzCgiF,GAAY/1F,aAAa,QAAS,YAClC+1F,EAAY9lC,YAAc,GAE1B,IAAI+lC,GAAan5F,SAASkX,cAAc,MACxCiiF,GAAWh2F,aAAa,QAAS,WACjCg2F,EAAW/lC,YAAc,IAEzB8lC,EAAYtwF,iBACR,QACA0nE,aAAa8oB,eAAeluF,KAAKrU,MAAM,EAAMqiG,EAAaC,IAE9DA,EAAWvwF,iBACP,QACA0nE,aAAa8oB,eAAeluF,KAAKrU,MAAM,EAAOqiG,EAAaC,IAG/D7oB,aAAa+oB,gBAAkBr5F,SAASkX,cAAc,OACtDo5D,aAAa+oB,gBAAgBl2F,aAAa,QAAS,SACnDmtE,aAAa+oB,gBAAgBC,UAAYT,EAAU,GAAG9zF,WAElDurE,aAAawoB,eAAiBxoB,aAAauoB,UAAU91F,OAAS,GAC9Dm2F,EAAY/4F,UAAUC,IAAI,aAGI,GAA9BkwE,aAAawoB,eACbK,EAAWh5F,UAAUC,IAAI,aAG7BkwE,aAAaqoB,eAAexwF,YAAY+wF,GACxC5oB,aAAaqoB,eAAexwF,YAAYmoE,aAAa+oB,iBACrD/oB,aAAaqoB,eAAexwF,YAAYgxF,GACxC7oB,aAAa4Y,cAAcv6E,cAAc4qF,aACrCjpB,aAAaqoB,eACbroB,aAAa4Y,iBAKR5Y,aAAA8oB,eAAjB,SACII,EACAN,EACAC,GAFA,SAAAK,OAAA,GAIAN,EAAY/4F,UAAU6N,OAAO,aAC7BmrF,EAAWh5F,UAAU6N,OAAO,aAExBwrF,EACIlpB,aAAawoB,cAAgBxoB,aAAauoB,UAAU91F,OAAS,GAC7DutE,aAAawoB,gBAGbxoB,aAAawoB,cAAgB,GAC7BxoB,aAAawoB,gBAIjBxoB,aAAawoB,eAAiBxoB,aAAauoB,UAAU91F,OAAS,GAC9Dm2F,EAAY/4F,UAAUC,IAAI,aAGI,GAA9BkwE,aAAawoB,eACbK,EAAWh5F,UAAUC,IAAI,aAG7BkwE,aAAa+oB,gBAAgBC,UAAYhpB,aAAauoB,UAAUvoB,aAAawoB,eAAe/zF,YAGlFurE,aAAAP,YAAd,SAA0BjhB,GACtBwhB,aAAa5iB,OAAOvtD,UAAU6N,OAAO,gBACrC49D,EAAA+E,UAAUgM,gBAGArM,aAAAC,YAAd,SAA0BzhB,GACtB,OACIohB,WAEQnY,KAAMjJ,EAASvwD,QACfqxE,UAEQhlD,KAAM,WACNmtC,KAAM9+D,EAAAsH,UAAUC,OAAO,cAGvBoqB,KAAM,OACNmtC,KAAM9+D,EAAAsH,UAAUC,OAAO,WAG/Bq4F,UAAW/pC,EAAS+pC,cAKxCvoB,eAvTap5E,GAAAo5E,aAAYA,G5DklnBnB,SAASn5E,EAAQD,EAASF,GAE/B,Y6D7lnBD,IAAA6B,GAAA7B,EAA8B,GAC9BwC,EAAAxC,EAA4B,IAC5Bq0E,EAAAr0E,EAA+B,IAI/B2J,EAAA,WA6BI,QAAAA,cAAY84F,GA7BhB,GAAAppF,GAAAxZ,IA8B4B,OAAhB4iG,IACA5iG,KAAK6iG,iBACL7iG,KAAK6iG,cAAwB,SAAID,EAEjC94F,aAAag5F,aAAc,EAE3B9iG,KAAK+iG,yBAA0B,EAC/B/iG,KAAKgjG,kBAAmB,EAExBhjG,KAAK8Z,OAASxE,WAAW,WACrBkE,EAAKypF,kBACwB,IAA9Bn5F,aAAao5F,iBAyF5B,MAjFWp5F,cAAAhJ,UAAAqiG,eAAP,SAAsBv5B,GAClB5pE,KAAKojG,cAAgBx5B,EAGY,MAA7B5pE,KAAKojG,cAAch8F,QAAkBpH,KAAKojG,cAAch8F,QAAUpF,EAAAkD,cAAcC,KAAKk+F,WAAWC,OAChGtjG,KAAKujG,qBAELvjG,KAAKy1E,YAIL3rE,aAAAhJ,UAAAmiG,eAAR,WACIjjG,KAAK+iG,yBAA0B,EAE3B/iG,KAAKgjG,kBACLhjG,KAAKy1E,YAIL3rE,aAAAhJ,UAAAyiG,mBAAR,WAC8B,MAAtBvjG,KAAK6iG,eAA2D,MAAlC7iG,KAAK6iG,cAAwB,WAC3D7iG,KAAKgjG,kBAAmB,EAEpBhjG,KAAK+iG,wBACL/iG,KAAKy1E,WAELz1E,KAAK6iG,cAAwB,SAAEU,mBAAmBvjG,KAAKy1E,SAASphE,KAAKrU,SAKzE8J,aAAAhJ,UAAA20E,SAAR,WACIx7D,aAAaja,KAAK8Z,QAClBhQ,aAAag5F,aAAc,EAC3BtuB,EAAAuC,eAAeC,SAASr0E,EAAAoG,YAAYkuE,qBAAsBj3E,KAAKojG,gBAG5Dt5F,aAAAhJ,UAAAo2E,iBAAP,WAC8B,MAAtBl3E,KAAK6iG,eAA2D,MAAlC7iG,KAAK6iG,cAAwB,WAC3D7iG,KAAK6iG,cAAwB,SAAE3rB,mBAC/Bl3E,KAAK6iG,cAAgB,OAItB/4F,aAAAhJ,UAAAiJ,UAAP,WAC8B,MAAtB/J,KAAK6iG,eAA2D,MAAlC7iG,KAAK6iG,cAAwB,UAC3D7iG,KAAK6iG,cAAwB,SAAE94F,aAQzBD,aAAA05F,mBAAd,SAAiCZ,GACA,MAAzB94F,aAAawF,WACbxF,aAAawF,SAAW,GAAIxF,cAAa84F,KAInC94F,aAAAotE,iBAAd,WACiC,MAAzBptE,aAAawF,WACbxF,aAAawF,SAAS4nE,mBACtBptE,aAAawF,SAAW,OAIlBxF,aAAAgtE,oBAAd,SAAkClN,GAC9B,SAAI9/D,aAAag5F,aAAwC,MAAzBh5F,aAAawF,YACzCxF,aAAawF,SAAS6zF,eAAev5B,IAC9B,IAMD9/D,aAAAC,UAAd,WACiC,MAAzBD,aAAawF,UACbxF,aAAawF,SAASvF,aA1HND,aAAAo5F,eAAyB,GAMlCp5F,aAAAg5F,aAAuB,EAEvBh5F,aAAAwF,SAAyB,KAqH5CxF,eAlIazJ,GAAAyJ,aAAYA,G7DornBnB,SAASxJ,EAAQD,EAASF,GAE/B,Y8D5rnBD,IAAAyB,GAAAzB,EAAmC,GACnC6B,EAAA7B,EAAyC,GAEzComE,EAAApmE,EAA2B,IAC3ByC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5Bq0E,EAAAr0E,EAA+B,IAC/BiT,EAAAjT,EAA2E,GAIvE8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAErCgqE,EAAA,WAgBI,QAAAA,gBAAYkZ,GACRnzF,KAAKmzF,WAAaA,EAClBnzF,KAAKozF,aAAehgF,EAAAa,iBAAiB,eACrCjU,KAAKozF,aAAal/E,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKqzF,oBAAoBh/E,KAAKrU,OAuGtF,MAhGWi6E,gBAAAn5E,UAAA6U,MAAP,cAAA6D,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAC1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAW0Q,MAAM3T,EAAAkD,cAAcC,KAAK8K,YAAY+pE,WAAWhiB,KAAK,SAACC,GACzEuc,EAAAuC,eAAeC,SAASx9D,EAAKiqF,cAAcpvF,KAAKmF,GAAOy+C,OAIxDgiB,eAAAn5E,UAAAwyF,KAAP,cAAA95E,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAC1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAWy+F,SAAS1hG,EAAAkD,cAAcC,KAAK8K,YAAY+pE,WAAWhiB,KAAK,SAACC,GAC5Euc,EAAAuC,eAAeC,SAASx9D,EAAKi6E,aAAap/E,KAAKmF,GAAOy+C,OAIvDgiB,eAAAn5E,UAAAm9B,IAAP,cAAAzkB,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAC1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAW0+F,cAAc3rC,KAAK,SAACC,GACvCuc,EAAAuC,eAAeC,SAASx9D,EAAKoqF,YAAYvvF,KAAKmF,GAAOy+C,OAQnDgiB,eAAAn5E,UAAA2iG,cAAV,SAAwBxrC,GACfr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBt1D,EAAAoG,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBAE+D,MAAvElR,EAAS33D,OAAoC2P,EAAY+pE,aACzDC,eAAeF,WAAa9hB,EAAS33D,OAAoC2P,EAAY+pE,WAAWjP,QAGpG/oE,EAAAsC,UAAUA,UAAUsmF,gBAAiB72D,KAAM/xB,EAAAkD,cAAcC,KAAK8K,YAAY+pE,YAC1Eh6E,KAAKmzF,WAAWsQ,iBAGpB9gG,EAAAoG,YAAYotE,aAAc,GAGpB8D,eAAAn5E,UAAA2yF,aAAV,SAAuBx7B,GACnBj4D,KAAK8zF,iBAAmB77B,EAEmD,MAAvEA,EAAS33D,OAAoC2P,EAAY+pE,aACzDC,eAAeF,WAAa9hB,EAAS33D,OAAoC2P,EAAY+pE,WAAWjP,QAGpG/qE,KAAKozF,aAAaz9E,MAAM,KAGpBskE,eAAAn5E,UAAAuyF,oBAAR,WACSzxF,EAAAqG,MAAMC,kBAAkBlI,KAAK8zF,oBAC9BnxF,EAAAoG,YAAYgtE,eAAe/1E,KAAK8zF,kBAChClxF,EAAA6F,YAAY0gE,qBAEZnpE,KAAKmzF,WAAWM,eAChBzxF,EAAAsC,UAAUA,UAAUmvF,cAChBzpB,QAASprD,WACLhd,EAAA4L,YAAYjE,IAAIvJ,KAAK8zF,iBAAiB9pB,QAAQ8N,KAAM93E,KAAK8zF,iBAAiB9pB,QAAQC,QAEtFqI,IAAK3vE,EAAAoG,YAAYmxE,kBAAkB6Z,WACnC9X,SAAU1V,EAAAsD,WAAW4U,mBAAmBxC,SACxC1R,QAASvqE,KAAK8zF,iBAAiBvpB,WAIvC5nE,EAAAoG,YAAYotE,aAAc,GAGpB8D,eAAAn5E,UAAA8iG,YAAV,SAAsB3rC,GACbr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBt1D,EAAAoG,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBAEZnnE,EAAAsC,UAAUA,UAAUqnF,iBAAkB53D,KAAM/xB,EAAAkD,cAAcC,KAAK8K,YAAY+pE,YAC3Eh6E,KAAKmzF,WAAWyQ,eAGpBjhG,EAAAoG,YAAYotE,aAAc,GAvHhB8D,eAAAF,cAyHlBE,iBA1Ha55E,GAAA45E,eAAcA,G9DixnBrB,SAAS35E,EAAQD,EAASF,GAE/B,Y+DhynBD,IAAAyB,GAAAzB,EAAmC,GACnC6B,EAAA7B,EAA8B,GAC9B0sB,EAAA1sB,EAAoC,IACpCmqB,EAAAnqB,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5BiT,EAAAjT,EAA2E,GAC3E2sB,EAAA3sB,EAA2B,IAC3BsO,EAAAtO,EAA8B,IAC9BkT,EAAAlT,EAAwB,IACxBuC,EAAAvC,EAA+B,IAE/BqmE,EAAArmE,EAA+B,IAC/BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAE5B+B,EAAA/B,EAAgC,GAChCqC,EAAArC,EAA2B,GAC3BgiF,EAAAhiF,EAAyB,IACzB0jG,EAAA1jG,EAAkC,IAClCiC,EAAAjC,EAA0B,IAC1Bq0E,EAAAr0E,EAA+B,IAE/Bu0E,EAAAv0E,EAA4B,IAExB8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAKrC+mD,EAAA,WA4FI,QAAAA,aAAYT,GACRv2D,KAAKu2D,OAASA,EAEdv2D,KAAK06B,KAAO16B,KAAKo7D,mBACjBp7D,KAAKu2D,OAAOjlD,YAAYtR,KAAK06B,KAE7B,IAAIslD,GAAQhgF,KAAK8jG,kBACjB9jG,MAAKu2D,OAAOjlD,YAAY0uE,GAExBhgF,KAAK+jG,UAAY3wF,EAAAa,iBAAiB,oBAClCjU,KAAK+jG,UAAU7vF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKgkG,SAAS3vF,KAAKrU,OAEhEA,KAAKikG,YAAc7wF,EAAAa,iBAAiB,eACpCjU,KAAKikG,YAAY/vF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKkkG,mBAAmB7vF,KAAKrU,OAE5EA,KAAKmkG,aAAe/wF,EAAAa,iBAAiB,eACrCjU,KAAKmkG,aAAajwF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKokG,UAAU/vF,KAAKrU,OAEpEA,KAAKqkG,iBAAkB,EACvBrkG,KAAKskG,aAAc,EACnBtkG,KAAKw5D,WAAY,EACjBx5D,KAAKukG,mBAAoB,EACzBvkG,KAAKwkG,cAAe,EACpBxkG,KAAKykG,gBAAiB,EAGtB33E,EAAA2C,WAAW9tB,OACP,uBACA,gIAw5BZ,MAh5Bcq1D,aAAAl2D,UAAAs6D,iBAAV,WACI,GAAI1gC,GAAO16B,KAAKqgB,cAAc,MAAO,cAErCrgB,MAAK0kG,KAAO1kG,KAAKqgB,cAAc,MAAO,cAAeqa,GAErD16B,KAAKqgB,cAAc,MAAO,qBAAsBqa,EAEhD,IAAIiqE,GAAgB3kG,KAAKqgB,cAAc,MAAO,mBAAoBqa,EAClE16B,MAAKiiE,kBAAkB,MAAO,uBAAwB7/D,EAAAsH,UAAUC,OAAO,yBAA0Bg7F,GACjG3kG,KAAKiiE,kBAAkB,MAAO,uBAAwB7/D,EAAAsH,UAAUC,OAAO,yBAA0Bg7F,GAEjG3kG,KAAKqgB,cAAc,MAAO,mBAAoBqa,GAC9C16B,KAAKqgB,cAAc,MAAO,oBAAqBqa,GAC/C16B,KAAKqgB,cAAc,MAAO,kBAAmBqa,GAC7C16B,KAAKqgB,cAAc,MAAO,mBAAoBqa,EAE9C,IAAIkqE,GAAS5kG,KAAKqgB,cAAc,MAAO,gBAAiBqa,GACpDmqE,EAAQ7kG,KAAKqgB,cAAc,MAAO,mBAAoBukF,EAO1D,OANA5kG,MAAKqgB,cAAc,MAAO,mBAAoBwkF,GAC9CA,EAAQ7kG,KAAKqgB,cAAc,MAAO,oBAAqBukF,GACvD5kG,KAAKqgB,cAAc,MAAO,mBAAoBwkF,GAE9C7kG,KAAKiiE,kBAAkB,MAAO,kBAAmB94D,SAASC,eAAe,aAAaI,UAAWkxB,GAE1FA,GAGDs8B,YAAAl2D,UAAAgjG,iBAAV,WAGI,IAAK,GAFD9jB,GAAQhgF,KAAKqgB,cAAc,MAAO,gBAE7BtgB,EAAI,EAAGA,EAAI,EAAGA,IAEnB,IAAK,GADD+kG,GAAW9kG,KAAKqgB,cAAc,MAAO,mBAAoB2/D,GACpDr9C,EAAI,EAAGA,EAAI,EAAGA,IACnB3iC,KAAKqgB,cAAc,MAAO,gBAAiBykF,EAInD,IAAIC,GAAS/kG,KAAKqgB,cAAc,MAAO,gBAAiB2/D,GACpD52B,EAAQppD,IA4BZ,OA1BAmJ,UAASkI,KAAK/H,UAAUC,IAAI,eAG5BxC,QAAQy4B,KACJx/B,KAAKq2D,iBAAiB,mBAAoB,QAC1Cr2D,KAAKq2D,iBAAiB,yBAA0B,QAChDr2D,KAAKq2D,iBAAiB,mBAAoB,UAC3C2B,KAAK,SAAClyC,GACL,IAAK,GAAI/lB,GAAI,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IAAK,CACpC,GAAIw6D,GAAOnR,EAAM/oC,cAAc,MAAOyF,EAAO/lB,GAAG,GAAIglG,EAEhC,KAAhBj/E,EAAO/lB,GAAG,KACVw6D,EAAK1oD,MAAM+kD,WAAa,OAAO9wC,EAAO/lB,GAAG,GAAE,eAInDoJ,SAASkI,KAAK/H,UAAU6N,OAAO,eAC/BiyC,EAAMo7C,cAAe,EACjBp7C,EAAMq7C,gBACNr7C,EAAM42B,UAIdhgF,KAAKqgB,cAAc,MAAO,qBAAsB2/D,GAChDhgF,KAAKglG,aAAehlG,KAAKqgB,cAAc,MAAO,kBAAmB2/D,GAE1DA,GAOJhpB,YAAAl2D,UAAAyjC,KAAP,SAAYi1B,EAAoB3lC,GACT,MAAf7zB,KAAKg6D,QAAkBr3D,EAAAoG,YAAYgxD,cAAgBp3D,EAAAoG,YAAYgxD,aAA+B,iBAAEC,SAChGh6D,KAAKg6D,OAASr3D,EAAAoG,YAAYgxD,aAA+B,iBAAEC,OAE3Dh6D,KAAKqkG,iBAAkB,EACvBrkG,KAAKw5D,UAAYA,EACjBx5D,KAAK6zB,SAAWA,EAChB7zB,KAAKilG,cACLjlG,KAAKklG,gBACLllG,KAAKmlG,6BAILnuC,YAAAl2D,UAAAskG,aAAR,WACIplG,KAAKqkG,iBAAkB,EAEnBrkG,KAAKw5D,YACgB,MAAjBx5D,KAAK6zB,UACL7zB,KAAK6zB,WAGT7zB,KAAKggF,UAINhpB,YAAAl2D,UAAA6U,MAAP,WACS3V,KAAKw5D,WACNx5D,KAAKggF,SAILhpB,YAAAl2D,UAAAkI,UAAR,WAEItG,EAAA0F,eAAe+wD,eAAe,IAE9B9lD,EAAAwD,QAAQ8gD,2BAA2B33D,KAAKqlG,yBAAyBhxF,KAAKrU,OACtEA,KAAKslG,aAGDtuC,YAAAl2D,UAAAkjG,SAAR,SAAiBuB,EAA6BC,GAA7B,SAAAD,OAAA,GAA6B,SAAAC,OAAA,GACtCD,IACAvlG,KAAKylG,oBAAqB,GAG1BD,IACAxlG,KAAK0lG,mBAAoB,GAGzB1lG,KAAKylG,oBAAsBzlG,KAAK0lG,oBAChC1lG,KAAK2lG,YAAa,IAIlB3uC,YAAAl2D,UAAA8kG,cAAR,WACyB,MAAjB5lG,KAAK6zB,UAAoB7zB,KAAKw5D,WAC9Bx5D,KAAK6zB,WAGT7zB,KAAK6lG,eAAc,IAGf7uC,YAAAl2D,UAAAglG,iBAAR,SAAyBt/E,GACrB/X,EAAAyB,cAAcqwE,mBAAmBtwE,EAAYioE,KAAM1xD,IAGhDwwC,YAAAl2D,UAAA84D,mBAAP,WACI,MAAO55D,MAAKqkG,iBAGTrtC,YAAAl2D,UAAA44D,eAAP,WACI,MAAO15D,MAAKskG,aAGTttC,YAAAl2D,UAAAo5D,iBAAP,WACIl6D,KAAKw5D,WAAY,EAGjBx5D,KAAK+lG,4BAOD/uC,YAAAl2D,UAAAklG,iBAAR,WACQhmG,KAAKu2D,SACLv2D,KAAKu2D,OAAOjtD,UAAU6N,OAAO,SAC7BnX,KAAKu2D,OAAOjtD,UAAUC,IAAI,WAC1BvJ,KAAKu2D,OAAOtV,UAAY,6BAGxBjhD,KAAK06B,OACL16B,KAAK06B,KAAK4tB,oBAAoB,qBAAsBtoD,KAAKimG,WACzDjmG,KAAK06B,KAAK4tB,oBAAoB,eAAgBtoD,KAAKimG,YAGnDjmG,KAAK0kG,OACL1kG,KAAK0kG,KAAKl7F,UAAY,GAEtBxJ,KAAKkmG,cAAgB,EACrBlmG,KAAKm/D,cAAcn/D,KAAK0kG,KAAM1kG,KAAKkmG,eACnClmG,KAAKmmG,kBACLnmG,KAAKomG,yBAGLpmG,KAAKglG,eACLhlG,KAAKglG,aAAanzF,MAAMmF,UAAY,WACpChX,KAAKglG,aAAax7F,UAAY,GAE9BxJ,KAAKglG,aAAa18C,oBAAoB,qBAAsBtoD,KAAKimG,WACjEjmG,KAAKglG,aAAa18C,oBAAoB,eAAgBtoD,KAAKimG,YAG/DjmG,KAAKg6D,OAAS,MAGVhD,YAAAl2D,UAAAilG,yBAAR,WACQpjG,EAAAoG,YAAYgxD,aAA+B,mBAC3Cp3D,EAAAoG,YAAYgxD,aAA+B,iBAAI,OAQ/C/C,YAAAl2D,UAAAqkG,yBAAR,cAAA3rF,GAAAxZ,IACQ2C,GAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WACPohG,6BAA6BrmG,KAAKg6D,QAClChC,KAAK,SAACC,GACa,MAAZA,GAAuC,UAAnBA,EAAS7wD,OAC7BoS,EAAK4rF,eAEL5rF,EAAKosF,mBAMjB5uC,YAAAl2D,UAAAukG,yBAAR,cAAA7rF,GAAAxZ,IACQ2C,GAAAoG,YAAY9D,YACZtC,EAAAoG,YAAY9D,WACPqhG,6BAA6BtmG,KAAKg6D,QAClChC,KAAK,SAACC,GACHz+C,EAAK+sF,YAAYtuC,MAKzBjB,YAAAl2D,UAAAylG,YAAR,SAAoBtuC,GACA,MAAZA,GACAj4D,KAAKk4F,SAAWjgC,EAChBj4D,KAAKgkG,UAAS,GAAO,GAEH,MAAdxhG,EAAAgC,YAAsBhC,EAAAgC,WAAWC,kBAAkB+lE,oBACnD9nE,EAAA0F,eAAeigE,kBAAkB5lE,EAAAkG,SAAS66D,YAAaxjE,KAAKg6D,OAAOz5D,KAGvE8S,EAAAwD,QAAQ9M,aAQRitD,YAAAl2D,UAAAk/E,MAAR,cAAAxmE,GAAAxZ,IACI,OAAKA,MAAKwkG,kBAILxkG,KAAKskG,cACNtkG,KAAKskG,aAAc,EAEnBniB,EAAAp4D,SAAS8jE,KAAK,qBACd7tF,KAAKwmG,gBAAe,GAEpBxmG,KAAKikG,YAAYvuF,OACjB1V,KAAKikG,YAAYtuF,MAAMqhD,YAAYyvC,gBAInCnxF,WAAW,WACPkE,EAAKssF,kBAAiB,IACvB,UAhBH9lG,KAAKykG,gBAAiB,IAoBtBztC,YAAAl2D,UAAAojG,mBAAR,WACIlkG,KAAKikG,YAAYvuF,OACjB1V,KAAKwmG,gBAAe,GACpBrkB,EAAAp4D,SAASrU,KAAK,qBACdg/D,EAAAyD,YAAYjf,cACZt2D,EAAA6F,YAAY8gE,WAAY,EAEpBvpE,KAAKu2D,SACLv2D,KAAKimG,UAAYjmG,KAAK0mG,cAAcryF,KAAKrU,MACzCA,KAAK06B,KAAK3oB,iBAAiB,qBAAsB/R,KAAKimG,WACtDjmG,KAAK06B,KAAK3oB,iBAAiB,eAAgB/R,KAAKimG,WAEhDpC,EAAA8C,kBAAkBC,wBAAwB,YAAa,IAAM,MAE7DzkB,EAAAp4D,SAASsS,KAAK,uBACd8lD,EAAAp4D,SAAS8jE,KAAK,8BAA+B,KAE7C7tF,KAAKu2D,OAAOjtD,UAAU6N,OAAO,eACxBnX,MAAKu2D,OAAO/mB,YACjBxvC,KAAKu2D,OAAOjtD,UAAUC,IAAI,WAI1BytD,YAAAl2D,UAAA4lG,cAAR,WACQ1mG,KAAKu2D,SACLv2D,KAAK06B,KAAK4tB,oBAAoB,qBAAsBtoD,KAAKimG,WACzDjmG,KAAK06B,KAAK4tB,oBAAoB,eAAgBtoD,KAAKimG,WAEnD9jB,EAAAp4D,SAASrU,KAAK,uBACd1V,KAAKu2D,OAAOjtD,UAAUC,IAAI,iBAE1BvJ,KAAK6mG,oBAAmB,GACxB7mG,KAAK8mG,kBAIL9vC,YAAAl2D,UAAAm/E,MAAR,WACIjgF,KAAK6mG,oBAAmB,GAExB7mG,KAAKu2D,OAAOjtD,UAAU6N,OAAO,YACxBnX,MAAKu2D,OAAO/mB,YACjBxvC,KAAKu2D,OAAOjtD,UAAUC,IAAI,SAE1Bs6F,EAAA8C,kBAAkBC,wBAAwB,OAAQ,IAAM,KAGxD5mG,KAAKimG,UAAYjmG,KAAK6lG,cAAcxxF,KAAKrU,MACzCA,KAAKglG,aAAajzF,iBAAiB,qBAAsB/R,KAAKimG,WAC9DjmG,KAAKglG,aAAajzF,iBAAiB,eAAgB/R,KAAKimG,YAGpDjvC,YAAAl2D,UAAA+kG,cAAR,SAAsBrvB,GAAA,SAAAA,OAAA,GACdA,GACAx2E,KAAK+mG,gBAGT/mG,KAAKgmG,mBACLhmG,KAAK+lG,2BAEL/lG,KAAK8lG,kBAAiB,GAEtBt/B,EAAAkD,eAAeoY,iBAEX9hF,KAAKukG,kBACLvkG,KAAKgnG,oBAELhnG,KAAKo4E,iBAAiB5B,GAG1Bx2E,KAAKw5D,WAAY,GAGbxC,YAAAl2D,UAAAimG,cAAR,WACyB,MAAjB/mG,KAAKk4F,WACwB,MAAzBl4F,KAAKk4F,SAASluB,SACdhqE,KAAKukG,mBAAoB,EACzB/9B,EAAAkD,eAAesY,gBAAgBhiF,KAAKk4F,SAASluB,SAC7CmY,EAAAp4D,SAASsS,KAAK,mBAEY,MAAtBr8B,KAAKk4F,SAAS+O,MAA0C,MAA1BjnG,KAAKk4F,SAAS+O,KAAK30B,KACjD1vE,EAAA6F,YAAY8iE,iBAAgB,EAAOvrE,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,QAG5C,MAAd/6B,EAAAgC,YAAuBhC,EAAAgC,WAAWC,kBAAkByiG,0BACpDlnG,KAAKokG,WAAU,EAAO,MAG1BpkG,KAAKukG,mBAAoB,IAK7BvtC,YAAAl2D,UAAAs3E,iBAAR,SAAyB5B,GAAA,SAAAA,OAAA,GACrBx2E,KAAKqkG,iBAAkB,EACvBrkG,KAAKskG,aAAc,EACnBtkG,KAAKukG,mBAAoB,EACzB91F,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,KAAM1B,IAG7Cxf,YAAAl2D,UAAAkmG,kBAAR,WACI,GAAI/uC,IACAohB,WAEQnY,KAAM9+D,EAAAsH,UAAUC,OACZ,iBACAvH,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa3gE,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,OAAOrvB,YACtE,IACAtL,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,iBAKrDye,GAAAuC,eAAeC,SAASh3E,KAAKo4E,iBAAiB/jE,KAAKrU,MAAOi4D,IAOtDjB,YAAAl2D,UAAAmkG,YAAR,WACI,GAAIjlG,KAAK0kG,KAAM,CACX1kG,KAAKmmG,kBACLnmG,KAAKomG,wBAELpmG,KAAKmnG,YAAcnwC,YAAYowC,MAAMj8E,QAAQ,GAAK,EAAI6rC,YAAYowC,MAAMl7F,QAAU8qD,YAAYowC,MAAMl7F,OAG/FlM,KAAKqnG,aACNrnG,KAAKqnG,WAAarnG,KAAKsnG,iBAAiBtnG,KAAK06B,MAGjD,IAAI6sE,GAAQ,MAGZvnG,MAAKwnG,gBACL,KAAK,GAAIznG,GAAI,EAAGA,EAAIi3D,YAAYywC,aAAc1nG,IAAK,CAC/CwnG,EAAWxnG,EAAI,CACf,IAAI2nG,GAAS1nG,KAAKqgB,cAAc,MAAO,mBAAqBknF,EAAUvnG,KAAK0kG,KAC3E1kG,MAAKwnG,cAAcx0F,KAAKhT,KAAKsnG,iBAAiBI,IAE9C1nG,KAAK0kG,KAAKj+E,YAAYihF,MAK1B1wC,YAAAl2D,UAAAokG,cAAR,WACI,GAAIllG,KAAK0kG,KAAM,CAGX,IAAK,GADD6C,GAAQ,OACHxnG,EAAI,EAAGA,EAAIi3D,YAAY2wC,uBAAwB5nG,IACpDC,KAAKmnG,YAAcnnG,KAAKmnG,WAAa,EAAInwC,YAAYowC,MAAMl7F,QAAU8qD,YAAYowC,MAAMl7F,OACvFq7F,EAAWvwC,YAAYowC,MAAMpnG,KAAKmnG,YAClCnnG,KAAK4nG,gBAAgBL,GAAU,EAAOxnG,EAAI,EAG9CC,MAAKkmG,cAAgBlmG,KAAK6nG,cAAc7nG,KAAKmmG,eAAej6F,OAAS,GACrElM,KAAKm/D,cAAcn/D,KAAK0kG,KAAM1kG,KAAKkmG,iBAInClvC,YAAAl2D,UAAAgnG,cAAR,WAEI,KAAO9nG,KAAKmmG,eAAej6F,OAAS,GAAG,CACnClM,KAAKomG,qBAAqBhlD,KAC1B,IAAIsmD,GAAS1nG,KAAKmmG,eAAe/kD,KACjCphD,MAAK0kG,KAAKj+E,YAAYihF,GAG1B,GAAI1nG,KAAK2lG,WACL3lG,KAAK+nG,4BACF,CACH/nG,KAAKmnG,YAAcnnG,KAAKmnG,WAAa,EAAInwC,YAAYowC,MAAMl7F,QAAU8qD,YAAYowC,MAAMl7F,MACvF,IAAIq7F,GAAWvwC,YAAYowC,MAAMpnG,KAAKmnG,WACtCnnG,MAAK4nG,gBAAgBL,GAAU,GAAO,GAEtCvnG,KAAKkmG,cAAgBlmG,KAAK6nG,cAAc7nG,KAAKmmG,eAAej6F,OAAS,GACrElM,KAAKm/D,cAAcn/D,KAAK0kG,KAAM1kG,KAAKkmG,eAEnClmG,KAAKgoG,aAILhxC,YAAAl2D,UAAAinG,sBAAR,WAEI,GAAqB,MAAjB/nG,KAAKk4F,SAAkB,CAKvB,IAJA,GAAI+P,GAAcjoG,KAAKk4F,SAAS+O,KAAKiB,QAAQlxC,YAAYmxC,mBACrDC,EAAmBrpF,KAAKC,MAAMD,KAAKE,SAAW+3C,YAAYowC,MAAMl7F,QAG7D8qD,YAAYowC,MAAMgB,IAAqBH,GAC1CG,GAAoBA,EAAmB,EAAIpxC,YAAYowC,MAAMl7F,QAAU8qD,YAAYowC,MAAMl7F,MAI7FlM,MAAKmnG,YACAiB,GAAoBpxC,YAAYqxC,wBAA0B,GAAKrxC,YAAYowC,MAAMl7F,QAClF8qD,YAAYowC,MAAMl7F,MAEtB,KAAK,GAAInM,GAAI,EAAGA,EAAIi3D,YAAYqxC,wBAAyBtoG,IAAK,CAC1DC,KAAKmnG,YAAcnnG,KAAKmnG,WAAa,EAAInwC,YAAYowC,MAAMl7F,QAAU8qD,YAAYowC,MAAMl7F,MACvF,IAAIq7F,GAAWvwC,YAAYowC,MAAMpnG,KAAKmnG,WACtCnnG,MAAK4nG,gBAAgBL,EAAUxnG,GAAKi3D,YAAYqxC,wBAA0B,EAAGtoG,EAAI,GAGrFC,KAAKkmG,cAAgBlmG,KAAK6nG,cAAc7nG,KAAKmmG,eAAej6F,OAAS,GACrElM,KAAKm/D,cAAcn/D,KAAK0kG,KAAM1kG,KAAKkmG,eAEnClmG,KAAKsoG,iBAILtxC,YAAAl2D,UAAAynG,uBAAR,WAEI,KAAOvoG,KAAKmmG,eAAej6F,OAAS,GAAG,CACnClM,KAAKomG,qBAAqBhlD,KAC1B,IAAIsmD,GAAS1nG,KAAKmmG,eAAe/kD,KACjCphD,MAAK0kG,KAAKj+E,YAAYihF,KAQtB1wC,YAAAl2D,UAAAwkG,UAAR,WAEQtlG,KAAKwoG,SACLxoG,KAAKwoG,QAAQ1wF,cAAc2O,YAAYzmB,KAAKwoG,SAGhDr/F,SAASm/C,oBAAoB,QAAStoD,KAAKimG,WAE3CjmG,KAAKokG,WAAU,EAAO,KAEtBjiB,EAAAp4D,SAASrU,KAAK,+BACdysE,EAAAp4D,SAASsS,KAAK,uBACd8lD,EAAAp4D,SAASsS,KAAK,yBAEdr8B,KAAKylG,oBAAqB,EAC1BzlG,KAAK0lG,mBAAoB,EAErB1lG,KAAKu2D,SACLv2D,KAAKu2D,OAAOjtD,UAAU6N,OAAO,SAC7BnX,KAAKu2D,OAAOjtD,UAAU6N,OAAO,iBAC7BnX,KAAKu2D,OAAOjtD,UAAUC,IAAI,SAG9BvJ,KAAK2lG,YAAa,EAClB3lG,KAAK+jG,UAAUpuF,MAAMqhD,YAAYyxC,iBACjCzoG,KAAK0oG,eAGD1xC,YAAAl2D,UAAA4nG,YAAR,WACI,GAAIC,GAAa3oG,KAAK6nG,cAAc,EACpC7nG,MAAK4oG,kBAAoB5oG,KAAK6oG,qBAAqB,GACnD7oG,KAAK6/E,QACD7/E,KAAKkmG,cACLyC,EACA3oG,KAAK8nG,cACL9wC,YAAY8xC,oBACZ,gBACA,EACY9oG,KAAK+oG,uBAQjB/xC,YAAAl2D,UAAAknG,SAAR,WACI,GAAIW,GAAa3oG,KAAK6nG,cAAc,GAChCtuF,EAAWvZ,KAAKgpG,oBAAoBL,EAExC3oG,MAAK4oG,kBAAoB5oG,KAAK6oG,qBAAqB,GACnD7oG,KAAK6/E,QACD7/E,KAAKkmG,cACLyC,EACA3oG,KAAK8nG,cACLvuF,EACA,SACA,EACYvZ,KAAK+oG,uBAQjB/xC,YAAAl2D,UAAAwnG,aAAR,WACIj1F,EAAAwD,QAAQwgD,2BAA2Br3D,KAAKipG,yBAAwB,GAEhE,IAAIN,GAAa3oG,KAAK6nG,cAAc,EACpC7nG,MAAK4oG,kBAAoB5oG,KAAK6oG,qBAAqB,GACnD7oG,KAAK6/E,QACD7/E,KAAKkmG,cACLyC,EACA3oG,KAAKkpG,aACLlyC,YAAYmyC,qBACZ,uBACA,EACYnpG,KAAK+oG,uBAIjB/xC,YAAAl2D,UAAAioG,qBAAR,SAA6BxjF,GACrBvlB,KAAK4oG,kBAAkB18F,OAAS,GAC5BqZ,EAAMxa,OAAOg9B,aAAa3oB,EAAIpf,KAAK4oG,kBAAkB,KACrDzmB,EAAAp4D,SAASsS,KAAK,0BAEVr8B,KAAKu2D,SACLv2D,KAAKu2D,OAAOjtD,UAAU6N,OAAO,OAC7BnX,KAAKu2D,OAAO/mB,YACZxvC,KAAKu2D,OAAOjtD,UAAUC,IAAI,QAG9BvJ,KAAK4oG,kBAAkBr9E,UAS3ByrC,YAAAl2D,UAAAooG,aAAR,WAEIxmG,EAAA0F,eAAe+wD,eAAe,IAET,MAAjBn5D,KAAKk4F,WACLl4F,KAAKmkG,aAAaxuF,MAAM,KAEpB3V,KAAKk4F,SAAS+O,KAAKmC,OACnB10B,EAAAyD,YAAY9e,cAIpBr5D,KAAKuoG,yBACLl1F,EAAAwD,QAAQ2gD,6BAA6Bx3D,KAAKipG,yBAAwB,GACrDjpG,MAAKqpG,gBAClBlnB,GAAAp4D,SAASrU,KAAK,wBAAyB,IACvCysE,EAAAp4D,SAASsS,KAAK,uBAEdr8B,KAAKigF,SAGDjpB,YAAAl2D,UAAAsjG,UAAR,SAAkBkF,EAAoBv8F,GAAA,SAAAA,MAAA,IAClC/M,KAAKmkG,aAAazuF,MAClB,IAAI6zF,GAAiBpgG,SAASC,eAAe,kBACzCogG,EAAergG,SAASC,eAAe,eAErB,OAAlBmgG,GAA0C,MAAhBC,IACrB5nG,EAAA4I,YAAYC,cAAcsC,GAG3BrK,EAAA0F,eAAeigE,kBAAkB5lE,EAAAkG,SAASs7D,aAAcjkE,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,OAAOrvB,YAFtFxL,EAAA0F,eAAeigE,kBAAkB5lE,EAAAkG,SAASs7D,aAAcl3D;AAKxDu8F,GACAC,EAAejgG,UAAUC,IAAI,WAC7BigG,EAAalgG,UAAU6N,OAAO,aAE9BoyF,EAAejgG,UAAU6N,OAAO,WAChCqyF,EAAalgG,UAAUC,IAAI,cAS/BytD,YAAAl2D,UAAA++E,QAAR,SACIqmB,EACAuD,EACA51E,EACAta,EACAmU,EACAH,EACAm8E,GAFA,SAAAh8E,MAAA,UACA,SAAAH,MAAA,GACA,SAAAm8E,MAAA,MAEAnwF,GAAsB+Q,EAAAkB,YAAYiB,SAClCc,GAAgBjD,EAAAkB,YAAYiB,SAE5BI,EAAA4D,SAASkB,aAAa3xB,KAAK0kG,KAC3B,IAAIn/E,GAAQsH,EAAA4D,SAASoF,OACjB71B,KAAK0kG,KACLnrF,GACE6F,EAAG8mF,EAAenjD,WAAY,MAC9B3jC,EAAGqqF,EAAW/7E,KAAMA,EAAMH,MAAOA,EAAOw1B,WAAY,KAG1D/iD,MAAKkmG,cAAgBuD,EAEhB7nG,EAAAqG,MAAMC,kBAAkB2rB,IACzBtO,EAAMsI,cAAc,aAAcgG,KAAc7zB,MAG/C4B,EAAAqG,MAAMC,kBAAkBwhG,IACzBnkF,EAAMsI,cAAc,WAAY67E,GAAiB,UAAW1pG,OAQ7Dg3D,YAAAl2D,UAAAuoG,eAAP,WACI,GAAqB,MAAjBrpG,KAAKk4F,SAAkB,CACvB,GAAIyR,GAAWvnG,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa3gE,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,OAAOrvB,WAEzF,IAAIlO,KAAKglG,aAGL,IAAK,GAFD4E,GAAS5pG,KAAKglG,aAAa7nF,SAEtBpd,EAAI,EAAGA,EAAI4pG,EAASz9F,OAAQnM,IAC5B6pG,EAAO7pG,GAGR6pG,EAAO7pG,GAAGkhD,UAAY,IAAM0oD,EAASE,WAAW9pG,GAAGmO,WAFnDlO,KAAKqgB,cAAc,MAAO,IAAMspF,EAASE,WAAW9pG,GAAGmO,WAAYlO,KAAKglG,aAOpF,OAAuC,QAAhChlG,KAAKk4F,SAAS+O,KAAK30B,IAAInW,OAAmD,WAAhCn8D,KAAKk4F,SAAS+O,KAAK30B,IAAInW,MAG5E,OAAO,GAOJnF,YAAAl2D,UAAA63D,QAAP,WACI,MAAO34D,MAAK06B,MAGRs8B,YAAAl2D,UAAAwmG,iBAAR,SAAyB/sC,GACrB,MAAOrkD,UAASzS,OAAO0S,iBAAiBokD,GAAM3zD,SAG1CowD,YAAAl2D,UAAAkoG,oBAAR,SAA4BS,GACxB,GAAI30F,GAAOiK,KAAK4f,IAAI3+B,KAAKkmG,cAAgBuD,EACzC,OAAO1qF,MAAK+0B,MAAOh/B,EAAO9U,KAAKwnG,cAAc,GAAMxwC,YAAY8yC,gBAG3D9yC,YAAAl2D,UAAA+mG,cAAR,SAAsBkC,GAClB,GAAIz7B,GAASvvD,KAAK+0B,MAAwB,GAAlB9zC,KAAKqnG,WAE7B,IAAIrnG,KAAKmmG,eAAej6F,OAAS,EAAG,CAChC,IAAK,GAAInM,GAAI,EAAGA,EAAIgqG,EAAmBhqG,IACnCuuE,GAAUtuE,KAAKomG,qBAAqBrmG,EAGxCuuE,IAAUvvD,KAAK+0B,MAAqD,GAA/C9zC,KAAKomG,qBAAqB2D,IAGnD,MAAOz7B,IAGHtX,YAAAl2D,UAAA+nG,qBAAR,SAA6BkB,GACzB,GAAIz7B,GAAStuE,KAAKkmG,cACd/+F,IAEJ,IAAInH,KAAKmmG,eAAej6F,OAAS,EAAG,CAChCoiE,GAAsE,GAA5DtuE,KAAKomG,qBAAqBpmG,KAAKmmG,eAAej6F,OAAS,GACjE/E,EAAO6L,KAAKs7D,EAEZ,KAAK,GAAIvuE,GAAIC,KAAKomG,qBAAqBl6F,OAAS,EAAGnM,EAAIgqG,EAAmBhqG,IACtEuuE,GAAUtuE,KAAKomG,qBAAqBrmG,GACpCoH,EAAO6L,KAAKs7D,GAIpB,MAAOnnE,IAGH6vD,YAAAl2D,UAAAuf,cAAR,SACIg6C,EACApZ,EACAqZ,EACA0vC,GAAA,SAAAA,MAAA,KAEA,IAAIzvC,GAAOpxD,SAASkX,cAAcg6C,EAWlC,OAVAE,GAAKjuD,aAAa,QAAS20C,GAEX,MAAZqZ,IACoB,MAAhB0vC,EACA1vC,EAASooC,aAAanoC,EAAMyvC,GAE5B1vC,EAAShpD,YAAYipD,IAItBA,GAGHvD,YAAAl2D,UAAAmpG,aAAR,SACI5vC,EACApZ,EACAqZ,EACA0vC,GAAA,SAAAA,MAAA,KAEA,IAAIzvC,GAAOpxD,SAASkX,cAAcg6C,EAClCE,GAAKjuD,aAAa,QAAS20C,EAE3B,IAAIipD,GAAe/gG,SAASkX,cAAcg6C,EAY1C,OAXA6vC,GAAajpD,UAAY,sBACzBsZ,EAAKjpD,YAAY44F,GAED,MAAZ5vC,IACoB,MAAhB0vC,EACA1vC,EAASooC,aAAanoC,EAAMyvC,GAE5B1vC,EAAShpD,YAAYipD,IAItBA,GAIHvD,YAAAl2D,UAAAmhE,kBAAR,SAA0B5H,EAAapZ,EAAmBigB,EAAc5G,GACpE,GAAIC,GAAOv6D,KAAKqgB,cAAcg6C,EAAKpZ,EAAWqZ,EAG9C,OAFAC,GAAK/wD,UAAY03D,EAEV3G,GAGHvD,YAAAl2D,UAAAgmG,cAAR,WACI,GAAIqD,GAAehhG,SAASC,eAAe,eAC3C,IAAI+gG,EAAc,CACd,GAAI3B,GAAU2B,EAAa7tC,uBAAuB,WAAW,EAC7D,IAAIksC,EAAS,CACT,GAAI4B,GAAS5B,EAAQ1wF,aACrB9X,MAAKwoG,QAAUxoG,KAAKqgB,cAAc,MAAO,cAAe+pF,GACxDpqG,KAAKwoG,QAAQh/F,UAAYg/F,EAAQh/F,UACjCxJ,KAAKwoG,QAAQz2F,iBAAiB,QAAS/R,KAAKgJ,UAAUqL,KAAKrU,OAE3DA,KAAKimG,UAAYjmG,KAAKqqG,iBAAiBh2F,KAAKrU,MAC5CmJ,SAAS4I,iBAAiB,QAAS/R,KAAKimG,cAK5CjvC,YAAAl2D,UAAAmoG,wBAAR,SAAgCqB,GAC5B,GAAInjG,KAeJ,OAbqB,OAAjBnH,KAAKk4F,WACL/wF,EAAOuwD,KAAO13D,KAAKk4F,SAAS+O,KAAK30B,IAAInW,MAGjCmuC,EACAnjG,EAAOsxD,cAAgBz4D,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,QAE9Cp2B,EAAO+1D,UAAYl9D,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,OAC1Cp2B,EAAOk2D,cAAgB,GAAIhyD,OAAK,GAAIA,OAAOwO,UAAY,KAAMs0D,cAC7DhnE,EAAOm2D,cAAgBt9D,KAAKk4F,SAAS+O,KAAK30B,IAAI/0C,SAI/Cp2B,GAGH6vD,YAAAl2D,UAAAq+D,cAAR,SAAsB5E,EAAmBn7C,GACrCm7C,EAAK1oD,MAAMmF,UAAY,kBAAoBoI,EAAI,UAG3C43C,YAAAl2D,UAAA+lG,mBAAR,SAA2B/mF,GACS,MAA5B5d,EAAAsD,gBAAgBoJ,UAAoB1M,EAAAsD,gBAAgBoJ,SAAS27F,sBAC7DroG,EAAAsD,gBAAgBoJ,SAAS27F,oBAAoBzqF,QAAUA,IAIvDk3C,YAAAl2D,UAAAupG,iBAAR,SAAyBz1F,GACA,IAAjBA,EAAM41F,SACNxqG,KAAKgJ,aAILguD,YAAAl2D,UAAA8mG,gBAAR,SAAwBL,EAAkBkD,EAA4BC,GAA5B,SAAAD,OAAA,GAA4B,SAAAC,OAAA,EAClE,IAAIzpD,GAAY,mBAAqBsmD,CAEjCkD,KACAxpD,GAAa,oBACbjhD,KAAKu2D,OAAOjtD,UAAUC,IAAI,OAASg+F,IAGnCmD,IACAzpD,GAAa,QAGjB,IAAIymD,GAAS1nG,KAAKiqG,aAAa,MAAOhpD,EAAWjhD,KAAK0kG,KAAM1kG,KAAKmmG,eAAe,GAEhFnmG,MAAKmmG,eAAenjE,QAAQ0kE,GAC5B1nG,KAAKomG,qBAAqBpjE,QAAQhjC,KAAKwnG,cAAcD,EAAW,KAG5DvwC,YAAAl2D,UAAA0lG,eAAR,SAAuBhgF,GACnB,GAAImkF,GAAiBxhG,SAASC,eAAe,mBACzCwhG,EAAezhG,SAASC,eAAe,cAErB,OAAlBuhG,GAA0C,MAAhBC,IACtBpkF,GACAmkF,EAAerhG,UAAUC,IAAI,iBAC7BqhG,EAAathG,UAAUC,IAAI,mBAE3BohG,EAAerhG,UAAU6N,OAAO,iBAChCyzF,EAAathG,UAAU6N,OAAO,oBAKlC6/C,YAAAl2D,UAAAu1D,iBAAR,SAAyBp4C,EAAc4sF,GACnC,MAAO,IAAI9jG,SAAuB,SAACC,EAAmBs5F,GAClD,GAAoC,MAAhC99F,EAAAgC,WAAWC,kBAEX,WADAuC,IAASiX,EAAM,IAInB,IAAqD,IAAjDzb,EAAAgC,WAAWC,kBAAkBi2D,iBAE7B,WADA1zD,IAASiX,EAAM,IAInB,IAAI08C,GAAQn4D,EAAAgC,WAAWC,kBAAkBm2D,qBACzC,IAAa,IAATD,EAAa,CACb,IAAIn4D,EAAAgC,WAAWC,kBAAkBo2D,uBAI7B,WADA7zD,IAASiX,EAAM,IAFf08C,GAAQtnD,EAAAwD,QAAQikD,aAOxB,GAAMC,GAAmBv4D,EAAAgC,WAAWC,kBAAkBi2D,iBAChDM,EAAY,wBACZp2D,EAAM,GAAGm2D,EAAmBC,EAAS,IAAIL,EAAK,IAAIl3D,OAAgB,QAAC,IAAIwa,EAAO4sF,EAChF5vC,EAAM9xD,SAASkX,cAAc,MACjC46C,GAAI3uD,aAAa,MAAO1H,GAExBq2D,EAAIlpD,iBAAiB,OAAQ,SAACmjC,GAC1BluC,GAASiX,EAAMrZ,MAEnBq2D,EAAIlpD,iBAAiB,QAAS,SAACmjC,GAC3BluC,GAASiX,EAAM,UAvgCH+4C,YAAAowC,OACpB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnBpwC,YAAAywC,aAAuB,EAEvBzwC,YAAAyvC,eAAyB,IAEzBzvC,YAAA8yC,cAAwB,EAExB9yC,YAAAyxC,gBAA0B,IAE1BzxC,YAAAmxC,kBAA4B,EAE5BnxC,YAAA8xC,oBAA8B,IAE9B9xC,YAAA2wC,uBAAiC,EAEjC3wC,YAAAmyC,qBAA+B,IAE/BnyC,YAAAqxC,wBAAkC,GAs/B9DrxC,cAhhCa32D,GAAA22D,YAAWA,G/Do9oBlB,SAAS12D,EAAQD,EAASF,GAE/B,YgEn/oBD,IAKAwmG,IALAxmG,EAAuB,GAKvB,mBAAAwmG,sBA8BA,MA7BWA,mBAAAC,wBAAP,SAA+BkE,EAA2BvxF,EAAwBgU,GAAxB,SAAAhU,MAAA,KAAwB,SAAAgU,MAAA,EAC9E,IAAIw9E,GAAO5hG,SAASC,eAAe,yBAC/B4hG,EAAa7hG,SAASC,eAAe,8BAErC2hG,IAAQC,IACHA,EAAW1hG,UAAUiO,SAASuzF,KAC/BE,EAAW1hG,UAAU6N,OAAO,QAC5B4zF,EAAK9pD,UAAY+pD,EAAW/pD,UAE5B+pD,EAAWn5F,MAAMo5F,mBAAqB1xF,EAAW,KACjDyxF,EAAWn5F,MAAMq5F,gBAAkB39E,EAAQ,KAC3Cy9E,EAAW/pD,UAAY,GACvB+pD,EAAWx7D,YACXw7D,EAAW1hG,UAAUC,IAAIuhG,EAAmB,WAWjDnE,kBAAAvuF,IAAP,SAAWC,KAKfsuF,qBA9BatmG,GAAAsmG,kBAAiBA,GhEghpBxB,SAASrmG,EAAQD,EAASF,GAE/B,YiEvhpBD,IACA6B,IADA7B,EAA8B,GAC9BA,EAA0B,IAC1BqC,EAAArC,EAA2B,GAC3B4C,EAAA5C,EAAwB,GAKxBuR,EAAA,mBAAAA,UAyDA,MAtDWA,OAAAC,MAAP,WACIlO,OAAOwG,OAASyH,MAAMy5F,OACtB1nG,OAAOyG,QAAUwH,MAAM05F,QACvB3nG,OAAO8+E,QAAU7wE,MAAM25F,QAEvB5nG,OAAOsO,iBAAiB,mBAAoBL,MAAM45F,mBAAmBj3F,KAAKrU,QAGvE0R,MAAA25F,QAAP,WAEQ7oG,EAAAgC,WAAWC,mBACXjC,EAAAgC,WAAWC,kBAAkB8mG,oBAC5BxoG,EAAAuF,QAAQmL,QACRzR,EAAAsC,UAAUA,UAAUknG,mBAEjBriG,SAASkI,KAAKo6F,kBACdtiG,SAASkI,KAAKo6F,oBACPtiG,SAASkI,KAAKq6F,yBACrBviG,SAASkI,KAAKq6F,2BAIjBh6F,MAAMi6F,UACPj6F,MAAMi6F,SAAU,IAIjBj6F,MAAA45F,mBAAP,SAA0BzrG,GACtBmC,EAAAsC,UAAUA,UAAUsnG,WAAyC,MAA9BziG,SAAS0iG,oBAGrCn6F,MAAA05F,QAAP,WACQ5oG,EAAAgC,WAAWC,mBAAqBjC,EAAAgC,WAAWC,kBAAkBqnG,iBAC7D3hG,KAAKC,MAAMovF,aAIZ9nF,MAAAy5F,OAAP,WACQ3oG,EAAAgC,WAAWC,mBAAqBjC,EAAAgC,WAAWC,kBAAkBqnG,iBAC7D3hG,KAAKC,MAAMC,WAUZqH,MAAA0G,IAAP,SAAWC,KAnDJ3G,MAAAi6F,SAAmB,EAwD9Bj6F,QAzDarR,GAAAqR,MAAKA,GjEukpBZ,SAASpR,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MkErlpBpFG,EAAAzB,EAUO,GACP6B,EAAA7B,EAA0B,GAG1B4rG,EAAA5rG,EAA4B,IAC5BotF,EAAAptF,EAA6B,IAC7B6mB,EAAA7mB,EAA6B,IAC7B6rG,EAAA7rG,EAA8B,IAC9B8rG,EAAA9rG,EAAqC,IACrC+rG,EAAA/rG,EAA4B,IAC5B+B,EAAA/B,EAAgC,GAChCgsG,EAAAhsG,EAA8B,KAC9BqC,EAAArC,EAA2B,GAC3ByN,EAAAzN,EAAwB,GAIlBisG,EAAgB,WAEhBC,GACFC,KAAM,OACNtxF,MAAO,QACP5G,SAAU,YAURm4F,GACF91B,OAAQ,KAGZ9wE,EAAA,SAAAxC,GAAuC5B,EAAAoE,kBAAAxC,EAmBnC,SAAAwC,qBACIxC,EAAA1C,KAAAT,MACAA,KAAKwsG,gBAAkB,GAAIC,KAAmB,IAC9CzsG,KAAK0sG,qBAAuB,GAAID,KAAmB,IAwM3D,MAvNI5rG,QAAAmD,eAAI2B,kBAAA7E,UAAA,kBlEqkpBCmD,IkErkpBL,WACI,MAAOjE,MAAKwsG,iBlEukpBXroG,YAAY,EACZC,cAAc,IkErkpBnBvD,OAAAmD,eAAI2B,kBAAA7E,UAAA,uBlEwkpBCmD,IkExkpBL,WACI,MAAOjE,MAAK0sG,sBlE0kpBXvoG,YAAY,EACZC,cAAc,IkExkpBLuB,kBAAAgnG,0BAAd,SAAwCC,GACpCjnG,kBAAkBknG,iBAAiB75F,KAAK45F,IAS9BjnG,kBAAAmnG,cAAd,SAA4B7e,GACxB,MAAOtoF,mBAAkBonG,cAAc5hF,QAAQ8iE,QAGnDtoF,kBAAA7E,UAAA8yD,QAAA,WACI5zD,KAAKwsG,gBAAkB,KACvBxsG,KAAK0sG,qBAAuB,KAC5BX,EAAAiB,YAAYp5C,UACZ5sC,EAAAM,aAAassC,WAGjBjuD,kBAAA7E,UAAAmsG,gBAAA,SAAgBC,GAAhB,GAAA1zF,GAAAxZ,IACI,IAAIktG,EAAW,CACX,GAAIC,IAAoB3qG,EAAAgC,WAAW2B,eAAeswE,MAElD70E,GAAAwrG,OAAOj2F,OAAO+1F,EAAW,SAAC9zB,GACtB,GAAIi0B,GAAiB7zF,EAAK8zF,gBAAgBl0B,EAAUmzB,EAAe91B,QAE/D82B,EAAYF,GAAkBF,CAWlC,OAAOI,OAKnB5nG,kBAAA7E,UAAA0sG,cAAA,WACI,IAAK,GAAIztG,GAAI,EAAGA,EAAI4F,kBAAkBknG,iBAAiB3gG,OAAQnM,IAAK,CAChE,GAAI6sG,GAAMjnG,kBAAkBknG,iBAAiB9sG,EAClC,OAAP6sG,GACAA,EAAIa,gBAAgB7rG,EAAAyN,cAAcC,SAASo+F,aAInD,MAAO,IAAI3mG,SAAa,SAACC,EAAcs5F,GACnCt5F,OAIRrB,kBAAA7E,UAAA6sG,iBAAA,SAAiBz0E,GACbl3B,EAAAsC,UAAUA,UAAUspG,aAAa10E,EAEjC,KAAK,GAAIn5B,GAAI,EAAGA,EAAI4F,kBAAkBknG,iBAAiB3gG,OAAQnM,IAAK,CAChE,GAAI6sG,GAAMjnG,kBAAkBknG,iBAAiB9sG,EAClC,OAAP6sG,GACAA,EAAIiB,iBAAiB30E,KAKjCvzB,kBAAA7E,UAAAgtG,mBAAA,SAAmB7f,GACfrsF,EAAA4N,OAAOu+F,WAAW,qBAAsB,iBAAiB9f,GAErDtoF,kBAAkBonG,cAAc5hF,QAAQ8iE,QACxCtoF,kBAAkBonG,cAAc/5F,KAAKi7E,IAI7CtoF,kBAAA7E,UAAAktG,iBAAA,SAAiBvmG,EAAYwmF,KAI7BtoF,kBAAA7E,UAAAmtG,qBAAA,WACI,GAAMC,GAAWnC,EAAAiB,YAAYmB,KAE7B,IAAgB,MAAZD,GAAoBA,EAAShiG,OAAS,EAAG,CAsBzC,IAAK,GArBCkiG,GAAexsG,EAAAwrG,OAAOhrF,IAAI8rF,EAAU,SAAC35C,GACvC,GAAM85C,GAAK95C,EAAKn+C,gBACVk4F,EAAOD,EAAG7vF,aAAa,YAActI,SAASm4F,EAAGxvF,aAAa,eAMpE,QAASxV,QAASglG,EAAIhqE,SAAUiqE,KAG9B77C,EAAW7wD,EAAAwrG,OAAOhrF,IACpBxgB,EAAAwrG,OAAOmB,QAAQH,EAAc,SAAC75C,GAAS,MAAAA,GAAKlwB,UAAU,QACtD,SAACnlB,GAAM,MAAAA,GAAE7V,UAQJtJ,EAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBksG,GAAAuC,qBAAqB16C,cAAczqD,GACnCkkF,EAAAI,aAAa75B,cAAczqD,GAG/B,IAAK,GAAItJ,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBinB,GAAAM,aAAawsC,cAAczqD,GAG/B,IAAK,GAAItJ,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBosG,GAAAsC,cAAcC,gBAAgBrlG,GAIlCF,SAASkI,KAAK/E,aAAa,WAAYsB,EAAA1K,QAAQU,SAG/C,KAAK,GAAI7D,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBisG,GAAA2C,cAAc76C,cAAczqD,GAC5B6iG,EAAA0C,YAAY96C,cAAczqD,IAOlC0iG,EAAAiB,YAAY6B,cAOhBlpG,kBAAA7E,UAAAgzD,cAAA,WACI,MAAO,IAAI/sD,SAAa,SAACC,EAAcs5F,GAKnC,GAAM4N,GAAWnC,EAAAiB,YAAYmB,KAE7B,IAAgB,MAAZD,GAAoBA,EAAShiG,OAAS,EAAG,CAsBzC,IAAK,GArBCkiG,GAAexsG,EAAAwrG,OAAOhrF,IAAI8rF,EAAU,SAAC35C,GACvC,GAAM85C,GAAK95C,EAAKn+C,gBACVk4F,EAAOD,EAAG7vF,aAAa,YAActI,SAASm4F,EAAGxvF,aAAa,eAMpE,QAASxV,QAASglG,EAAIhqE,SAAUiqE,KAG9B77C,EAAW7wD,EAAAwrG,OAAOhrF,IACpBxgB,EAAAwrG,OAAOmB,QAAQH,EAAc,SAAC75C,GAAS,MAAAA,GAAKlwB,UAAU,QACtD,SAACnlB,GAAM,MAAAA,GAAE7V,UAQJtJ,EAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBksG,GAAAuC,qBAAqB16C,cAAczqD,GACnCkkF,EAAAI,aAAa75B,cAAczqD,GAG/B,IAAK,GAAItJ,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBinB,GAAAM,aAAawsC,cAAczqD,GAG/B,IAAK,GAAItJ,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBosG,GAAAsC,cAAcC,gBAAgBrlG,GAIlCF,SAASkI,KAAK/E,aAAa,WAAYsB,EAAA1K,QAAQU,SAG/C,KAAK,GAAI7D,GAAI,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CACtC,GAAIsJ,GAAUopD,EAAS1yD,EACvBisG,GAAA2C,cAAc76C,cAAczqD,GAC5B6iG,EAAA0C,YAAY96C,cAAczqD,IASlCrC,OA1NOrB,kBAAAknG,oBACAlnG,kBAAAonG,iBA4NnBpnG,mBA9NuC/D,EAAAktG,sBAA1BzuG,GAAAsF,kBAAiBA,CAgO9B,IAAA8mG,GAAA,SAAAtpG,GAAwC5B,EAAAkrG,mBAAAtpG,EAYpC,SAAAspG,oBAAYsC,GACR5rG,EAAA1C,KAAAT,KAAM+uG,GAEN/uG,KAAKgvG,OAAS,GAAI7kG,MAAK8kG,QAAQC,OAE/BlvG,KAAKmvG,uBAAyB,KAC9BnvG,KAAKovG,mBAAqB,EAC1BpvG,KAAKqvG,sBACLrvG,KAAKsvG,sBAELtvG,KAAKuvG,iBAAmBvvG,KAAKuvG,iBAAiBl7F,KAAKrU,MACnDA,KAAKwvG,WAAaxvG,KAAKwvG,WAAWn7F,KAAKrU,MACvCA,KAAKyvG,YAAczvG,KAAKyvG,YAAYp7F,KAAKrU,MACzCA,KAAK0vG,eAAiB1vG,KAAK0vG,eAAer7F,KAAKrU,MAC/CA,KAAK2vG,oBAAsB3vG,KAAK2vG,oBAAoBt7F,KAAKrU,MACzDA,KAAK4vG,uBAAyB5vG,KAAK4vG,uBAAuBv7F,KAAKrU,MAqMvE,MAlMIysG,oBAAA3rG,UAAA8yD,QAAA,WACI5zD,KAAK6vG,uBAAyB,KAC9B7vG,KAAK8vG,iBAAmB,KACxB9vG,KAAK+vG,oBAAsB,KAC3B/vG,KAAKovG,mBAAqB,EAC1BpvG,KAAKqvG,sBACLrvG,KAAKsvG,mBAAqB,KAE1BtvG,KAAKgvG,OAAO9yC,SAGhBuwC,mBAAA3rG,UAAAkvG,mBAAA,SAAmB7mG,EAAuBiwE,GACtC,GAAM62B,GAAwB9mG,GAAYA,EAASiN,gBAAgB8H,WAAa6tF,EAAAiB,YAAYz5F,IAOxF08F,IACAlE,EAAAiB,YAAYzjG,IAAIJ,IAIxBsjG,mBAAA3rG,UAAAovG,oBAAA,WACIlwG,KAAKgvG,OAAO9yC,QACZl8D,KAAK8vG,oBACL9vG,KAAKgvG,OAAOmB,IAAInwG,KAAK4vG,yBAGzBnD,mBAAA3rG,UAAA8uG,uBAAA,SAAuBx2B,EAAiC9vD,GACpD,GAAI8vD,EAAS9sD,MAAS8sD,EAAiBg3B,SAC/Bh3B,EAASrqE,SAAWqqE,EAASrqE,QAAQshG,aAAej3B,EAASrqE,QAAQshG,YAAYC,UAAW,CAC5F,GAAMC,GAAWn3B,EAASrqE,QAAQshG,YAAYE,SACxCC,EAAOxwG,KAAKsvG,mBAAmBvuG,eAAewvG,EAE/CvwG,MAAK8vG,iBAAiB/uG,eAAewvG,IAClCC,GAQmC,QAA/Bp3B,EAASn7D,KAAKie,OAAO,EAAG,IAA+C,UAA/Bk9C,EAASn7D,KAAKie,OAAO,EAAG,KAChEh6B,EAAAsD,gBAAgBsJ,cAAcsqE,EAASrqE,QAAQshG,aAC/CrwG,KAAK8vG,iBAAiBS,IAAY,GAWtD,IACIjnF,IACF,MAAOzpB,GACLG,KAAK6vG,uBAAuBhwG,KAIpC4sG,mBAAA3rG,UAAAyuG,iBAAA,SAAiBn2B,EAAiC9vD,GAC9C,GAAItpB,KAAKmvG,uBAAwB,CACd/1B,EAASx0E,GACxBw0E,GAASx0E,IAAMhD,EAAA2B,UAAUktG,aAAar3B,EAASx0E,IAAK5E,KAAK+vG,qBAO7D,IACIzmF,IACF,MAAOzpB,GACLG,KAAK6vG,uBAAuBhwG,KAIpC4sG,mBAAA3rG,UAAA0uG,WAAA,SAAWR,EAAa51B,GAQpB,GAAIA,EAASs3B,UAAYtE,EAAe,CACpC,GAAMuE,GAAkBv3B,EAAS9sD,KAAKlW,gBAAgB8H,QACtD,IAAIyyF,IAAY5E,EAAAiB,YAAYz5F,KACxB,KAAM,IAAIyH,OAAM,wBAIxBhb,KAAK4wG,8BAA6B,IAGtCnE,mBAAA3rG,UAAA2uG,YAAA,SAAYhoG,EAAcunG,EAAa51B,GAKnCp5E,KAAKovG,qBACLpvG,KAAKqvG,mBAAmBr8F,KAAKomE,EAASx0E,KACtC5E,KAAK4wG,6BAA6B,kBAAkBx3B,EAASx0E,IAAG,eAGpE6nG,mBAAA3rG,UAAA4uG,eAAA,WAKI,GAAI1vG,KAAK+uG,MACL,IAAK,GAAI1pG,KAAOrF,MAAKgvG,OAAO9B,UACxB,GAAI7nG,EAAI8lB,QAAQ,cAAiB,CAC7B,GAAM/gB,GAAQ/E,EAAI62B,OAAO,EAAG72B,EAAI6G,OAAS,EACzC,IAAI/B,KAAKC,MAAMymG,OAAOzmG,GAAQ,CAC1B,GAAI0mG,GAAgC3mG,KAAKC,MAAMw7C,KAAKx7C,EAEhDxI,GAAAwrG,OAAO2D,QAAQD,EAAYE,UAC3BF,EAAYG,WAAWjxG,KAAKgvG,OAAO9B,UAAU7nG,GAAKinB,KAAK4kF,cAQ/EzE,mBAAA3rG,UAAA6uG,oBAAA,WACI3vG,KAAKgvG,OAAOmC,mBAAmB9E,EAAYC,MAC3CtsG,KAAKgvG,OAAOmC,mBAAmB9E,EAAYrxF,OAE3Chb,KAAK0vG,gBAEL,IAAM0B,GAC0B,IAA5BpxG,KAAKovG,mBACC,KACA,kBAAkBpvG,KAAKovG,mBAAkB,kBAAkBpvG,KAAKqvG,mBAAmB51E,KAAK,MAClGz5B,MAAKovG,mBAAqB,EAC1BpvG,KAAKqvG,sBACLrvG,KAAK6vG,uBAAuBuB,IAGhC3E,mBAAA3rG,UAAAuwG,uBAAA,aAIA5E,mBAAA3rG,UAAAwwG,cAAA,SACIpE,EACAqE,EACAC,GAEA,GAAItvG,EAAAsD,gBAAgBoJ,mBAAoBzE,MAAK6G,iBACpCxO,EAAAgC,WAAWC,kBAAkBgtG,eAAgB,CAC9C,GAAMvoG,GAAgBC,SAASC,eAAe,WACxCC,EAAUF,SAASC,eAAe,iBASxC,OAPqB,OAAjBF,GACAA,EAAcI,UAAUC,IAAI,eAEjB,MAAXF,IACAA,EAAQG,UAAY,yCAOhCxJ,KAAK4wG,6BAA+BW,EACpCvxG,KAAK6vG,uBAAyB2B,EAE9BxxG,KAAK+vG,oBAAsB/vG,KAAK0xG,UAAUC,UAC1C3xG,KAAKmvG,wBAA0BvtG,EAAA4I,YAAYC,cAAczK,KAAK+vG,oBAE9D,KAAK,GAAIhwG,GAAI,EAAGA,EAAImtG,EAAUhhG,OAAQnM,IAAK,CACvC,GAAMq5E,GAAW8zB,EAAUntG,EAEvB6B,GAAA4I,YAAYC,cAAc2uE,EAAS74E,KACnCP,KAAKgvG,OAAOzlG,IAAI6vE,EAAStwD,MACzB9oB,KAAKsvG,mBAAmBl2B,EAAStwD,OAAQ,GAEzC9oB,KAAKgvG,OAAOzlG,IAAI6vE,EAAS74E,GAAI64E,EAAStwD,MAI9C9oB,KAAKgvG,OAAO5/B,IAAIpvE,KAAKuvG,kBACrBvvG,KAAKgvG,OAAO96F,GAAG,OAA6BlU,KAAKwvG,YACjDxvG,KAAKgvG,OAAO96F,GAAG,QAA+BlU,KAAKyvG,aACnDzvG,KAAKgvG,OAAO4C,KAAK,WAAqC5xG,KAAK2vG,qBAC3D3vG,KAAKgvG,OAAOjrG,QAEpB0oG,oBAhOwC7qG,EAAAiwG,wBAA3BxxG,GAAAosG,mBAAkBA,GlEsspBzB,SAASnsG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MmE19pBpFqwG,EAAA3xG,EAAyB,IAOzB6sG,EAAA,SAAA7pG,GAAiC5B,EAAAyrG,YAAA7pG,EAAjC,SAAA6pG,eAAiC7pG,EAAA9B,MAAArB,KAAAoD,WAyBjC,MApBIvC,QAAAmD,eAAkBgpG,YAAA,SnEu9pBb/oG,ImEv9pBL,WACI,MAAO+oG,aAAY+E,OnEy9pBlB5tG,YAAY,EACZC,cAAc,ImEv9pBL4oG,YAAAzjG,IAAd,SAAkByoG,GACdhF,YAAY+E,MAAM/+F,KAAKg/F,IAGbhF,YAAAp5C,QAAd,WACQo5C,YAAY+E,QACZ/E,YAAY+E,MAAM7lG,OAAS,EAC3B8gG,YAAY+E,MAAQ,OAId/E,YAAA6B,WAAd,WACQ7B,YAAY+E,QACZ/E,YAAY+E,WArBb/E,YAAAz5F,KAAe,WAEPy5F,YAAA+E,SAsBnB/E,aAzBiC8E,EAAAG,SAApB5xG,GAAA2sG,YAAWA,GnEy/pBlB,SAAS1sG,EAAQD,GAEtB,YoE9/pBD,IAAA4xG,GAAA,mBAAAA,aAAuB,MAAAA,YAAV5xG,GAAA4xG,SAAQA,GpEygqBf,SAAS3xG,EAAQD,EAASF,GAE/B,YqE/gqBD,IAAAyB,GAAAzB,EAA+C,GAC/Cic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChC+xG,EAAA/xG,EAA0B,IAC1BqC,EAAArC,EAA2B,GAE3BsO,EAAAtO,EAA8B,IAM9BwuG,EAAA,mBAAAA,kBA2HA,MApHmBA,eAAAv2F,IAAf,SAAmBkU,KAaZqiF,cAAA76C,cAAP,SAAqBC,EAAoBt7B,GAAA,SAAAA,MAAA,KACrC,IAAMtb,KAEN,OAAK42C,IAIL46C,cAAc16C,aAAaF,EAAUxqC,mBAChCsN,UACAkV,OACG,SAACjuB,GACG,MAAAA,GAAKU,aAAa,UAClB5c,EAAAsyD,uBAAuBC,SAASr2C,EAAKe,aAAa,SAAUzC,EAAAuK,eAAeC,iBAElF4G,QAAQ,SAAC1P,GACN,GAAMzU,GAAezH,EAAAsyD,uBAAuBjwD,IAAI6Z,EAAKe,aAAa,SAClExV,GAAQ1H,OAAOmc,GAEXA,EAAKU,aAAa,YAClB0zF,EAAA7nF,UAAU8nF,eAAer0F,EAAKe,aAAa,WAAaxV,EAG5D,IAAI+oG,IAAoB,CAEpBt0F,GAAKU,aAAa,SACe,WAA7BV,EAAKe,aAAa,QAAwBrc,EAAAgC,WAAW2B,eAAeswE,SACpE27B,GAAW,IAIdA,IACDzD,cAAc0D,oBAAoBhpG,EAASovB,GAC3Ck2E,cAAc2D,yBAAyBx0F,EAAMzU,IAGjD8T,EAASW,EAAKI,UAAY7U,IAG3B8T,GAlCIA,GA4CAwxF,cAAA16C,aAAf,SAA4Bn2C,EAAes2C,GACvC,MADuC,UAAAA,UAClCt2C,GAIDA,EAAK2L,qBACL2qC,EAAWu6C,cAAc16C,aAAan2C,EAAK2L,mBAAoB2qC,IAG5DA,EAAS9yD,OAAOwc,IAPZs2C,GAiBAu6C,cAAA0D,oBAAf,SAAmChpG,EAAcovB,GAC/B,MAAVA,EACAA,EAAOxmB,SAAS5I,GACTA,EAAQ8T,SAASjR,OAAS,GACjChK,EAAAsD,gBAAgByM,SAAS5I,IAWlBslG,cAAA2D,yBAAf,SAAwCx0F,EAAezU,GACnD,GAAMkpG,GAAsBz0F,EAAKU,aAAa,cAAgBV,EAAKe,aAAa,cAAgB,EAChG,IAA4B,KAAxB0zF,EAAJ,CAIA,GAAMC,GAAyB5wG,EAAAsyD,uBAAuBjwD,IAAIsuG,EAC1D,IAAyB,MAArBC,IACAA,EAAkBC,oBAAoBppG,GAClCyU,EAAKU,aAAa,QAAQ,CAC1B,IAAKhc,EAAAgC,WAAW2B,eAAeswE,QAAuC,WAA7B34D,EAAKe,aAAa,OACvD,MAEJpQ,GAAAyB,cAAc0uE,mBAAmB9gE,EAAKe,aAAa,OAAQ2zF,MAQ3E7D,gBA3HatuG,GAAAsuG,cAAaA,GrEgmqBpB,SAASruG,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsEnnqBjEna,EAAAzB,EAAgE,GAChEic,EAAAjc,EAA+B,IAS/BkqB,EAAA,mBAAAA,aAiBIrqB,KAAA0yG,kBAKA1yG,KAAA2yG,SA2GJ,MArGWtoF,WAAAvpB,UAAA8xG,kBAAP,SAAyB90F,GAAzB,GAAAtE,GAAAxZ,IACIqqB,WAAU4pC,aAAan2C,EAAKyL,mBACvBsN,UACArJ,QAAQ,SAACqlF,GACN,OAAQA,EAAc30F,UAClB,IAAK,WACDmM,UAAU4pC,aAAa4+C,EAActpF,mBAChCsN,UACArJ,QAAQ,SAACslF,GACNt5F,EAAKk5F,eAAeI,EAAY50F,UAAY40F,GAGpD,MACJ,KAAK,UACDzoF,UAAU4pC,aAAa4+C,EAActpF,mBAChCsN,UACArJ,QAAQ,SAACulF,GACDA,EAAWv0F,aAAane,EAAA2yG,oBAAoBC,OAIqB,OAAlEz5F,EAAKm5F,MAAMI,EAAWl0F,aAAaxe,EAAA2yG,oBAAoBC,SACvDz5F,EAAKm5F,MAAMI,EAAWl0F,aAAaxe,EAAA2yG,oBAAoBC,OAASF,QAgB5F1oF,UAAU6oF,WAAWp1F,EAAKI,UAAYle,MAU3BqqB,UAAA4pC,aAAf,SAA4Bn2C,EAAes2C,GACvC,MADuC,UAAAA,UAClCt2C,GAIDA,EAAK2L,qBACL2qC,EAAW/pC,UAAU4pC,aAAan2C,EAAK2L,mBAAoB2qC,IAGxDA,EAAS9yD,OAAOwc,IAPZs2C,GAgBR/pC,UAAAvpB,UAAAqyG,cAAP,SAAqBjzB,GAArB,GAAA1mE,GAAAxZ,IACIqqB,WAAU4pC,aAAaj0D,KAAK2yG,MAAMzyB,GAAQ32D,mBACrCsN,UACArJ,QAAQ,SAACslF,GACN,GAAMM,GAAgB55F,EAAKk5F,eAAeI,EAAY50F,UAChDm1F,EAAiBD,EAAc50F,aAAa,SAAW40F,EAAcv0F,aAAa,SAAW,EAEnG,IAAuB,KAAnBw0F,GAOCzxG,EAAAsyD,uBAAuBC,SAASk/C,EAAgBj3F,EAAAuK,eAAeyD,eAApE,CAIA,GAAM/gB,GAAezH,EAAAsyD,uBAAuBjwD,IAAIovG,EAChDhqG,GAAQ1H,OAAOyxG,EAAeN,OAUhCzoF,UAAAvpB,UAAAsX,IAAV,SAAcC,KAtHPgS,UAAA6oF,cAMA7oF,UAAA8nF,kBAZX9nF,UAAAzO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAe0D,YtEgsqBxBA,asE/rqBKhqB,GAAAgqB,UAASA,EAmIThqB,EAAA2yG,qBACTC,KAAM,StEskqBJ,SAAS3yG,EAAQD,EAASF,GAE/B,YuEttqBD,IACAs5F,IADAt5F,EAAuB,GACvBA,EAA8B,KAM9BquG,EAAA,mBAAAA,yBAgDA,MAzCmBA,sBAAAp2F,IAAf,SAAmBkU,KAYZkiF,qBAAA16C,cAAP,SAAqBC,GACZA,GAILy6C,qBAAqBv6C,aAAaF,EAAUxqC,mBACvCsN,UACAkV,OAAO,SAACjuB,GAAkB,MAAAA,GAAKU,aAAa,UAA2C,kBAA/BV,EAAKe,aAAa,WAC1E2O,QAAQ,SAAC1P,GAAkB,MAAC27E,GAAAO,cAAcvB,eAAe36E,EAAKI,UAAYJ,KAUpE0wF,qBAAAv6C,aAAf,SAA4Bn2C,EAAes2C,GACvC,MADuC,UAAAA,UAClCt2C,GAIDA,EAAK2L,qBACL2qC,EAAWo6C,qBAAqBv6C,aAAan2C,EAAK2L,mBAAoB2qC,IAGnEA,EAAS9yD,OAAOwc,IAPZs2C,GASnBo6C,uBAhDanuG,GAAAmuG,qBAAoBA,GvEovqB3B,SAASluG,EAAQD,EAASF,GAE/B,YwE7vqBD,IAAAyB,GAAAzB,EAA+C,GAC/Cic,EAAAjc,EAA+B,IAI/BsO,EAAAtO,EAA8B,IAC9BmzG,EAAAnzG,EAAmC,IACnCozG,EAAApzG,EAAwC,IACxCqzG,EAAArzG,EAAuC,KACvCqC,EAAArC,EAA2B,GAC3BszG,EAAAtzG,EAA6C,KAC7CuzG,EAAAvzG,EAA4C,KAM5CyuG,EAAA,mBAAAA,gBAiHA,MA1GmBA,aAAAx2F,IAAf,SAAmBkU,KAaZsiF,YAAA96C,cAAP,SAAqBC,EAAoBt7B,GAAA,SAAAA,MAAA,KACrC,IAAMtb,KAEN,IAAK42C,EAqEL,MAjEA66C,aAAY36C,aAAaF,EAAUxqC,sBAC9BsN,UACAkV,OACG,SAACjuB,GACG,MAAAA,GAAKU,aAAa,UAClB5c,EAAAsyD,uBAAuBC,SAASr2C,EAAKe,aAAa,SAAUzC,EAAAuK,eAAemD,eAElF0D,QAAQ,SAAC1P,GACN,GAEI61F,GAFEtqG,EAAezH,EAAAsyD,uBAAuBjwD,IAAI6Z,EAAKe,aAAa,UAC5D6b,EAAoBvxB,SAASC,eAAe,OAOlD,IAJI0U,EAAKU,aAAa,YAClBm1F,EAAaxqG,SAASC,eAAe0U,EAAKe,aAAa,YAGvDf,EAAKU,aAAa,OAAQ,CAC1B,IAAKhc,EAAAgC,WAAW2B,eAAeswE,QAAuC,WAA7B34D,EAAKe,aAAa,OACvD,MAGAxV,aAAmBkqG,GAAAK,wBACnBnlG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GACvDA,YAAmBmqG,GAAAK,uBAC1BplG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GACvDA,YAAmBiqG,GAAAQ,mBAC1BrlG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GACvDA,YAAmBoqG,GAAAM,6BAC1BtlG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GACvDA,YAAmBqqG,GAAAM,6BAC1BvlG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GAI9C,MAApBA,EAAQiG,UACM,MAAVmpB,EACAA,EAAOnpB,SAASgC,YAAYjI,EAAQiG,UAElB,MAAdqkG,EACAA,EAAWriG,YAAYjI,EAAQiG,UAChB,MAARorB,EACPA,EAAKppB,YAAYjI,EAAQiG,UAEzBnG,SAASkI,KAAKC,YAAYjI,EAAQiG,UAG1CjG,EAAQ1H,OAAOmc,KAEfzU,EAAQ1H,OAAOmc,GACD,MAAV2a,EACAA,EAAOnpB,SAASgC,YAAYjI,EAAQiG,UAElB,MAAdqkG,EACAA,EAAWriG,YAAYjI,EAAQiG,UAChB,MAARorB,EACPA,EAAKppB,YAAYjI,EAAQiG,UAEzBnG,SAASkI,KAAKC,YAAYjI,EAAQiG,WAK9C6N,EAASW,EAAKI,UAAY7U,IAG3B8T,GAUIyxF,YAAA36C,aAAf,SAA4Bn2C,EAAes2C,GACvC,MAAKt2C,IAIDA,EAAK2L,qBACL2qC,EAAWw6C,YAAY36C,aAAan2C,EAAK2L,mBAAoB2qC,IAG1DA,EAAS9yD,OAAOwc,IAPZs2C,GASnBw6C,cAjHavuG,GAAAuuG,YAAWA,GxE21qBlB,SAAStuG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GyEx3qBjEna,EAAAzB,EAA6C,GAC7C6B,EAAA7B,EAAyC,GACzCiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B8zG,EAAA9zG,EAA6B,IAC7B+zG,EAAA/zG,EAA8B,IAC9BuC,EAAAvC,EAA+B,IAC/Bg0G,EAAAh0G,EAAiC,IACjCsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzBwC,EAAAxC,EAA4B,IAC5Bu0E,EAAAv0E,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3BomE,EAAApmE,EAA2B,IAC3B2C,EAAA3C,EAAuC,IAEnC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YACjCmkG,EAAQpyG,EAAAkD,cAAcC,KAAKivG,MAG/BN,EAAA,SAAA3wG,GAAwC5B,EAAAuyG,mBAAA3wG,EAepC,SAAA2wG,sBACI3wG,EAAA1C,KAAAT,KAAM,UANFA,KAAAq0G,mBAA6B,EAQjCr0G,KAAKs0G,cAAgBlhG,EAAAa,iBAAiB,gBACtCjU,KAAKs0G,cAAcpgG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKigF,MAAM5rE,KAAKrU,OAEjEA,KAAKu0G,aAAc,EAyd3B,MAtdYT,oBAAAhzG,UAAAixB,OAAR,SAAe2gD,GAcX,OAdW,SAAAA,MAAA,IACsB,MAA7B1yE,KAAKw0G,uBACLx0G,KAAKw0G,qBAAqB3iG,MAAMC,QAAU,QAEV,MAAhC9R,KAAKy0G,0BACLz0G,KAAKy0G,wBAAwB5iG,MAAMC,QAAU,QAEd,MAA/B9R,KAAK00G,yBACL10G,KAAK00G,uBAAuB7iG,MAAMC,QAAU,QAEb,MAA/B9R,KAAK20G,yBACL30G,KAAK20G,uBAAuB9iG,MAAMC,QAAU,QAGxC4gE,GACJ,IAAK,UACgC,MAA7B1yE,KAAKw0G,uBACLx0G,KAAKw0G,qBAAqB3iG,MAAMC,QAAU,QAE9C,MACJ,KAAK,aACmC,MAAhC9R,KAAKy0G,0BACLz0G,KAAKy0G,wBAAwB5iG,MAAMC,QAAU,QAEjD,MACJ,KAAK,YACkC,MAA/B9R,KAAK00G,yBACL10G,KAAK00G,uBAAuB7iG,MAAMC,QAAU,QAEhD,MACJ,KAAK,QACkC,MAA/B9R,KAAK20G,yBACL30G,KAAK20G,uBAAuB9iG,MAAMC,QAAU,WAM5DgiG,mBAAAhzG,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK40G,kBAEL50G,KAAKw0G,qBAAuBrrG,SAASC,eAAe,uBACpDpJ,KAAKy0G,wBAA0BtrG,SAASC,eAAe,0BACvDpJ,KAAK00G,uBAAyBvrG,SAASC,eAAe,yBACtDpJ,KAAK20G,uBAAyBxrG,SAASC,eAAe,yBACtDpJ,KAAK60G,QAAU1rG,SAASC,eAAe,UACvCpJ,KAAK+xB,OAAO,YAGhB+hF,mBAAAhzG,UAAAm+E,cAAA,SAAckU,GACVnzF,KAAK80G,YAAc3hB,EACnBnzF,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBC,cAAeh1G,KAAKyjG,cAAcpvF,KAAKrU,OAC5EA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBE,eAAgBj1G,KAAKk1G,eAAe7gG,KAAKrU,OAC9EA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBI,cAAen1G,KAAKo1G,cAAc/gG,KAAKrU,OAC5EA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBM,uBAAwBr1G,KAAKs1G,uBAAuBjhG,KAAKrU,OAC9FA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBQ,gBAAiBv1G,KAAKw1G,gBAAgBnhG,KAAKrU,OAChFA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBU,KAAMz1G,KAAK01G,KAAKrhG,KAAKrU,OAC1DA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBY,cAAe31G,KAAK0mG,cAAcryF,KAAKrU,OAC5EA,KAAK80G,YAAY5gG,GAAGigG,EAAAY,iBAAiBa,cAAe51G,KAAK6lG,cAAcxxF,KAAKrU,QAGhF8zG,mBAAAhzG,UAAA8zG,gBAAA,WACI50G,KAAK+4E,QAAQ67B,iBAAgBvpF,KACzBA,EAAC6oF,EAAA2B,cAAcC,oBAAoB,EACnCzqF,EAAC6oF,EAAA2B,cAAcE,kBAAkB,EACjC1qF,EAAC6oF,EAAA2B,cAAcG,oBAAoB,EACnC3qF,EAAC6oF,EAAA2B,cAAcI,oBAAoB,EACnC5qF,EAAC6oF,EAAA2B,cAAcK,sBAAsB,EzEo2qBpC7qF,GAEJ,IAAIA,IyEl2qBTyoF,mBAAAhzG,UAAAu1E,aAAA,WACIlzE,EAAArC,UAAMu1E,aAAY51E,KAAAT,MAElBA,KAAK80G,YAAYz+B,gBAGrBy9B,mBAAAhzG,UAAA81E,gBAAA,WACI52E,KAAK+xB,OAAO,IACZnvB,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu8D,mBAAoB,KAE3D/hE,EAAArC,UAAM81E,gBAAen2E,KAAAT,MAErB4C,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS87D,mBAAoB,IAClE7hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS67D,qBAAsB,IACpE5hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg8D,wBAAyB,IACvE/hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS+7D,0BAA2B,IACzE9hE,EAAA6F,YAAY6hE,qBAEZtoE,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAKtyE,KAAKq0G,mBACV+B,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE9D3hE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ56B,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,OAC9E93E,KAAKs0G,cAAc3+F,MAAM,IAEP,MAAdnT,EAAAgC,YAAsBhC,EAAAgC,WAAWC,kBAAkByiG,0BACnDtkG,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAcjkE,KAAKq0G,mBAAmBnmG,YAEjFlO,KAAKq2G,cAAa,IAGtBvC,mBAAAhzG,UAAAs3E,iBAAA,WACIp4E,KAAKs2G,uBAGTxC,mBAAAhzG,UAAA2iG,cAAA,WAEsC,MAA9B9gG,EAAAoG,YAAY8mE,gBACgC,MAA5CltE,EAAAoG,YAAY8mE,eAA2B,YACO,MAA9CltE,EAAAoG,YAAY8mE,eAA6B,cAEzCjtE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASu8D,oBACRviE,EAAAoG,YAAY8mE,eAA2B,WAAIltE,EAAAoG,YAAY8mE,eAA6B,cAAG3hE,YAGhGO,EAAAyB,cAAcqvE,eAGlBu0B,mBAAAhzG,UAAAo0G,eAAA,WACiD,MAAzCvyG,EAAAoG,YAAY8mE,eAAwB,QACpC7vE,KAAKq0G,mBAAqBz1F,WACtBhd,EAAA4L,YAAYjE,IAAI5G,EAAAoG,YAAY8mE,eAAekkB,WAAYpxF,EAAAoG,YAAY8mE,eAAwB,UAG/F7vE,KAAKq0G,mBAAqB1xG,EAAAoG,YAAY8mE,eAAekkB,YAI7D+f,mBAAAhzG,UAAAs0G,cAAA,WACIxyG,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS87D,mBACT9hE,EAAAoG,YAAY8mE,eAAe0mC,SAASroG,YAExCtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS67D,qBACT7hE,EAAAoG,YAAY8mE,eAAekkB,WAAW7lF,YAEtC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,WACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg8D,wBACTzuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAe0mC,SAAUhwC,EAAAsD,WAAWwB,UAAUn9D,YAC/EA,YAENtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS+7D,0BACTxuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAekkB,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,YACjFA,aAGVtL,EAAA6F,YAAY6hE,qBAEZtoE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ56B,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,OAE9E93E,KAAKs2G,uBAGTxC,mBAAAhzG,UAAAq4D,eAAA,SAAe+mB,GAGX,GAFA/8E,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEjBlgF,KAAK+4E,QAAQy9B,eAAet2B,GAI5B,OAHAiC,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEbA,GACJ,IAAKg0B,GAAA2B,cAAcC,kBACf91G,KAAK2V,OACL,MACJ,KAAKu+F,GAAA2B,cAAcI,kBACfj2G,KAAKy2G,OACL,MACJ,KAAKvC,GAAA2B,cAAcG,kBACfh2G,KAAK02G,OAAOtC,EAAMuC,MAClB,MACJ,KAAKzC,GAAA2B,cAAcE,gBACf/1G,KAAK02G,OAAOtC,EAAMwC,IAClB,MACJ,KAAK1C,GAAA2B,cAAcK,oBACfl2G,KAAKw2E,YAMrBs9B,mBAAAhzG,UAAA01E,QAAA,WACoC,MAA5B7zE,EAAAoG,YAAYgxD,cAAwBp3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACxEppE,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYgxD,aAAaqR,UAGR,MAAzCzoE,EAAAoG,YAAY8mE,eAAwB,QACpC7vE,KAAKq0G,mBAAqBz1F,WACtBhd,EAAA4L,YAAYjE,IAAI5G,EAAAoG,YAAY8mE,eAAekkB,WAAYpxF,EAAAoG,YAAY8mE,eAAwB,UAG/F7vE,KAAKq0G,mBAAqB1xG,EAAAoG,YAAY8mE,eAAekkB,WAGrDpxF,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCxoE,EAAA6F,YAAY4pE,gBAAgB1vE,EAAAoG,YAAYgxD,aAAaqR,UAEzDjoE,EAAArC,UAAM01E,QAAO/1E,KAAAT,MAEbA,KAAK4/E,UACL5/E,KAAK62G,mBAELniC,EAAAyD,YAAYjf,cAEZv2D,EAAAoG,YAAYytE,QAAQvmE,EAAYwmE,SAGpCq9B,mBAAAhzG,UAAA6U,MAAA,WACI3V,KAAKu0G,aAAc,EACnBv0G,KAAKq0G,mBAAqB1xG,EAAAoG,YAAYgxD,aAAaqR,SACnD38D,EAAAyB,cAAcuqE,cACdz6E,KAAK4/E,UACLh9E,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS87D,mBACT9hE,EAAAoG,YAAY8mE,eAAe0mC,SAASroG,YAExCtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS67D,qBACT7hE,EAAAoG,YAAY8mE,eAAekkB,WAAW7lF,YAEtC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,WACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg8D,wBACTzuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAe0mC,SAAUhwC,EAAAsD,WAAWwB,UAAUn9D,YAC/EA,YAENtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS+7D,0BACTxuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAekkB,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,YACjFA,aAGVtL,EAAA6F,YAAY6hE,qBACZtqE,KAAK80G,YAAYn/F,SAGrBm+F,mBAAAhzG,UAAA41G,OAAA,SAAOhwG,GACH1G,KAAK+xB,OAAO,IACZ/xB,KAAK4/E,UACL5/E,KAAK80G,YAAY4B,OAAOhwG,IAG5BotG,mBAAAhzG,UAAA21G,MAAA,WACQ9zG,EAAAoG,YAAY8mE,eAAekkB,WAAa,GACxCnxF,EAAA6F,YAAY4pE,gBAAgB1vE,EAAAoG,YAAY8mE,eAAekkB,WAAa,GAExE/zF,KAAK4/E,UACL5/E,KAAK62G,mBACL72G,KAAK80G,YAAY2B,SAGrB3C,mBAAAhzG,UAAAw0G,uBAAA,WACQ3yG,EAAAoG,YAAY8mE,eAAekkB,WAAa,GACxCnxF,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS67D,qBACT7hE,EAAAoG,YAAY8mE,eAAekkB,WAAW7lF,YAEtC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS+7D,0BACTxuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAekkB,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,YACjFA,YAGVtL,EAAA6F,YAAY6hE,uBAGsB,MAA9B3nE,EAAAoG,YAAY8mE,gBACgC,MAA5CltE,EAAAoG,YAAY8mE,eAA2B,YACO,MAA9CltE,EAAAoG,YAAY8mE,eAA6B,cAEzCjtE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu8D,mBAAoB,KAE/DtiE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS87D,mBAAoB,IAClE7hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS67D,qBAAsB,IACpE5hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASg8D,wBAAyB,IACvE/hE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAAS+7D,0BAA2B,IACzE9hE,EAAA6F,YAAY6hE,uBAIpBwpC,mBAAAhzG,UAAA00G,gBAAA,WACI5yG,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS87D,mBACT9hE,EAAAoG,YAAY8mE,eAAe0mC,SAASroG,YAEpC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg8D,wBACTzuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAe0mC,SAAUhwC,EAAAsD,WAAWwB,UAAUn9D,YAC/EA,YAGVtL,EAAA6F,YAAY6hE,qBACR3nE,EAAAoG,YAAY8mE,eAAekkB,WAAa,GACxC/zF,KAAKs2G,uBAIbxC,mBAAAhzG,UAAA40G,KAAA,WACI11G,KAAKigF,QAEDjgF,KAAKq0G,mBAAqB,GACR,MAAd7xG,EAAAgC,YAAsBhC,EAAAgC,WAAWC,kBAAkByiG,0BACnDtkG,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAcjkE,KAAKq0G,mBAAmBnmG;AAEjFlO,KAAKq2G,cAAa,IAElBr2G,KAAKq2G,eAGTr0G,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAKtyE,KAAKq0G,mBACV+B,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE9D3hE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ56B,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,QAGlFg8B,mBAAAhzG,UAAAo+E,UAAA,WACI/7E,EAAArC,UAAMo+E,UAASz+E,KAAAT,MAEf8C,EAAAwC,uBAAuBswE,YAEvB51E,KAAKs2G,sBAEe,MAAhBt2G,KAAK60G,SAAoB70G,KAAK60G,QAAQvrG,UAAUiO,SAAS,cACzDvX,KAAK60G,QAAQvrG,UAAUC,IAAI,aAG/B3G,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS87D,mBACT9hE,EAAAoG,YAAY8mE,eAAe0mC,SAASroG,YAExCtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS67D,qBACT7hE,EAAAoG,YAAY8mE,eAAekkB,WAAW7lF,YAEtC1L,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,WACpDzoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASg8D,wBACTzuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAe0mC,SAAUhwC,EAAAsD,WAAWwB,UAAUn9D,YAC/EA,YAENtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAAS+7D,0BACTxuD,SACItU,EAAA4L,YAAY89D,OAAO3oE,EAAAoG,YAAY8mE,eAAekkB,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,YACjFA,aAGVtL,EAAA6F,YAAY6hE,qBAEZtqE,KAAK80G,YAAY51B,aAGrB40B,mBAAAhzG,UAAAk/E,MAAA,WACIl9E,EAAAwC,uBAAuBswE,YACH,MAAhB51E,KAAK60G,SAAoB70G,KAAK60G,QAAQvrG,UAAUiO,SAAS,cACzDvX,KAAK60G,QAAQvrG,UAAUC,IAAI,aAE/BvJ,KAAK80G,YAAY90B,SAGrB8zB,mBAAAhzG,UAAA4lG,cAAA,WACI1mG,KAAKs2G,uBAGTxC,mBAAAhzG,UAAAm/E,MAAA,WACwB,MAAhBjgF,KAAK60G,SAAmB70G,KAAK60G,QAAQvrG,UAAUiO,SAAS,cACxDvX,KAAK60G,QAAQvrG,UAAU6N,OAAO,aAElCvU,EAAA6F,YAAY2rE,aAAc,EAC1Bp0E,KAAKs0G,cAAc5+F,OACnB1V,KAAK80G,YAAY70B,SAGrB6zB,mBAAAhzG,UAAA+kG,cAAA,WACI7lG,KAAKu0G,aAAc,EACnBzxG,EAAAwC,uBAAuB83E,WACvB3uE,EAAAyB,cAAc4vE,YAAY7vE,EAAYioE,OAG1C47B,mBAAAhzG,UAAAw1G,oBAAA,WAgBI,GAdkC,MAA9B3zG,EAAAoG,YAAY8mE,gBACgC,MAA5CltE,EAAAoG,YAAY8mE,eAA2B,YACO,MAA9CltE,EAAAoG,YAAY8mE,eAA6B,eAEzCjtE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASu8D,oBACRviE,EAAAoG,YAAY8mE,eAA2B,WAAIltE,EAAAoG,YAAY8mE,eAA6B,cAAG3hE,YAE5FtL,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASu8D,oBACRviE,EAAAoG,YAAY8mE,eAA2B,WAAIltE,EAAAoG,YAAY8mE,eAA6B,cAAG3hE,aAI5FtL,EAAA6F,YAAY8gE,UACZ3mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu8D,mBAAoB,KAC3DtiE,EAAA6F,YAAYC,yBAAyBjG,EAAAkG,SAASu8D,mBAAoB,KAElEllE,KAAKopG,QACLppG,KAAK+xB,OAAO,aACT,CACH,GAAI+kF,IAAqB,CACmB,KAAxCn0G,EAAAoG,YAAY8mE,eAAe0mC,WAC3BO,GAAY,GAGZA,EACIn0G,EAAAoG,YAAY8mE,eAAeknC,aAC3B/2G,KAAK+xB,OAAO,aAEZ/xB,KAAK+xB,OAAO,SAEqB,MAA9BpvB,EAAAoG,YAAY8mE,gBAA2BltE,EAAAoG,YAAY8mE,eAAeknC,aAGzE/2G,KAAK+xB,OAAO,WAFZ/xB,KAAK+xB,OAAO,cAKhB/xB,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6oF,EAAA2B,cAAcC,oBAAoB,EACnCzqF,EAAC6oF,EAAA2B,cAAcE,kBAAmBe,EAClCzrF,EAAC6oF,EAAA2B,cAAcG,oBAAqBc,EACpCzrF,EAAC6oF,EAAA2B,cAAcI,mBAAoBtzG,EAAAoG,YAAY8mE,eAAeknC,aAC9D1rF,EAAC6oF,EAAA2B,cAAcK,sBAAsB,EzE8uqBpC7qF,IyE1uqBT3oB,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,gBzE8uqBxC,IAAI5rF,IyE3uqBTyoF,mBAAAhzG,UAAAsoG,MAAA,WACI10B,EAAAyD,YAAY9e,aAEZr5D,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6oF,EAAA2B,cAAcC,oBAAoB,EACnCzqF,EAAC6oF,EAAA2B,cAAcE,kBAAkB,EACjC1qF,EAAC6oF,EAAA2B,cAAcG,oBAAoB,EACnC3qF,EAAC6oF,EAAA2B,cAAcI,oBAAoB,EACnC5qF,EAAC6oF,EAAA2B,cAAcK,sBAAsB,EzE6uqBpC7qF,GAEJ,IAAIA,IyE3uqBTyoF,mBAAAhzG,UAAA0lB,OAAA,WACIxmB,KAAK+4E,QAAQm+B,kBAAkBhD,EAAA2B,cAAcC,kBAAmB91G,KAAKu0G,aACrE7xG,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAG7CnD,mBAAAhzG,UAAA8+E,QAAA,WACI5/E,KAAKm3G,SAASC,oBACd10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBA7ejDnD,mBAAAl4F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,czE6trBxBgqF,qByE5trBgCG,EAAAoD,aAA3Bh3G,GAAAyzG,mBAAkBA,GzEourBzB,SAASxzG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G0EtwrBjEna,EAAAzB,EAAwD,GACxDm3G,EAAAn3G,EAAqC,IACrCic,EAAAjc,EAA+B,IAC/B+xG,EAAA/xG,EAAwC,IAExCgiF,EAAAhiF,EAAyB,IACzBwC,EAAAxC,EAA4B,IAC5BqC,EAAArC,EAA2B,GAC3BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BomE,EAAApmE,EAA2B,IAC3B2C,EAAA3C,EAAuC,IAGvCk3G,EAAA,SAAAl0G,GAAkC5B,EAAA81G,aAAAl0G,EAc9B,SAAAk0G,cAAYhyG,GACRlC,EAAA1C,KAAAT,MAdMA,KAAAu3G,KAAe,GAgBrBv3G,KAAKu3G,KAAOlyG,EAEZrF,KAAKm3G,SAAW,GAAIjF,GAAA7nF,UAAarqB,KAAKu3G,KAAI,WAAY31G,EAAAsyD,uBAAuBsjD,iBAAiBx3G,OA2MtG,MAxMIa,QAAAmD,eAAcqzG,aAAAv2G,UAAA,W1EwvrBTmD,I0ExvrBL,WACI,MAAOjE,MAAKm3G,U1E0vrBXhzG,YAAY,EACZC,cAAc,I0ExvrBnBizG,aAAAv2G,UAAAm2G,cAAA,WACI,MAAOj3G,MAAKm3G,SAASF,iBAGzBI,aAAAv2G,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,IAGjBu5F,aAAAv2G,UAAAm+E,cAAA,SAAckU,KAEdkkB,aAAAv2G,UAAAu1E,aAAA,WACIr2E,KAAKy3G,gBAAkBtuG,SAASC,eAAe,kBAC/CpJ,KAAK03G,cAAgBvuG,SAASC,eAAe,iBAGjDiuG,aAAAv2G,UAAA81E,gBAAA,aAEAygC,aAAAv2G,UAAAq4D,eAAA,SAAe+mB,KAEfm3B,aAAAv2G,UAAA01E,QAAA,aAEA6gC,aAAAv2G,UAAAo+E,UAAA,aAEAm4B,aAAAv2G,UAAA62G,SAAA,cAAAn+F,GAAAxZ,IAC0B,OAAlBA,KAAK43G,YACL53G,KAAK43G,UAAYzuG,SAASC,eAAe,aAGvB,MAAlBpJ,KAAK43G,YACL53G,KAAK43G,UAAUtuG,UAAU6N,OAAO,SAChC7B,WAAW,WAAM,MAAAkE,GAAKo+F,UAAUtuG,UAAUC,IAAI,UAAU,IACxD+L,WAAW,WAAM,MAAAkE,GAAKo+F,UAAUtuG,UAAU6N,OAAO,UAAU,KAC3DgrE,EAAAp4D,SAASsS,KAAK,mBAItBg7E,aAAAv2G,UAAA47E,WAAA,SAAWmD,GAAX,GAAArmE,GAAAxZ,IAAW,UAAA6/E,OAAA,GACe,MAAlB7/E,KAAK63G,YACL73G,KAAK63G,UAAY1uG,SAASC,eAAe,aAGnB,MAAtBpJ,KAAK83G,gBACL93G,KAAK83G,cAAgB3uG,SAASC,eAAe,iBAGzB,MAApBpJ,KAAK+3G,cACL/3G,KAAK+3G,YAAc5uG,SAASC,eAAe,eAGnB,MAAxBpJ,KAAKg4G,kBACLh4G,KAAKg4G,gBAAkB7uG,SAASC,eAAe,mBAG7B,MAAlBpJ,KAAK43G,YACL53G,KAAK43G,UAAYzuG,SAASC,eAAe,aAGxB,MAAjBpJ,KAAKi4G,WACLj4G,KAAKi4G,SAAW9uG,SAASC,eAAe,YAGtB,MAAlBpJ,KAAKk4G,YACLl4G,KAAKk4G,UAAY/uG,SAASC,eAAe,aAGzCtG,EAAAwC,uBAAuB6lE,OACD,MAAlBnrE,KAAK63G,WAAsB73G,KAAK63G,UAAUvuG,UAAUiO,SAAS,YAC7DvX,KAAK63G,UAAUvuG,UAAUC,IAAI,WAEP,MAAtBvJ,KAAK83G,gBACD93G,KAAK83G,cAAcxuG,UAAUiO,SAAS,YACtCvX,KAAK83G,cAAcxuG,UAAU6N,OAAO,WAEpC0oE,IACA7/E,KAAK83G,cAAcxuG,UAAU6N,OAAO,SACpC7B,WAAW,WAAM,MAAAkE,GAAKs+F,cAAcxuG,UAAUC,IAAI,UAAU,IAC5D+L,WAAW,WAAM,MAAAkE,GAAKs+F,cAAcxuG,UAAU6N,OAAO,UAAU,OAG/C,MAApBnX,KAAK+3G,aAAwB/3G,KAAK+3G,YAAYzuG,UAAUiO,SAAS,YACjEvX,KAAK+3G,YAAYzuG,UAAUC,IAAI,WAEP,MAAxBvJ,KAAKg4G,iBACDh4G,KAAKg4G,gBAAgB1uG,UAAUiO,SAAS,YACxCvX,KAAKg4G,gBAAgB1uG,UAAU6N,OAAO,aAIpB,MAAtBnX,KAAK83G,eAA0B93G,KAAK83G,cAAcxuG,UAAUiO,SAAS,YACrEvX,KAAK83G,cAAcxuG,UAAUC,IAAI,WAEf,MAAlBvJ,KAAK63G,YACD73G,KAAK63G,UAAUvuG,UAAUiO,SAAS,YAClCvX,KAAK63G,UAAUvuG,UAAU6N,OAAO,WAEhC0oE,IACA7/E,KAAK63G,UAAUvuG,UAAU6N,OAAO,SAChC7B,WAAW,WAAM,MAAAkE,GAAKq+F,UAAUvuG,UAAUC,IAAI,UAAU,IACxD+L,WAAW,WAAM,MAAAkE,GAAKq+F,UAAUvuG,UAAU6N,OAAO,UAAU,OAIvC,MAAxBnX,KAAKg4G,iBAA4Bh4G,KAAKg4G,gBAAgB1uG,UAAUiO,SAAS,YACzEvX,KAAKg4G,gBAAgB1uG,UAAUC,IAAI,WAEf,MAApBvJ,KAAK+3G,aACD/3G,KAAK+3G,YAAYzuG,UAAUiO,SAAS,YACpCvX,KAAK+3G,YAAYzuG,UAAU6N,OAAO,YAKxB,MAAlBnX,KAAK43G,WACD/3B,IACA7/E,KAAK43G,UAAUtuG,UAAU6N,OAAO,SAChC7B,WAAW,WAAM,MAAAkE,GAAKo+F,UAAUtuG,UAAUC,IAAI,UAAU,IACxD+L,WAAW,WAAM,MAAAkE,GAAKo+F,UAAUtuG,UAAU6N,OAAO,UAAU,MAI/DovD,EAAAsD,WAAWiH,UAAU5kE,OAAS,GACT,MAAjBlM,KAAKi4G,UAAoBj4G,KAAKi4G,SAAS3uG,UAAUiO,SAAS,eAC1DvX,KAAKi4G,SAAS3uG,UAAU6N,OAAO,cAGb,MAAlBnX,KAAKk4G,WAAqBl4G,KAAKk4G,UAAU5uG,UAAUiO,SAAS,eAC5DvX,KAAKk4G,UAAU5uG,UAAU6N,OAAO,gBAGf,MAAjBnX,KAAKi4G,UAAqBj4G,KAAKi4G,SAAS3uG,UAAUiO,SAAS,eAC3DvX,KAAKi4G,SAAS3uG,UAAUC,IAAI,cAGV,MAAlBvJ,KAAKk4G,WAAsBl4G,KAAKk4G,UAAU5uG,UAAUiO,SAAS,eAC7DvX,KAAKk4G,UAAU5uG,UAAUC,IAAI,gBAKzC8tG,aAAAv2G,UAAAqpE,eAAA,SAAez4B,GAAA,SAAAA,OAAA,GACW,MAAlB1xC,KAAK43G,YACL53G,KAAK43G,UAAYzuG,SAASC,eAAe,aAGvB,MAAlBpJ,KAAK43G,YACDlmE,EACA1xC,KAAK43G,UAAU/lG,MAAMnL,MAAQ,UAE7B1G,KAAK43G,UAAU/lG,MAAMnL,MAAQ,YAKzC2wG,aAAAv2G,UAAA+1G,iBAAA,WACQl0G,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAChCtoE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,aACvD0Y,EAAAp4D,SAASsS,KAAK,mBACNv5B,EAAAwC,uBAAuB6lE,OAC/BgX,EAAAp4D,SAASsS,KAAK,qBAK1Bg7E,aAAAv2G,UAAAq/E,UAAA,aAEAk3B,aAAAv2G,UAAAu1G,aAAA,SAAa7/B,GAAA,SAAAA,OAAA,IACS,MAAdh0E,EAAAgC,YAAuBhC,EAAAgC,WAAWC,kBAAkByiG,4BAG5B,MAAxBlnG,KAAKy3G,kBACDjhC,EACKx2E,KAAKy3G,gBAAgBnuG,UAAUiO,SAAS,YACzCvX,KAAKy3G,gBAAgBnuG,UAAUC,IAAI,WAGnCvJ,KAAKy3G,gBAAgBnuG,UAAUiO,SAAS,aACxC3U,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDrhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu7D,kBAAmB,KAC1DlkE,KAAKy3G,gBAAgBnuG,UAAU6N,OAAO,aAIxB,MAAtBnX,KAAK03G,gBACDlhC,EACIx2E,KAAK03G,cAAcpuG,UAAUiO,SAAS,YACtCvX,KAAK03G,cAAcpuG,UAAU6N,OAAO,WAGnCnX,KAAK03G,cAAcpuG,UAAUiO,SAAS,YACvCvX,KAAK03G,cAAcpuG,UAAUC,IAAI,cAMjD8tG,aAAAv2G,UAAAs3E,iBAAA,aA9NJi/B,aAAAz7F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c1E08rBxButF,e0Ez8rB0BC,EAAAa,qBAArB93G,GAAAg3G,aAAYA,G1Ei9rBnB,SAAS/2G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G2E3+rBjEna,EAAAzB,EAA6C,GAC7Ci4G,EAAAj4G,EAA4B,IAE5B6mB,EAAA7mB,EAA6B,IAC7B+rG,EAAA/rG,EAA4B,IAC5BuC,EAAAvC,EAA+B,IAC/Bic,EAAAjc,EAA+B,IAC/BgiF,EAAAhiF,EAAyB,IAmBzBg4G,EAAA,SAAAh1G,GAA0C5B,EAAA42G,qBAAAh1G,EAiBtC,SAAAg1G,wBACIh1G,EAAA1C,KAAAT,MALJA,KAAAq4G,oBAA8B,GAC9Br4G,KAAAs4G,cAAwB,GACxBt4G,KAAAq2F,mBAA6B,EAqSjC,MAzRI8hB,sBAAAr3G,UAAAa,OAAA,SAAOmc,GA2CH,GA1CA3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAETA,EAAKU,aAAa,QAClB9b,EAAA0F,eAAe+tF,sBAAsBr4E,EAAKe,aAAa,OAAS7e,MAWhE8d,EAAKU,aAAa,UAElBxe,KAAK6R,MAA4BmV,EAAAM,aAAausC,WAAW/1C,EAAKe,aAAa,UACzD,MAAd7e,KAAK6R,QAEL7R,KAAK4pG,OAASsC,EAAA0C,YAAY96C,cAAc9zD,KAAK6R,MAAMiM,KAAmB9d,QAQ1EA,KAAK4pG,OAASsC,EAAA0C,YAAY96C,cAAch2C,EAAmB9d,MAG5C,MAAfA,KAAK4pG,OAYL9rF,EAAKU,aAAa,UAClB,GAAIV,EAAKU,aAAa,gBAAiB,CACnC,GAAI+5F,GAAyB71G,EAAA0F,eAAeqwF,eAAe36E,EAAKe,aAAa,gBACzE05F,KACAv4G,KAAKw4G,QAAU16F,EAAKe,aAAa,eAGrC7e,MAAKw4G,QAAU16F,EAAKe,aAAa,SAIrCf,GAAKU,aAAa,yBAClBxe,KAAKq4G,oBAAsBv6F,EAAKe,aAAa,wBAE7Cf,EAAKU,aAAa,mBAClBxe,KAAKs4G,cAAgBx6F,EAAKe,aAAa,kBAGvCf,EAAKU,aAAa,uBAClBxe,KAAKq2F,kBAAoBz0F,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,uBAGpEf,EAAKU,aAAa,YACdV,EAAKU,aAAa,mBAClBxe,KAAKy4G,SAAW36F,EAAKe,aAAa,WAClC7e,KAAKsP,SAASyC,iBAAiBomG,qBAAqBO,YAAa14G,KAAK24G,cAActkG,KAAKrU,QAI7E,MAAhBA,KAAKw4G,UACLx4G,KAAKsP,SAASyC,iBAAiBomG,qBAAqBS,KAAM54G,KAAK64G,OAAOxkG,KAAKrU,OAC3EA,KAAKsP,SAASyC,iBAAiBomG,qBAAqBW,IAAK94G,KAAK+4G,MAAM1kG,KAAKrU,QAGzE8d,EAAKU,aAAa,kBAClB9b,EAAA0F,eAAegtF,8BAA8Bt3E,EAAKe,aAAa,iBAAkB7e,MASjF8d,EAAKU,aAAa,UAClBxe,KAAKsP,SAAS0pG,QAAc,KAAIl7F,EAAKe,aAAa,SASlDf,EAAKU,aAAa,iBAClB9b,EAAA0F,eAAe8sF,0BAA0Bp3E,EAAKe,aAAa,gBAAiB7e,MAS5E8d,EAAKU,aAAa,uBAClB9b,EAAA0F,eAAektF,gCAAgCx3E,EAAKe,aAAa,sBAAuB7e,KAO5F,IAAIi5G,IAAuB,CACvBn7F,GAAKU,aAAa,iBAClBy6F,EAAcr3G,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,iBAGzDo6F,GACAj5G,KAAKk5G,2BAOLf,qBAAAr3G,UAAAo4G,wBAAR,WACI,GAAIC,IAAgB,EAChBC,GAAkB,EAClBC,EAAQ,CAMZr5G,MAAKsP,SAASyC,iBACV,aACA,SAAU6C,GAENukG,EAAgBn5G,KAAKwX,UAAY,EACjC4hG,EAAkBp5G,KAAKwX,UAAYxX,KAAKs5G,aAAet5G,KAAKutC,aAG5D8rE,EAAQzkG,EAAM2kG,QAAQ,GAAGC,QAE7B,GAMJx5G,KAAKsP,SAASyC,iBACV,YACA,SAAU6C,GAEN,GAA6B,IAAzBA,EAAM2kG,QAAQrtG,OAAc,CAE5B,GAAIm8C,GAAKzzC,EAAM2kG,QAAQ,GAAGC,MAAQH,EAC9BI,GAAQpxD,CACZgxD,GAAQzkG,EAAM2kG,QAAQ,GAAGC,MAGpBnxD,GAAM8wD,GAAmBM,GAAQL,EAElCxkG,EAAMM,kBAGNN,EAAMK,oBAIlB,IASAkjG,qBAAAr3G,UAAA+3G,OAAR,WACI,GAAoB,MAAhB74G,KAAKw4G,QAAiB,CACtB,GAAInvG,GAAuBF,SAASC,eAAepJ,KAAKw4G,QACzC,OAAXnvG,GACAA,EAAQC,UAAU6N,OAAOzU,EAAA0F,eAAe26E,iBAU5Co1B,qBAAAr3G,UAAAi4G,MAAR,WACI,GAAoB,MAAhB/4G,KAAKw4G,QAAiB,CACtB,GAAInvG,GAAuBF,SAASC,eAAepJ,KAAKw4G,QACzC,OAAXnvG,GACAA,EAAQC,UAAUC,IAAI7G,EAAA0F,eAAe26E,iBAKzCo1B,qBAAAr3G,UAAA63G,cAAR,WACI,GAAqB,MAAjB34G,KAAKy4G,UAA2E,MAAvD/1G,EAAA0F,eAAe+tF,sBAAsBn2F,KAAKy4G,UAAmB,CACtFt2B,EAAAp4D,SAASsS,KAAK,YACd,IAAIhzB,GAAgC3G,EAAA0F,eAAe+tF,sBAAsBn2F,KAAKy4G,SAC/D,OAAXpvG,GAAuC,MAApBA,EAAQiG,WACvBjG,EAAQiG,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnDrgF,EAAA0F,eAAewtF,iBAAiB,IAC5BvsF,EAAQgtF,mBACRhtF,EAAQqwG,0BAA0BrwG,GAEtCA,EAAQ6yD,QACR7yD,EAAQiG,SAAShG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,iBAE7C15E,EAAQgtF,mBACRhtF,EAAQiG,SAASgsC,gBAAgB,SAErCjyC,EAAQiG,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAEE,MAAhD55E,SAASC,eAAe,uBACxBD,SAASC,eAAe,qBAAqBoO,UAAY,MAMzE2gG,qBAAAr3G,UAAA44G,0BAAA,SAA0BrwG,GACtB,GAAwB,MAApBA,EAAQiG,UAAmD,IAA/BjG,EAAQgvG,qBAAsD,IAAzBhvG,EAAQivG,cAAqB,CAC9F,GAAIqB,GAA+BtwG,EAAQiG,SAASgtD,uBAAuBjzD,EAAQgvG,oBACnF,IAAkB,MAAdsB,EAAQ,GAAY,CACpB,GAAIC,GAAqB1jG,SACrBzS,OAAO0S,iBAAiBwjG,EAAQ,GAAI,MAAMtjG,iBAAiB,gBAE3DwjG,EAAwB3jG,SACxBzS,OAAO0S,iBAAiBwjG,EAAQ,GAAI,MAAMtjG,iBAAiB,mBAE3DyjG,EAAuCH,EAAQ,GAAGr9C,uBAAuBjzD,EAAQivG,cACrF,IAAuB,MAAnBwB,GAA2BA,EAAgB5tG,OAAS,EAAG,CAEvD,IAAK,GADDtF,GAAiBgzG,EAAaC,EACzB95G,EAAY,EAAGA,EAAI+5G,EAAgB5tG,OAAQnM,IAAK,CACrD,GAAIg6G,GAAqB7jG,SACrBzS,OAAO0S,iBAAiB2jG,EAAgB/5G,GAAI,MAAMsW,iBAAiB,UAEvEzP,IAAUmzG,EAEd1wG,EAAQiG,SAASuC,MAAMjL,OAASA,EAAS,SAMzDuxG,qBAAAr3G,UAAAy3F,YAAA,SAAYxrF,GACR,GAAqB,MAAjB/M,KAAKsP,SACL,GAAIvC,EACA/M,KAAKsP,SAAShG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,mBAG9C,IADA/iF,KAAKsP,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,eACtB,MAAjB/iF,KAAKy4G,UAA2E,MAAvD/1G,EAAA0F,eAAe+tF,sBAAsBn2F,KAAKy4G,UAAmB,CACtF,GAAIpvG,GAAgC3G,EAAA0F,eAAe+tF,sBAAsBn2F,KAAKy4G,SAC/D,OAAXpvG,GAAuC,MAApBA,EAAQiG,WACtBjG,EAAQiG,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBAChD15E,EAAQgtF,mBACRhtF,EAAQiG,SAASgsC,gBAAgB,SAErCjyC,EAAQiG,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,mBAYtEo1B,qBAAAr3G,UAAAo7D,MAAA,aAlTOi8C,qBAAAS,KAAe,YACfT,qBAAAW,IAAc,WACdX,qBAAA6B,WAAqB,aACrB7B,qBAAA8B,SAAmB,WACnB9B,qBAAAO,YAAsB,QANjCP,qBAAAv8F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c3EkqsBxBquF,uB2EjqsBkCC,EAAAtuF,YAA7BzpB,GAAA83G,qBAAoBA,G3EyqsB3B,SAAS73G,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G4E1ssBjEna,EAAAzB,EAAqD,GACrDuC,EAAAvC,EAA+B,IAC/BiC,EAAAjC,EAA0B,IAC1Bic,EAAAjc,EAA+B,IAC/ByN,EAAAzN,EAAwB,GAOxB2pB,EAAA,WAWI,QAAAA,aAAYowF,GAAA,SAAAA,MAAA,OACQ,KAAZA,IACAl6G,KAAKsP,SAAWnG,SAASkX,cAAc65F,IA+NnD,MArNIpwF,aAAAhpB,UAAAa,OAAA,SAAOmc,GAOCA,EAAKU,aAAa,QAClBxe,KAAKsP,SAAS/O,GAAKud,EAAKe,aAAa,OASrCf,EAAKU,aAAa,eAClBxe,KAAKohE,UAAYtjD,EAAKe,aAAa,cASnCf,EAAKU,aAAa,aAClBxe,KAAKihE,QAAUnjD,EAAKe,aAAa,YASjCf,EAAKU,aAAa,SAClBxe,KAAKghE,IAAMljD,EAAKe,aAAa,OAC7Bnc,EAAA0F,eAAe6D,YAAY+G,KAAKhT,MAChCA,KAAKi4F,WASLn6E,EAAKU,aAAa,cAClBxe,KAAKsP,SAAS2xC,UAAYnjC,EAAKe,aAAa,aAS5Cf,EAAKU,aAAa,UAClBxe,KAAKsP,SAAS0pG,QAAc,KAAIl7F,EAAKe,aAAa,SASlDf,EAAKU,aAAa,UAClBxe,KAAKssB,KAAOxO,EAAKe,aAAa,QAC9Bnc,EAAA0F,eAAeotF,oBAAoB13E,EAAKe,aAAa,QAAS7e,OAG9D8d,EAAKU,aAAa,SAA4B,MAAjBxe,KAAKsP,UAAwC,MAApB1B,EAAA1K,QAAQU,UAC9D5D,KAAKsP,SAAShD,aAAa,WAAYsB,EAAA1K,QAAQU,WAUvDkmB,YAAAhpB,UAAAm3F,QAAA,SAAQlrF,GACJ,GAAIm0D,GAAe,EAOnB,IALa,MAATn0D,IACAm0D,EAAOn0D,EACP/M,KAAK+gE,aAAeh0D,GAGH,MAAjB/M,KAAKsP,SAAkB,CAEvB,GAAgB,MAAZtP,KAAKghE,KAC6B,MAA9B5+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,KACtB,GAAKp/D,EAAA4I,YAAYC,cAAcy2D,GAQ3BA,EAAO9+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,SARK,CAClC,GAAIm5C,GAAuBj5C,EAAKl7C,MAAM,IAElCk7C,GADiB,IAAjBi5C,EAAMjuG,OACC9J,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKm5C,EAAM,GAAIA,EAAM,IAE3C/3G,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKE,GAS9B,MAAhBlhE,KAAKihE,UACLC,EAAO9+D,EAAAsH,UAAUg3D,WAAW1gE,KAAKihE,QAASC,IAIxB,MAAlBlhE,KAAKohE,YACLF,EAAO9+D,EAAAsH,UAAUy3D,WAAWnhE,KAAKohE,UAAWF,GAExClhE,KAAKohE,YAAch/D,EAAAsH,UAAU23D,cAAgBrhE,KAAKsP,SAAShG,UAAUiO,SAAS,WACjE,KAAT2pD,EACAlhE,KAAKsP,SAAShG,UAAUC,IAAI,WAE5BvJ,KAAKsP,SAAShG,UAAU6N,OAAO,aAM3CnX,KAAKsP,SAAS9F,UAAY03D,IAQlCp3C,YAAAhpB,UAAAqL,WAAA,WACI,GAAI+0D,GAAe,EAMnB,IAJyB,MAArBlhE,KAAK+gE,eACLG,EAAOlhE,KAAK+gE,cAGK,MAAjB/gE,KAAKsP,SAAkB,CAEvB,GAAgB,MAAZtP,KAAKghE,KAC6B,MAA9B5+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,KACtB,GAAKp/D,EAAA4I,YAAYC,cAAcy2D,GAQ3BA,EAAO9+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,SARK,CAClC,GAAIm5C,GAAuBj5C,EAAKl7C,MAAM,IAElCk7C,GADiB,IAAjBi5C,EAAMjuG,OACC9J,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKm5C,EAAM,GAAIA,EAAM,IAE3C/3G,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKE,GAS9B,MAAhBlhE,KAAKihE,UACLC,EAAO9+D,EAAAsH,UAAUg3D,WAAW1gE,KAAKihE,QAASC,IAIxB,MAAlBlhE,KAAKohE,YACLF,EAAO9+D,EAAAsH,UAAUy3D,WAAWnhE,KAAKohE,UAAWF,GAExClhE,KAAKohE,YAAch/D,EAAAsH,UAAU23D,cAAgBrhE,KAAKsP,SAAShG,UAAUiO,SAAS,WACjE,KAAT2pD,EACAlhE,KAAKsP,SAAShG,UAAUC,IAAI,WAE5BvJ,KAAKsP,SAAShG,UAAU6N,OAAO,aAM3CnX,KAAKsP,SAAS9F,UAAY03D,IAcxBp3C,YAAAhpB,UAAAsX,IAAV,SAAcC,KAaJyR,YAAAhpB,UAAA4gB,SAAV,SAAmBrJ,KAvOvByR,YAAAlO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c5Ek1sBxBA,e4Ej1sBKzpB,GAAAypB,YAAWA,G5Ey1sBlB,SAASxpB,EAAQD,EAASF,GAE/B,Y6Et2sBD,IAAAyB,GAAAzB,EAA8B,GAkB9BkqB,EAAA,WAQI,QAAAA,WAAY+vF,EAAiBC,GALrBr6G,KAAAm3G,YAMJn3G,KAAKs6G,SAAWF,EAChBp6G,KAAKu6G,OAASF,EACdr6G,KAAKw6G,qBAAsB,EAC3Bx6G,KAAKy6G,WAAY,EAEjBz6G,KAAK40G,gBAAkB50G,KAAK40G,gBAAgBvgG,KAAKrU,MACjDA,KAAK06G,eAAiB16G,KAAK06G,eAAermG,KAAKrU,MAC/CA,KAAKk3G,kBAAoBl3G,KAAKk3G,kBAAkB7iG,KAAKrU,MACrDA,KAAKw2G,eAAiBx2G,KAAKw2G,eAAeniG,KAAKrU,MAC/CA,KAAKi3G,cAAgBj3G,KAAKi3G,cAAc5iG,KAAKrU,MAC7CA,KAAK26G,aAAe36G,KAAK26G,aAAatmG,KAAKrU,MAC3CA,KAAKo3G,kBAAoBp3G,KAAKo3G,kBAAkB/iG,KAAKrU,MACrDA,KAAK46G,eAAiB56G,KAAK46G,eAAevmG,KAAKrU,MAgPvD,MA7OIa,QAAAmD,eAAWqmB,UAAAvpB,UAAA,Y7E+0sBNmD,I6E/0sBL,WACI,MAAOjE,MAAK66G,W7Ei1sBXj+F,I6E90sBL,SAAoB7P,GAChB/M,KAAK66G,UAAY9tG,G7Eg1sBhB5I,YAAY,EACZC,cAAc,I6E90sBXimB,UAAAvpB,UAAAsX,IAAR,SAAYC,KAMJgS,UAAAvpB,UAAA4gB,SAAR,SAAiBrJ,EAAWxY,KAMpBwqB,UAAAvpB,UAAA85G,eAAR,WACI,GAAI56G,KAAK66G,YAAc76G,KAAKw6G,oBACxB,IACIx6G,KAAK86G,WACP,MAAOj7G,MAQTwqB,UAAAvpB,UAAAi6G,iBAAR,WACI,GAAI/6G,KAAKy6G,UACL,KAAM,IAAIz/F,OAAM,cAAchb,KAAKu6G,OAAM,MAAMv6G,KAAKs6G,SAAQ,mBAI5DjwF,UAAAvpB,UAAAk6G,kBAAR,WAGI,GAFAh7G,KAAK+6G,mBAED/6G,KAAKw6G,oBACL,KAAM,IAAIx/F,OAAM,IAAIhb,KAAKu6G,OAAM,MAAMv6G,KAAKs6G,SAAQ,6CAGtDt6G,MAAKw6G,qBAAsB,GAGvBnwF,UAAAvpB,UAAAm6G,gBAAR,SAAwBC,GACpBl7G,KAAK+6G,mBAEL/6G,KAAKw6G,qBAAsB,EAGvB54G,EAAAqG,MAAMC,kBAAkBgzG,KACxBA,GAAa,GAGbA,GACAl7G,KAAK46G,kBAINvwF,UAAAvpB,UAAA65G,aAAP,SAAoBQ,GAChBn7G,KAAKg7G,mBAEL,IAAIE,EACJ,KACIA,EAAaC,EAASn7G,M7Es0sBzB,Q6Ep0sBGA,KAAKi7G,gBAAgBC,KAQtB7wF,UAAAvpB,UAAA8zG,gBAAP,SAAuB77B,GACnB/4E,KAAKg7G,mBAEL,KACI,IAAK,GAAI31G,KAAO0zE,GACRA,EAAQh4E,eAAesE,IACvBrF,KAAK06G,eAAer1G,EAAK0zE,EAAQ1zE,I7Em0sB5C,Q6E/zsBGrF,KAAKi7G,iBAAgB,KAWrB5wF,UAAAvpB,UAAA45G,eAAR,SAAuBx6B,EAAgBnzE,GAAA,SAAAA,OAAA,GACnC/M,KAAK+6G,kBAEL,IAAIK,GAAWx5G,EAAAqG,MAAMC,kBAAkBlI,KAAKm3G,SAASj3B,GAcrD,OAbIk7B,KACAp7G,KAAKm3G,SAASj3B,GAAUnzE,EAExB/M,KAAK46G,kBAUFQ,GAUJ/wF,UAAAvpB,UAAAk2G,mBAAP,SAA0BqE,EAAwCC,GAC9Dt7G,KAAKg7G,mBAEL,KACI,GAAIO,GAAqC,iBAAnBF,EACtB,IAAIE,EACA,IAAK,GAAIx7G,GAAI,EAAGA,EAAIu7G,EAAYpvG,OAAQnM,IAAK,CACzC,GAAImgF,GAASo7B,EAAYv7G,EACzBC,MAAKk3G,kBAAkBh3B,EAAQm7B,OAGnC,KAAK,GAAIh2G,KAAOg2G,GACPA,EAAgCt6G,eAAesE,IAChDrF,KAAKk3G,kBAAkB7xG,EAAMg2G,EAAgCh2G,I7EkzsB5E,Q6E7ysBGrF,KAAKi7G,iBAAgB,KAWtB5wF,UAAAvpB,UAAAo2G,kBAAP,SAAyBh3B,EAAgBnzE,GACrC/M,KAAK+6G,kBAEL,IAAIS,IAAS55G,EAAAqG,MAAMC,kBAAkBlI,KAAKm3G,SAASj3B,GAenD,OAbIs7B,KACAx7G,KAAKm3G,SAASj3B,GAAUnzE,EAExB/M,KAAK46G,kBAUFY,GASJnxF,UAAAvpB,UAAA01G,eAAP,SAAsBt2B,GAClB,MAA6B,OAAzBlgF,KAAKm3G,SAASj3B,IACPlgF,KAAKm3G,SAASj3B,IAiBtB71D,UAAAvpB,UAAAm2G,cAAP,WACI,MAAOj3G,MAAKm3G,UAMT9sF,UAAAvpB,UAAAwc,MAAP,SAAam+F,GACT,GAAIC,GAAS,GAAIrxF,WAAUrqB,KAAKs6G,SAAUt6G,KAAKu6G,OAE/C,KAAK,GAAIl1G,KAAOrF,MAAKm3G,SACbn3G,KAAKm3G,SAASp2G,eAAesE,IAC7Bq2G,EAAOhB,eAAer1G,EAAKrF,KAAKm3G,SAAS9xG,GAKjD,OADAq2G,GAAOjB,UAAY74G,EAAAqG,MAAM6Q,eAAe2iG,GAAU,GAC3CC,GAQJrxF,UAAAvpB,UAAAs2G,kBAAP,WACIp3G,KAAKg7G,mBAEL,KACI,IAAK,GAAI31G,KAAOrF,MAAKm3G,SACjBn3G,KAAKm3G,SAAS9xG,IAAO,E7EywsB5B,Q6EtwsBGrF,KAAKi7G,iBAAgB,KAGjC5wF,YArQahqB,GAAAgqB,UAASA,G7EmhtBhB,SAAS/pB,EAAQD,GAEtB,Y8EvitBD,IAAAw1G,GAAA,mBAAAA,kBAMA,MALWA,eAAAC,kBAA4B,eAC5BD,cAAAE,gBAA0B,aAC1BF,cAAAG,kBAA4B,eAC5BH,cAAAI,kBAA4B,eAC5BJ,cAAAK,oBAA8B,iBACzCL,gBANax1G,GAAAw1G,cAAaA,G9EujtBpB,SAASv1G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G+EnktBjEna,EAAAzB,EAAgC,GAEhCw7G,EAAAx7G,EAA2B,IAC3By7G,EAAAz7G,EAA4B,IAC5B07G,EAAA17G,EAA2B,IAC3Bic,EAAAjc,EAA+B,IAG/B40G,EAAA,SAAA5xG,GAAsC5B,EAAAwzG,iBAAA5xG,EAalC,SAAA4xG,oBACI5xG,EAAA1C,KAAAT,MA8ER,MA3EI+0G,kBAAAj0G,UAAA2xG,oBAAA,SAAoB7hG,GAKZA,YAAgBirG,GAAAC,WAChB97G,KAAK+7G,MAAQnrG,EAEb5Q,KAAKoY,IAAI,4CAGbpY,KAAKg8G,OAAS,GAAIJ,GAAAK,YAAYj8G,OAGlC+0G,iBAAAj0G,UAAAu1E,aAAA,WACIr2E,KAAK+7G,MAAM1lC,aAAar2E,OAG5B+0G,iBAAAj0G,UAAAo+E,UAAA,WACIl/E,KAAK+7G,MAAM78B,aAGf61B,iBAAAj0G,UAAA6U,MAAA,WACI3V,KAAKg8G,OAAOrmG,SAGhBo/F,iBAAAj0G,UAAA2iG,cAAA,WACIzjG,KAAK+7G,MAAMtY,gBACXzjG,KAAKyX,KAAKs9F,iBAAiBC,gBAG/BD,iBAAAj0G,UAAA41G,OAAA,SAAOhwG,GACH1G,KAAKg8G,OAAOtF,OAAOhwG,IAGvBquG,iBAAAj0G,UAAAo0G,eAAA,WACIl1G,KAAK+7G,MAAM7G,iBACXl1G,KAAKyX,KAAKs9F,iBAAiBE,iBAG/BF,iBAAAj0G,UAAA21G,MAAA,WACIz2G,KAAKg8G,OAAOvF,SAGhB1B,iBAAAj0G,UAAAs0G,cAAA,WACIp1G,KAAKyX,KAAKs9F,iBAAiBI,gBAG/BJ,iBAAAj0G,UAAAw0G,uBAAA,WACIt1G,KAAKyX,KAAKs9F,iBAAiBM,yBAG/BN,iBAAAj0G,UAAA00G,gBAAA,WACIx1G,KAAKyX,KAAKs9F,iBAAiBQ,kBAG/BR,iBAAAj0G,UAAA40G,KAAA,WACI11G,KAAKyX,KAAKs9F,iBAAiBU,OAG/BV,iBAAAj0G,UAAAk/E,MAAA,WACIhgF,KAAK+7G,MAAM/7B,SAGf+0B,iBAAAj0G,UAAA4lG,cAAA,WACI1mG,KAAKyX,KAAKs9F,iBAAiBY,gBAG/BZ,iBAAAj0G,UAAAm/E,MAAA,WACIjgF,KAAK+7G,MAAM97B,SAGf80B,iBAAAj0G,UAAA+kG,cAAA,WACI7lG,KAAKyX,KAAKs9F,iBAAiBa,gBAzFRb,iBAAAC,cAAwB,qBACxBD,iBAAAI,cAAwB,qBACxBJ,iBAAAE,eAAyB,sBACzBF,iBAAAM,uBAAiC,8BACjCN,iBAAAQ,gBAA0B,uBAC1BR,iBAAAU,KAAe,YACfV,iBAAAY,cAAwB,qBACxBZ,iBAAAa,cAAwB,qBATnDb,iBAAAn5F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAewD,a/E6otBxB4qF,mB+E5otB8B4G,EAAAxxF,WAAzB9pB,GAAA00G,iBAAgBA,G/EoptBvB,SAASz0G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MgFjqtB7E6R,GADPnT,EAAuB,GACDgK,KAAK+E,MAAMoE,cAEjC6W,EAAA,SAAAhnB,GAAgC5B,EAAA4oB,WAAAhnB,EAC5B,SAAAgnB,cACIhnB,EAAA1C,KAAAT,MASR,MANcmqB,YAAArpB,UAAAsX,IAAV,SAAcC,KAMlB8R,YAXgC7W,EAAnBjT,GAAA8pB,WAAUA,GhFqrtBjB,SAAS7pB,EAAQD,EAASF,GAE/B,YiF1rtBD,IAAAyB,GAAAzB,EAAsB,GACtB6B,EAAA7B,EAA8B,GAE9ByC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5Bq0E,EAAAr0E,EAA+B,IAE/B87G,EAAA,WAWI,QAAAA,aAAY9oB,GACRnzF,KAAKmzF,WAAaA,EAkF1B,MA3EW8oB,aAAAn7G,UAAA6U,MAAP,cAAA6D,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAE1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAW0Q,MAAM3T,EAAAkD,cAAcC,KAAK8K,YAAYwmE,QAAQze,KAAK,SAACC,GACtEuc,EAAAuC,eAAeC,SAASx9D,EAAKiqF,cAAcpvF,KAAKmF,GAAOy+C,OAIxDgkD,YAAAn7G,UAAA41G,OAAP,SAAchwG,GAAd,GAAA8S,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAE1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAWi3G,aAAax1G,GAAOsxD,KAAK,SAACC,GAC7Cuc,EAAAuC,eAAeC,SAASx9D,EAAK07F,eAAe7gG,KAAKmF,GAAOy+C,OAIzDgkD,YAAAn7G,UAAA21G,MAAP,cAAAj9F,GAAAxZ,IACQ2C,GAAAoG,YAAYotE,cAIhBxzE,EAAAoG,YAAYotE,aAAc,EAE1BvzE,EAAA6F,YAAY++D,kBACZ7kE,EAAAoG,YAAY9D,WAAWk3G,YAAYn6G,EAAAkD,cAAcC,KAAK8K,YAAYwmE,QAAQze,KAAK,SAACC,GAC5Euc,EAAAuC,eAAeC,SAASx9D,EAAK47F,cAAc/gG,KAAKmF,GAAOy+C,OAQrDgkD,YAAAn7G,UAAA2iG,cAAV,SAAwBxrC,GACfr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBt1D,EAAAoG,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBAEZnpE,KAAKmzF,WAAWsQ,iBAGpB9gG,EAAAoG,YAAYotE,aAAc,GAGpB8lC,YAAAn7G,UAAAo0G,eAAV,SAAyBj9C,GAChBr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBt1D,EAAAoG,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBAEZnpE,KAAKmzF,WAAW+hB,kBAGpBvyG,EAAAoG,YAAYotE,aAAc,GAGpB8lC,YAAAn7G,UAAAs0G,cAAV,SAAwBn9C,GACfr2D,EAAAqG,MAAMC,kBAAkB+vD,KACzBt1D,EAAAoG,YAAYgtE,eAAe9d,GAC3Br1D,EAAA6F,YAAY0gE,qBAEZnpE,KAAKmzF,WAAWiiB,iBAGpBzyG,EAAAoG,YAAYotE,aAAc,GAElC8lC,cA9Fa57G,GAAA47G,YAAWA,GjF6vtBlB,SAAS37G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GkFhxtBjEna,EAAAzB,EAAgC,GAEhCuC,EAAAvC,EAA+B,IAC/Bic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrCiT,EAAAjT,EAA2E,GAC3Ei8G,EAAAj8G,EAAiC,IACjCgiF,EAAAhiF,EAAyB,IACzBwC,EAAAxC,EAA4B,IAG5B27G,EAAA,SAAA34G,GAAgC5B,EAAAu6G,WAAA34G,EAsB5B,SAAA24G,cACI34G,EAAA1C,KAAAT,MAEAA,KAAKq8G,aAAejpG,EAAAa,iBAAiB,eACrCjU,KAAKq8G,aAAanoG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKs8G,OAAOjoG,KAAKrU,OAEjEA,KAAKu8G,iBAAmBnpG,EAAAa,iBAAiB,eACzCjU,KAAKu8G,iBAAiBroG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKw8G,WAAWnoG,KAAKrU,OAEzEA,KAAKy8G,UAAYrpG,EAAAa,iBAAiB,eAClCjU,KAAKy8G,UAAUvoG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKsyE,IAAIj+D,KAAKrU,OAE3DA,KAAK08G,WAAatpG,EAAAa,iBAAiB,eACnCjU,KAAK08G,WAAWxoG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK01G,KAAKrhG,KAAKrU,OAE7DA,KAAK28G,iBAAmBvpG,EAAAa,iBAAiB,mBACzCjU,KAAK28G,iBAAiBzoG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK48G,aAAavoG,KAAKrU,OAE3EA,KAAK68G,iBAAmBzpG,EAAAa,iBAAiB,mBACzCjU,KAAK68G,iBAAiB3oG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK88G,gBAAgBzoG,KAAKrU,OAE9EA,KAAK+8G,iBAAmB3pG,EAAAa,iBAAiB,eACzCjU,KAAK+8G,iBAAiB7oG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKg9G,aAAa3oG,KAAKrU,OAqPnF,MAlPI87G,YAAAh7G,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,IAGvBg+F,WAAAh7G,UAAAu1E,aAAA,SAAa8c,GACTnzF,KAAK80G,YAAc3hB,EAEnBnzF,KAAKi9G,gBAAkB9zG,SAASC,eAAe,UAEnB,MAAxBpJ,KAAKi9G,gBAMTj9G,KAAKk9G,kBAAoB/zG,SAASC,eAAe,oBACnB,MAA1BpJ,KAAKk9G,kBAMTl9G,KAAKm9G,gBAAkBh0G,SAASC,eAAe,kBACnB,MAAxBpJ,KAAKm9G,gBAMTn9G,KAAKo9G,WAAaj0G,SAASC,eAAe,aACnB,MAAnBpJ,KAAKo9G,aACLp9G,KAAKo9G,WAAaj0G,SAASC,eAAe,UACnB,MAAnBpJ,KAAKo9G,YAObp9G,KAAKq9G,YAAcl0G,SAASC,eAAe,WACnB,MAApBpJ,KAAKq9G,aACmB,MAApBr9G,KAAKq9G,YAObr9G,KAAKs9G,cAAgBn0G,SAASC,eAAe,gBAC7CpJ,KAAKu9G,gBAAkBp0G,SAASC,eAAe,kBACrB,MAAtBpJ,KAAKs9G,eAAiD,MAAxBt9G,KAAKu9G,kBACnCv9G,KAAKs9G,cAAcvrG,iBAAiBulG,EAAAa,qBAAqBS,KAAM54G,KAAK64G,OAAOxkG,KAAKrU,OAChFA,KAAKs9G,cAAcvrG,iBAAiBulG,EAAAa,qBAAqB6B,WAAYh6G,KAAK64G,OAAOxkG,KAAKrU,OACtFA,KAAKs9G,cAAcvrG,iBAAiBulG,EAAAa,qBAAqBW,IAAK94G,KAAK+4G,MAAM1kG,KAAKrU,OAC9EA,KAAKs9G,cAAcvrG,iBAAiBulG,EAAAa,qBAAqB8B,SAAUj6G,KAAK+4G,MAAM1kG,KAAKrU,OACnFA,KAAKu9G,gBAAgBxrG,iBAAiBulG,EAAAa,qBAAqBS,KAAM54G,KAAK64G,OAAOxkG,KAAKrU,OAClFA,KAAKu9G,gBAAgBxrG,iBAAiBulG,EAAAa,qBAAqB6B,WAAYh6G,KAAK64G,OAAOxkG,KAAKrU,OACxFA,KAAKu9G,gBAAgBxrG,iBAAiBulG,EAAAa,qBAAqBW,IAAK94G,KAAK+4G,MAAM1kG,KAAKrU,OAChFA,KAAKu9G,gBAAgBxrG,iBAAiBulG,EAAAa,qBAAqB8B,SAAUj6G,KAAK+4G,MAAM1kG,KAAKrU,QAGzFA,KAAKw9G,iBACL,KAAK,GAAIz9G,GAAY,EAAGA,EAAI,EAAGA,IAAK,CAChC,GAAI09G,GAAoBt0G,SAASC,eAAe,eAAiBrJ,EACrD,OAAR09G,GACAz9G,KAAKw9G,eAAexqG,KAAKyqG,KAKrC3B,WAAAh7G,UAAAo+E,UAAA,WACIl/E,KAAK09G,gBACuB,MAAxB19G,KAAKi9G,iBAA2Bj9G,KAAKi9G,gBAAgB3zG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACvF/iF,KAAKi9G,gBAAgB3zG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACrD/iF,KAAKi9G,gBAAgBprG,MAAMC,QAAU,SAEzCqwE,EAAAp4D,SAAS8jE,KAAK,mBAGViuB,WAAAh7G,UAAA+3G,OAAR,WAC8B,MAAtB74G,KAAKs9G,eAA0Bt9G,KAAKs9G,cAAch0G,UAAUiO,SAAS,WACrEvX,KAAKs9G,cAAch0G,UAAUC,IAAI,UAET,MAAxBvJ,KAAKu9G,iBAA4Bv9G,KAAKu9G,gBAAgBj0G,UAAUiO,SAAS,WACzEvX,KAAKu9G,gBAAgBj0G,UAAUC,IAAI,WAInCuyG,WAAAh7G,UAAAi4G,MAAR,WAC8B,MAAtB/4G,KAAKs9G,eAAyBt9G,KAAKs9G,cAAch0G,UAAUiO,SAAS,WACpEvX,KAAKs9G,cAAch0G,UAAU6N,OAAO,UAEZ,MAAxBnX,KAAKu9G,iBAA2Bv9G,KAAKu9G,gBAAgBj0G,UAAUiO,SAAS,WACxEvX,KAAKu9G,gBAAgBj0G,UAAU6N,OAAO,WAI9C2kG,WAAAh7G,UAAA2iG,cAAA,WACIzjG,KAAK09G,iBAGT5B,WAAAh7G,UAAAo0G,eAAA,WACkD,MAA1CvyG,EAAAoG,YAAY8mE,eAAe8tC,aACG,MAA1B39G,KAAKk9G,mBAAqD,MAAxBl9G,KAAKm9G,kBACvCn9G,KAAKm9G,gBAAgB7zG,UAAU6N,OAAO,OACtCnX,KAAKm9G,gBAAgB7zG,UAAU6N,OAAO,OACtCnX,KAAKm9G,gBAAgB7zG,UAAU6N,OAAO,OACtCnX,KAAKm9G,gBAAgB7zG,UAAU6N,OAAO,OACtCnX,KAAKm9G,gBAAgB7zG,UAAU6N,OAAO,OACtCnX,KAAKm9G,gBAAgB7zG,UAAUC,IAAI,IAAM5G,EAAAoG,YAAY8mE,eAAe8tC,aACpE39G,KAAKk9G,kBAAkB5zG,UAAUC,IAAI,WAEH,MAA9B5G,EAAAoG,YAAY8mE,gBAA0BltE,EAAAoG,YAAY8mE,eAAekkB,WAAa,EAC9E/zF,KAAKq8G,aAAa1mG,MAAM,IAExB3V,KAAKq8G,aAAa1mG,MAAM,IAG5BwsE,EAAAp4D,SAASsS,KAAK,oBAIlBy/E,WAAAh7G,UAAA48G,cAAR;AACI,GAA2B,MAAvB19G,KAAKw9G,gBAAsE,MAA5C76G,EAAAoG,YAAY8mE,eAAe6tC,cAC1D,IAAK,GAAI39G,GAAY,EAAGA,EAAI4C,EAAAoG,YAAY8mE,eAAe6tC,cAAcxxG,OAAQnM,IAAK,CAC9E,GAAI09G,GAAoBz9G,KAAKw9G,eAAez9G,EAChC,OAAR09G,IACAA,EAAKn0G,UAAU6N,OAAO,OACtBsmG,EAAKn0G,UAAU6N,OAAO,OACtBsmG,EAAKn0G,UAAU6N,OAAO,OACtBsmG,EAAKn0G,UAAU6N,OAAO,OACtBsmG,EAAKn0G,UAAU6N,OAAO,OAC6B,MAA/CxU,EAAAoG,YAAY8mE,eAAe6tC,cAAc39G,IACzC09G,EAAKn0G,UAAUC,IAAI,IAAM5G,EAAAoG,YAAY8mE,eAAe6tC,cAAc39G,OAOtF+7G,WAAAh7G,UAAA88G,UAAA,SAAUl3G,GACN,MAA8B,OAA1B1G,KAAKk9G,oBAA6Bl9G,KAAKk9G,kBAAkB5zG,UAAUiO,SAAS,aAC5EvX,KAAK69G,aAAen3G,EACpB1G,KAAKk9G,kBAAkB5zG,UAAU6N,OAAO,WAExCgrE,EAAAp4D,SAASsS,KAAK,kBAEdr8B,KAAKu8G,iBAAiB5mG,MAAM,KACrB,IAMfmmG,WAAAh7G,UAAAo8B,SAAA,WACgC,MAAxBl9B,KAAKi9G,iBAA4Bj9G,KAAKi9G,gBAAgB3zG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACxF/iF,KAAKi9G,gBAAgB3zG,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAI1D+4B,WAAAh7G,UAAAk/E,MAAA,WACIhgF,KAAK28G,iBAAiBhnG,MAAM,GACA,MAAxB3V,KAAKi9G,kBACLj9G,KAAKi9G,gBAAgBprG,MAAMC,QAAU,UAIrCgqG,WAAAh7G,UAAA87G,aAAR,WACI58G,KAAK28G,iBAAiBjnG,OACM,MAAxB1V,KAAKi9G,iBAA2Bj9G,KAAKi9G,gBAAgB3zG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACvF/iF,KAAKi9G,gBAAgB3zG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAEzDZ,EAAAp4D,SAASsS,KAAK,kBACdr8B,KAAK68G,iBAAiBlnG,MAAM,KAGxBmmG,WAAAh7G,UAAAg8G,gBAAR,WACI98G,KAAK68G,iBAAiBnnG,OACtBysE,EAAAp4D,SAAS8jE,KAAK,kBACd7tF,KAAK80G,YAAYpO,iBAGrBoV,WAAAh7G,UAAAm/E,MAAA,WACIjgF,KAAK+8G,iBAAiBpnG,MAAM,IACA,MAAxB3V,KAAKi9G,iBAA4Bj9G,KAAKi9G,gBAAgB3zG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACxF/iF,KAAKi9G,gBAAgB3zG,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAEtDZ,EAAAp4D,SAASsS,KAAK,wBACd8lD,EAAAp4D,SAASrU,KAAK,mBAGVomG,WAAAh7G,UAAAk8G,aAAR,WACIh9G,KAAK+8G,iBAAiBrnG,OACM,MAAxB1V,KAAKi9G,kBACLj9G,KAAKi9G,gBAAgBprG,MAAMC,QAAU,QAEzC9R,KAAK80G,YAAYjP,iBAGrBiW,WAAAh7G,UAAAw7G,OAAA,WACIt8G,KAAKq8G,aAAa3mG,OAClB1V,KAAK09G,gBACL19G,KAAK80G,YAAYQ,yBAEiB,MAA9B3yG,EAAAoG,YAAY8mE,gBAA0BltE,EAAAoG,YAAY8mE,eAAekkB,WAAa,GAC9E/zF,KAAKk9G,kBAAkB5zG,UAAU6N,OAAO,WACxCgrE,EAAAp4D,SAASsS,KAAK,iBACS,MAAnBr8B,KAAKo9G,YAAuBp9G,KAAKo9G,WAAW9zG,UAAUiO,SAAS,iBAC/DvX,KAAKo9G,WAAW9zG,UAAUC,IAAI,gBAEV,MAApBvJ,KAAKq9G,aAAwBr9G,KAAKq9G,YAAY/zG,UAAUiO,SAAS,iBACjEvX,KAAKq9G,YAAY/zG,UAAUC,IAAI,gBAEnCvJ,KAAKy8G,UAAU9mG,MAAM,MAErB3V,KAAKk9G,kBAAkB5zG,UAAU6N,OAAO,WACxCnX,KAAKu8G,iBAAiB5mG,MAAM,IAC5B3V,KAAK08G,WAAW/mG,MAAM,MAI9BmmG,WAAAh7G,UAAA07G,WAAA,WACIx8G,KAAK+4G,QACL/4G,KAAKu8G,iBAAiB7mG,QAG1BomG,WAAAh7G,UAAAwxE,IAAA,WACItyE,KAAKy8G,UAAU/mG,OACf1V,KAAKu8G,iBAAiB5mG,MAAM,GACL,MAAnB3V,KAAKo9G,YAAsBp9G,KAAKo9G,WAAW9zG,UAAUiO,SAAS,iBAC9DvX,KAAKo9G,WAAW9zG,UAAU6N,OAAO,gBAEb,MAApBnX,KAAKq9G,aAAuBr9G,KAAKq9G,YAAY/zG,UAAUiO,SAAS,iBAChEvX,KAAKq9G,YAAY/zG,UAAU6N,OAAO,gBAEtCnX,KAAK80G,YAAYU,mBAGrBsG,WAAAh7G,UAAA40G,KAAA,WACI11G,KAAK08G,WAAWhnG,OAChB1V,KAAK80G,YAAYY,QAhSzBoG,WAAAlgG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBlF4/tBxBk1F,akF3/tBwBM,EAAA0B,iBAAnBz9G,GAAAy7G,WAAUA,GlFmguBjB,SAASx7G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmF1huBjEna,EAAAzB,EAAgC,GAChCqb,EAAArb,EAA4B,IAE5B6mB,EAAA7mB,EAA6B,IAC7B6rG,EAAA7rG,EAA8B,IAC9B+rG,EAAA/rG,EAA4B,IAC5Bic,EAAAjc,EAA+B,IAqB/B29G,EAAA,SAAA36G,GAAsC5B,EAAAu8G,iBAAA36G,EAMlC,SAAA26G,oBACI36G,EAAA1C,KAAAT,MAsGR,MAnGc89G,kBAAAh9G,UAAAoc,gBAAV,SAA0BlY,GACtB,GAAmB,MAAfhF,KAAK4pG,OAAgB,CACrB,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACb5pG,KAAK4pG,OAAO7oG,eAAesE,KACvBrF,KAAK4pG,OAAOvkG,YAAgB8E,MAAKyc,eACjC5mB,KAAK4pG,OAAOvkG,GAAK0X,QAAQ/X,GAE7BhF,KAAK4pG,OAAOvkG,GAAO,KAI3BrF,MAAK4pG,OAAS,OAUfkU,iBAAAh9G,UAAAid,aAAP,SAAoBD,GAChB3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAUfA,EAAKU,aAAau/F,EAA2B12F,QAE7CrnB,KAAK6R,MAAwBmV,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAak/F,EAA2B12F,QAC5E,MAAdrnB,KAAK6R,OAEc,MAAf7R,KAAK4pG,SACL5pG,KAAK4pG,OAASoC,EAAA2C,cAAc76C,cAAc9zD,KAAK6R,MAAMiM,KAAM9d,MAC3DksG,EAAA0C,YAAY96C,cAAc9zD,KAAK6R,MAAMiM,KAAM,QAShC,MAAf9d,KAAK4pG,SACL5pG,KAAK4pG,OAASoC,EAAA2C,cAAc76C,cAAch2C,EAAM9d,MAChDksG,EAAA0C,YAAY96C,cAAch2C,EAAM,OAIrB,MAAf9d,KAAK4pG,QAYbkU,iBAAAh9G,UAAAwc,MAAA,WACI,GAAIjU,GAA4B,GAAIy0G,iBAEpCz0G,GAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ4U,KAAOje,KAAKie,KAEpB5U,EAAQugG,UACRvgG,EAAQqU,gBACR,KAAK,GAAIrY,KAAOrF,MAAK4pG,OACjBvgG,EAAQugG,OAAOvkG,GAAOrF,KAAK4pG,OAAOvkG,GAAKiY,QACvCjU,EAAQ4I,SAAS5I,EAAQugG,OAAOvkG,GAGpC,IAAuB,MAAnBrF,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,EAInB,MADA30G,GAAQuU,eACDvU,GA5Gfy0G,iBAAAliG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBnFoluBxBk3F,mBmFnluB8BtiG,EAAAG,YAAzBtb,GAAAy9G,iBAAgBA,CA+G7B,IAAMC,IACFj3F,MAAO,QAOPrI,SAAU,WACV4I,MAAO,UnFw+tBL,SAAS/mB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoFvouBjEna,EAAAzB,EAA6C,GAC7C6B,EAAA7B,EAAiE,GACjEiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAC5B8zG,EAAA9zG,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5By0E,EAAAz0E,EAAyB,IACzBsC,EAAAtC,EAAyB,IACzB89G,EAAA99G,EAA4B,IAC5B+9G,EAAA/9G,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3BomE,EAAApmE,EAA2B,IAC3BsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBqmE,EAAArmE,EAA+B,IAC/Bu0E,EAAAv0E,EAA4B,IAC5Bo0E,EAAAp0E,EAAmC,IACnC2C,EAAA3C,EAAuC,IACvCkT,EAAAlT,EAAwB,IACxBiC,EAAAjC,EAA0B,IAE1Bm7E,EAAAn7E,EAAuC,IACvC4lF,EAAA5lF,EAAqC,IACrC6lF,EAAA7lF,EAAmC,IAE/B8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAGrC2jG,EAAA,SAAAzwG,GAA6C5B,EAAAqyG,wBAAAzwG,EAoBzC,SAAAywG,2BACIzwG,EAAA1C,KAAAT,KAAM,QAZFA,KAAAm+G,uBAAiC,EAEjCn+G,KAAAo+G,iBAA2B,EAC3Bp+G,KAAAq+G,eAAyB,EAEzBr+G,KAAAs+G,iBAA2B,EAC3Bt+G,KAAAu+G,WAAqB,EAGrBv+G,KAAAw+G,qBAA+B,EAuiC3C,MAjiCI5K,yBAAA9yG,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK40G,kBAEL50G,KAAKy+G,eAAiBrrG,EAAAa,iBAAiB,iBACvCjU,KAAKy+G,eAAevqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKs2G,oBAAoBjiG,KAAKrU,OAEhFA,KAAK0+G,eAAiBtrG,EAAAa,iBAAiB,iBACvCjU,KAAK0+G,eAAexqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK2+G,gBAAgBtqG,KAAKrU,OAE5EA,KAAK4+G,oBAAsBxrG,EAAAa,iBAAiB,sBAC5CjU,KAAK4+G,oBAAoB1qG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK6+G,mBAAmBxqG,KAAKrU,OAEpFA,KAAK8+G,cAAgB31G,SAASC,eAAe,gBAC7CpJ,KAAK++G,kBAAoB51G,SAASC,eAAe,oBAEjDpJ,KAAKg/G,uBAAyB5rG,EAAAa,iBAAiB,yBAC/CjU,KAAKg/G,uBAAuB9qG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKi/G,wBAAwB5qG,KAAKrU,QAGhG4zG,wBAAA9yG,UAAAm+E,cAAA,SAAckU,GACVnzF,KAAK80G,YAAc3hB,EACnBnzF,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeC,aAAcn/G,KAAKyzF,aAAap/E,KAAKrU,OACxEA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeE,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OAC5EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAe7J,uBAAwBr1G,KAAKs1G,uBAAuBjhG,KAAKrU,OAC5FA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAe3J,gBAAiBv1G,KAAKw1G,gBAAgBnhG,KAAKrU,OAC9EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAevJ,cAAe31G,KAAK0mG,cAAcryF,KAAKrU,OAC1EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAetJ,cAAe51G,KAAK6lG,cAAcxxF,KAAKrU,OAE1EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeI,qBAAsBt/G,KAAKu/G,qBAAqBlrG,KAAKrU,QAG5F4zG,wBAAA9yG,UAAA8zG,gBAAA,WACI50G,KAAK+4E,QAAQ67B,iBAAgBvpF,KACzBA,EAAC6nE,EAAAU,YAAYK,iBAAiB,EAC9B5oE,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,oBAAoB,EACjClpE,EAAC6nE,EAAAU,YAAYO,gBAAgB,EAC7B9oE,EAAC6nE,EAAAU,YAAYQ,iBAAiB,EAC9B/oE,EAAC6nE,EAAAU,YAAYU,eAAe,EAC5BjpE,EAAC6nE,EAAAU,YAAYC,aAAa,EAC1BxoE,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpFgnuB7B3oE,GAEJ,IAAIA,IoF9muBTuoF,wBAAA9yG,UAAAu1E,aAAA,WACIr2E,KAAKw/G,sBAAwBr2G,SAASC,eAAe,wBAErDjG,EAAArC,UAAMu1E,aAAY51E,KAAAT,MAElBA,KAAK80G,YAAYz+B,eAEjBr2E,KAAKy/G,UAAY,GAAI7qC,GAAAc,SACrB11E,KAAKy/G,UAAU37G,aAEiB,MAA5BnB,EAAAoG,YAAYgxD,eACNj3D,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASs7D,aACTthE,EAAAoG,YAAYgxD,aAAaqR,SAASl9D,aAKpB,MAAtBlO,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAGL,MAA9B9R,KAAKw/G,uBAAkC/wG,EAAAyB,cAAckqE,iBACrDp6E,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG3CrD,EAAAyB,cAAc+nE,mBACY,MAAtBj4E,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAIlB,MAA9B/iF,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAI9B,MAA1B/iF,KAAK++G,mBACJ/+G,KAAK++G,kBAAkBz1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE1D/iF,KAAK++G,kBAAkBz1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAEjDt0E,EAAAyB,cAAckqE,iBACK,MAAtBp6E,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIxDngF,EAAA6F,YAAY6hE,sBAGhBspC,wBAAA9yG,UAAA81E,gBAAA,WA8BI,GA7BA9zE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAKtyE,KAAKq+G,eACVjI,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE9D3hE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ56B,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,OAE9E30E,EAAArC,UAAM81E,gBAAen2E,KAAAT,MAErBA,KAAKo+G,iBAAkB,EACvBx7G,EAAA6F,YAAY2rE,aAAc,EAC1BxxE,EAAA6F,YAAY6hE,qBAEZtqE,KAAKs2G,sBAED9zG,EAAAgC,WAAWC,kBAAkByiG,0BAA4BlnG,KAAKq+G,eAAiB,GAC/Ez7G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAcjkE,KAAKq+G,eAAenwG,YACzElO,KAAKq2G,cAAa,KAEZvzG,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KAEzDjkE,KAAKq2G,gBAETr2G,KAAK4+G,oBAAoBlpG,OAEzB1V,KAAKq+G,eAAiB,EAElBv7G,EAAAwC,uBAAuBkkE,UAGvB,MAFA1mE,GAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,eAKtBm5B,wBAAA9yG,UAAAs3E,iBAAA,SAAiB5B,GAAA,SAAAA,OAAA,GACbrzE,EAAArC,UAAM81E,gBAAen2E,KAAAT,MACrBA,KAAKq2G,aAAa7/B,GAElB1zE,EAAAwC,uBAAuB83E,WAEvBx6E,EAAA6F,YAAY2rE,aAAc,EAG1Bp0E,KAAKy+G,eAAe9oG,MAAM,KAG9Bi+F,wBAAA9yG,UAAA2yF,aAAA,WACI3wF,EAAAwC,uBAAuBimF,SAC7B,IAAMm0B,GAAoB58G,EAAAwC,uBAAuB6lE,OAAS3oE,EAAAgC,WAAWC,kBAAkBirE,oBAAsB,CAEnG9sE,GAAA6F,YAAYo/D,qBAAuB63C,GAEnC1/G,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS66D,aACvCxjE,KAAK80G,YAAYp/F,SAEjB1V,KAAK+4E,QAAQm+B,kBACThkB,EAAAU,YAAYI,eACZxxF,EAAAgC,WAAWC,kBAAkBujE,sBAAwB03C,GAEzDh9G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCr0G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS66D,eAI/CowC,wBAAA9yG,UAAAq4D,eAAA,SAAe+mB,GACX,IAAIzxE,EAAAyB,cAAckqE,iBAAkB3rE,EAAAyB,cAAc+nE,kBAAlD,CAIA,GAAIiI,IAAW+9B,EAAA0B,YAAYC,iBACvB,GAAI5/G,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYC,YACxC3T,EAASgT,EAAAU,YAAYC,eAClB,KAAI7zF,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYI,gBAG/C,MAFA9T,GAASgT,EAAAU,YAAYI,eAM7B,GAAIh0F,KAAK+4E,QAAQy9B,eAAet2B,GAU5B,OATIA,IAAWgT,EAAAU,YAAYW,kBACvBv0F,KAAKq2G,cAAa,GAElBr2G,KAAKq2G,eAGTl0B,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEbA,GACJ,IAAKgT,GAAAU,YAAYC,WACb7zF,KAAKszF,MACL,MACJ,KAAKJ,GAAAU,YAAYI,eACbh0F,KAAK0V,MACL,MACJ,KAAKw9E,GAAAU,YAAYK,eACbj0F,KAAK6/G,UACL,MACJ,KAAK3sB,GAAAU,YAAYM,mBACbl0F,KAAK8/G,cACL,MACJ,KAAK5sB,GAAAU,YAAYU,aACbt0F,KAAKk9E,WAAU,GAAO,GAAM,EAC5B,MACJ,KAAKgW,GAAAU,YAAYO,cACbn0F,KAAKk9E,WAAU,GAAO,GAAO,EAC7B,MACJ,KAAKgW,GAAAU,YAAYQ,eACbp0F,KAAKk9E,WAAU,GAAM,GAAO,EAC5B,MACJ,KAAKgW,GAAAU,YAAYW,kBACbv0F,KAAKw2E,aAMrBo9B,wBAAA9yG,UAAA01E,QAAA,WACSx2E,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,GAC1E/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAIzD5wF,EAAArC,UAAM01E,QAAO/1E,KAAAT,MAEbyO,EAAAyB,cAAcwqE,gBACd16E,KAAK4/E,UACL5/E,KAAK62G,mBAEL72G,KAAK80G,YAAYt+B,UAEjB9B,EAAAyD,YAAYjf,cACZv2D,EAAAoG,YAAYytE,QAAQvmE,EAAYioE,MAE1Bp1E,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASs7D,aACRzhE,EAAAgC,WAAW2B,eAAeswE,OAAez2E,KAAKq+G,eAAenwG,WAA1B,MAMhD0lG,wBAAA9yG,UAAA+9G,mBAAA,WACIj8G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,MAGzD2vC,wBAAA9yG,UAAAwyF,KAAA,WAII,GAHAtzF,KAAKs+G,iBAAkB,EAEvBx7G,EAAAwC,uBAAuBswE,YACnB9yE,EAAAwC,uBAAuBknF,oBAOvB,YANI7pF,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAAMxoE,EAAA6F,YAAY2gE,iBACtDppE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,WAEL1zE,EAAAwC,uBAAuB83E,WAK/B,KAAIp9E,KAAK+/G,uBAAT,CAIA,GACIxrC,EAAA+F,mBAAmBC,mCACjBz3E,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cAUzD,YARI9mE,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,YAEL7zE,EAAAoG,YAAY2tE,UACZ12E,KAAKq2G,gBAMb,IAAI/6B,EAAAqB,uBAAuBkU,gBAMvB,MALIluF,GAAAoG,YAAYgxD,aAAaqR,SAAW,IACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,eAET8E,GAAAqB,uBAAuBtjB,YAI3B,IAAIub,EAAAc,SAASomB,YAAW,GAAM,GAO1B,YANIn5F,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,WAEL5B,EAAAc,SAAShgB,OAKjB,MACK9yD,EAAA6F,YAAYmH,UACZ5P,KAAKo+G,iBACLx7G,EAAA6F,YAAY2gE,kBACb5mE,EAAAgC,WAAWC,kBAAkByiG,yBAI7B,MAFAlnG,MAAKq2G,cAAa,OAClBr2G,MAAKw2E,SAWT,IARIx2E,KAAKq2G,eACAr2G,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,GAC1E/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAKzDpxF,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAAMxoE,EAAA6F,YAAY2gE,gBAAiB,CACvE,GAAM42C,GAAephG,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,mBAC3DyyC,EAAex3F,WAAWhd,EAAA4L,YAAYjE,IAAI5G,EAAAoG,YAAYgxD,aAAaqR,SAAU40C,GACnFh+G,GAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcA,EACd6J,QAAQ,IAIhB,IAAKj+G,EAAAsC,UAAUA,UAAU47G,iBAIrB,MAHAlgH,MAAK8/G,eACL9/G,KAAKq2G,cAAa,OAClBr2G,MAAKw2E,SAIT,KAAKhQ,EAAAkD,eAAe2X,WAAU,GAAO,GAIjC,MAHAz+E,GAAA6F,YAAYmH,UAAW,EACvBnB,EAAAyB,cAAcwqE,oBACd16E,MAAKs2G,qBAIT1zG,GAAA6F,YAAY2rE,aAAc,EAC1B3lE,EAAAyB,cAAcwqE,gBACd16E,KAAK+4E,QAAQq+B,oBAETx0G,EAAA6F,YAAYmH,YAEPhN,EAAA6F,YAAYs+D,iBACe,MAA5BpkE,EAAAoG,YAAYqhE,cACyB,MAArCznE,EAAAoG,YAAYqhE,aAAagB,UACzBzoE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAEpCxoE,EAAA6F,YAAY4pE,gBAAgB1vE,EAAAoG,YAAYqhE,aAAagB,UAEzDxoE,EAAA6F,YAAY4pE,kBACZryE,KAAK+4E,QAAQm+B,kBACThkB,EAAAU,YAAYM,mBACZ1xF,EAAAgC,WAAWC,kBAAkBkjE,sBAGrCjlE,EAAA0F,eAAewtF,iBAAiB,IAChClzF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK62G,mBAELj0G,EAAA6F,YAAY8iE,iBAAgB,GAC5B/E,EAAAkD,eAAeoX,eAEVl+E,EAAA6F,YAAY2gE,iBACZtmE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,eAExD7mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAE3CjkE,KAAK80G,YAAYxhB,OAEjB5e,EAAAyD,YAAYjf,cAEZl5D,KAAKo+G,iBAAkB,EAEvBp8G,EAAAsC,UAAUA,UAAUovF,cAChBzX,SAAU1V,EAAAsD,WAAWK,IACrBypB,UAAW7wF,EAAAwC,uBAAuB6lE,MAClCxmE,WAAY/B,EAAA6F,YAAYupE,qBAAqBkhB,EAAAU,YAAYC,cAE7D7xF,EAAAsC,UAAUA,UAAU67G,cACpBn+G,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ3e,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,uBAG7FiwC,wBAAA9yG,UAAA4U,KAAA,WACI1V,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAYggE,mBACZzoE,KAAK80G,YAAYp/F,QAGrBk+F,wBAAA9yG,UAAA69G,gBAAA,WACI3+G,KAAK0+G,eAAehpG,OAChB9S,EAAA6F,YAAYmH,SACZ5P,KAAK6/G,WAEL7/G,KAAKs2G,uBAIb1C,wBAAA9yG,UAAA++G,SAAA,WACI7/G,KAAKy+G,eAAe/oG,OAEhB1V,KAAK+/G,yBAIyB,MAA9Bn9G,EAAA6F,YAAY0+D,eACZvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAY0+D,eAAiBjxD,SAAStT,EAAA6F,YAAY0+D,eAAiB,GAAGj5D,WAClEgI,SAAStT,EAAA6F,YAAY0+D,gBAAkB,GACvCvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKs2G,0BAKjB1C,wBAAA9yG,UAAAg/G,aAAA,WACIl9G,EAAA6F,YAAYmH,UAAW,EAEvB5N,EAAAsC,UAAUA,UAAUw7G,eAEhB9/G,KAAKs+G,iBACD17G,EAAA6F,YAAY2gE,kBACZtmE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,aAChBrzG,EAAAwC,uBAAuBkkE,YACvB1mE,EAAAwC,uBAAuBghF,gBACvB73E,EAAAyB,cAAcuqE,gBAK1Bz6E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYM,oBAAoB,GAC/DxxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYM,oBAAoB,IAGvE0f,wBAAA9yG,UAAAo8E,UAAA,SAAUC,EAA2Bj/C,EAAsB1N,GAkCvD,GAlCM,SAAA2sD,OAAA,GAA2B,SAAAj/C,OAAA,GAAsB,SAAA1N,OAAA,GAClD5tB,EAAA6F,YAAY2gE,iBAMbppE,KAAK80G,YAAYt+B,UACjB5zE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDrhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,kBACvC9gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,iBACvC7gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,kBACvC+Q,EAAAyD,YAAYjf,gBAVZl5D,KAAKq+G,eAAiB,EACtBz7G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDjkE,KAAKq2G,eACLr2G,KAAKw2E,WASTjQ,EAAAsD,WAAWqT,UAAUC,EAAUj/C,EAAK1N,GACpCxwB,KAAKy/G,UAAUpoB,mBAEX9wB,EAAAsD,WAAWuU,QACXp+E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,GAC/Dp0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,IACvD5tB,EAAAsD,WAAWwU,QAClBr+E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,GAC9Dn0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,KAE/Dp0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,GAC9Dn0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,IAG/D5xF,EAAAgC,WAAWC,kBAAkB27G,mBAAqBliF,EAAK,CACvD,GAAMx2B,GAAUlF,EAAAgC,WAAWC,kBAAkB47G,UACvCj+G,EAAAsH,UAAUC,OAAO,sBACjBvH,EAAAsH,UAAUC,OAAO,kBACvBhH,GAAAoG,YAAYoyE,uBAAuBn5E,EAAAkD,cAAcC,KAAK8K,YAAYioE,KAAMxwE,GAG5E1H,KAAKsgH,0BAGT1M,wBAAA9yG,UAAAw/G,uBAAA,WACItgH,KAAK80G,YAAYwL,0BAGrB1M,wBAAA9yG,UAAAy+G,qBAAA,WACQ9wG,EAAAyB,cAAc8nE,oBACdh4E,KAAK8/G,eAET9/G,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYI,gBAAgB,IAGnE4f,wBAAA9yG,UAAAu+G,eAAA,WAOI,MANAr/G,MAAKs+G,iBAAkB,EACvBt8G,EAAAsC,UAAUA,UAAUi8G,YAEpB39G,EAAA6F,YAAY0pE,0BACZvvE,EAAA6F,YAAY+pE,yBAER5vE,EAAA6F,YAAY2gE,iBAAyD,IAAtCzmE,EAAAoG,YAAYqhE,aAAagB,WACxDtoE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE1D7gE,EAAAwC,uBAAuBkkE,YACvB1mE,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,gBAKtBz6E,KAAK4+G,oBAAoBlpG,OACzB1V,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAE3C38D,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,oBACdl1E,EAAAwC,uBAAuBswE,gBACvB51E,MAAK4/E,YAILh9E,EAAA6F,YAAYmH,UACsB,MAA9BhN,EAAA6F,YAAY0+D,gBACZvkE,EAAA6F,YAAYmH,UAAW,GAIW,IAAtCjN,EAAAoG,YAAYqhE,aAAagB,UACzBprE,KAAKo+G,iBAAkB,EACvBx7G,EAAA6F,YAAY2rE,aAAc,GAE1Bp0E,KAAKo+G,iBAAkB,EAG3B3vG,EAAAyB,cAAcovE,eACdt/E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GACvDrxF,EAAAoG,YAAYqhE,aAAagB,SAAW,EACpCprE,KAAKy+G,eAAe9oG,MAAM,IAE1B3V,KAAKs2G,sBAGT5zG,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBAErCr0G,EAAA6F,YAAYmH,UAAkD,IAAtCjN,EAAAoG,YAAYqhE,aAAagB,UACjDprE,KAAK0+G,eAAe/oG,MAAM,IAG1B/S,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAC/DtoE,EAAAwC,uBAAuBkkE,cACvB/6D,GAAAyB,cAAcuqE,cAMlB33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eAEtD7mE,EAAA6F,YAAY2gE,iBACbzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GACI,IAAxCzoE,EAAAoG,YAAYqhE,aAAa2pB,YAEzB/zF,KAAK80G,YAAYn6B,uBACjB36E,MAAKw2E,gBAKT1zE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACnD7mE,EAAA6F,YAAY2gE,iBACZzmE,EAAAoG,YAAY2tE,cAKxBk9B,wBAAA9yG,UAAAw0G,uBAAA,WASI,MARI1yG,GAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAI9Dl1D,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,uBACdp1E,GAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,eAI3CjkE,KAAKy+G,eAAe/oG,OAEpB9S,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,eAEnCrhE,EAAA6F,YAAY2gE,iBACVtmE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cAEzD7mE,EAAA6F,YAAY6hE,qBAEhB77D,EAAAyB,cAAcovE,eACd18E,EAAA6F,YAAY2rE,aAAc,EAC1Bp0E,KAAKs2G,sBAED1zG,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,IAC9D38D,EAAAyB,cAAcivE,iBACfr8E,EAAAwC,uBAAuB83E,WAEvBt6E,EAAAwC,uBAAuBkkE,eACvB/6D,GAAAyB,cAAcuqE,cALtB,SAWJm5B,wBAAA9yG,UAAA00G,gBAAA,WAOI,MANgC,OAA5B7yG,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,IAAM/zF,KAAKo+G,iBACrFp8G,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAGrD/zF,KAAKo+G,iBAAkB,EAEnB3vG,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,oBACdvpE,EAAAyB,cAAcuvE,sBACdz/E,MAAKwgH,0BAITxgH,KAAKy+G,eAAe/oG,OACpB1V,KAAKs2G,sBACL7nG,EAAAyB,cAAcovE,eACV18E,EAAA6F,YAAYmH,UAAY5P,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYM,qBAChEl0F,KAAK6/G,WAGLj9G,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAC/DtoE,EAAAwC,uBAAuBkkE,WACvBxpE,KAAK80G,YAAYn6B,mBACjB73E,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,eAKlB33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eACtD7mE,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GACpEprE,KAAK80G,YAAYn6B,uBACjB36E,MAAKw2E,WAHb,SASJo9B,wBAAA9yG,UAAAo+E,UAAA,WAUI,MATA/7E,GAAArC,UAAMo+E,UAASz+E,KAAAT,MACfA,KAAK80G,YAAY51B,YACS,MAAtBl/E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAEL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAG3CrD,EAAAyB,cAAc8nE,oBACdvpE,EAAAyB,cAAcuvE,sBACdz/E,MAAKwgH,0BAITxgH,KAAKs2G,sBACL7nG,EAAAyB,cAAcovE,eACdt/E,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAE3CtoE,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,kBACvD7mE,EAAA6F,YAAY2gE,kBACZtmE,EAAAwC,uBAAuBghF,gBACvB73E,EAAAyB,cAAcuqE,gBAHtB,SASJm5B,wBAAA9yG,UAAAk/E,MAAA,SAAMD,GAAN,GAAAvmE,GAAAxZ,IAAM,UAAA+/E,OAAA,GACF//E,KAAKo+G,iBAAkB,EAGvBp+G,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAG/CprE,KAAKu+G,UAAYx+B,EAEbn9E,EAAA6F,YAAY2gE,kBACZxmE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,kBACvC9gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,iBACvC7gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,kBAEvC/gE,EAAA6F,YAAY2rE,aAAc,GAG9Bp0E,KAAK80G,YAAY90B,MAAMD,GACG,MAAtB//E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG/C,IAAI2uG,GAAgB,GACf1gC,KACD0gC,EAAQ,IAGZnrG,WAAW,WACmB,MAAtBkE,EAAKslG,eAAyBtlG,EAAKslG,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnFvpE,EAAKslG,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAIrB,MAA9BvpE,EAAKgmG,uBACLhmG,EAAKgmG,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7DvpE,EAAKgmG,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,gBAEhE09B,IAGP7M,wBAAA9yG,UAAA4lG,cAAA,WA6BI,MA5BI9jG,GAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAU6xG,aAEnB5hC,EAAA+F,mBAAmBkH,SACpB5+E,EAAA6F,YAAYmH,SAAWhN,EAAA6F,YAAY4rE,qBAGnCr0E,KAAKm+G,wBACLv7G,EAAA6F,YAAYmH,SAAW5P,KAAKm+G,uBAGhC1vG,EAAAyB,cAAcovE,eACdt/E,KAAKs2G,sBAED1zG,EAAA6F,YAAYmH,WACZ5P,KAAK6/G,WACL7/G,KAAKm+G,uBAAwB,GAI7Bn+G,KAAKu+G,WACL37G,EAAA6F,YAAY2gE,kBACkB,MAA7BtmE,EAAAwC,uBAAuB/E,IAAcuC,EAAAwC,uBAAuB89E,aAAal3E,OAAS,KAEnFpJ,EAAAwC,uBAAuB83E,WACvBp9E,KAAKu+G,WAAY,GAGjBz7G,EAAAwC,uBAAuBkkE,WAAa5mE,EAAA6F,YAAY2gE,iBAChDtmE,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,oBAKd33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eACtD7mE,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpE38D,EAAAyB,cAAcsmE,QAAQvmE,EAAYioE,QAK9C07B,wBAAA9yG,UAAAm/E,MAAA,WACSjgF,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYgxD,cAAwBp3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACxEppE,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYgxD,aAAaqR,UAIzDprE,KAAKy+G,eAAe/oG,OACpB1V,KAAK0+G,eAAehpG,OAEhBjH,EAAAyB,cAAc+nE,oBACdj4E,KAAKm+G,wBAAwBn+G,KAAKw+G,qBAAsB57G,EAAA6F,YAAYmH,UAGxEhN,EAAA6F,YAAY4rE,oBAAsBzxE,EAAA6F,YAAYmH,SAC9ChN,EAAA6F,YAAYmH,UAAW,EACG,MAAtB5P,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAGhDt0E,EAAAyB,cAAc+nE,oBACdr1E,EAAA6F,YAAY4rE,qBAAsB,EAEA,MAA9Br0E,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIhE/iF,KAAK80G,YAAY70B,SAGrB2zB,wBAAA9yG,UAAA+kG,cAAA,WACQp3F,EAAAyB,cAAc+nE,mBACY,MAAtBj4E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG/CrD,EAAAyB,cAAc4vE,YAAY7vE,EAAY+pE,YAEtCvrE,EAAAyB,cAAc4vE,YAAY7vE,EAAYwmE,SAI9Cm9B,wBAAA9yG,UAAAw1G,oBAAA,WAGI,GAFAt2G,KAAKy+G,eAAe/oG,SAEhB1V,KAAK0gH,0BAILnsC,EAAA+F,mBAAmBkH,SAIvBlG,EAAAqB,uBAAuBtjB,aACvBub,EAAAc,SAASC,aAAY,GAEjB2F,EAAAqB,uBAAuBkU,iBAAmB9K,EAAAM,qBAAqBmE,iBAAnE,CAII5nF,EAAA6F,YAAY8gE,WACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAEAxmG,EAAA6F,YAAYmH,WACb5P,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6nE,EAAAU,YAAYK,iBACRrxF,EAAA6F,YAAY2gE,iBACRtmE,EAAAwC,uBAAuB6lE,OACoB,eAAxCroE,EAAAwC,uBAAuBmkE,eACtB3mE,EAAAwC,uBAAuBkkE,YAChChnE,EAAAgC,WAAWC,kBAAkBkjE,oBACjCt8C,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,qBACTzxF,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,gBAEhD7mE,EAAA6F,YAAY2gE,gBACvB/9C,EAAC6nE,EAAAU,YAAYO,gBAAiB5tB,EAAAsD,WAAWwU,OACzChzD,EAAC6nE,EAAAU,YAAYQ,iBAAkB7tB,EAAAsD,WAAWuU,OAC1C/yD,EAAC6nE,EAAAU,YAAYU,eACR7lF,EAAAyB,cAAcivE,kBACdr8E,EAAAwC,uBAAuB6lE,OACxB3oE,EAAAgC,WAAWC,kBAAkBk8G,cACjCt1F,EAAC6nE,EAAAU,YAAYC,aAAc/wF,EAAAwC,uBAAuBkkE,UAClDn+C,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpF69tB7B3oE,IoF19tBDzoB,EAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAUs8G,aAKhCl+G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,gBpF49tBxC,IAAI5rF,KoFz9tBDuoF,wBAAA9yG,UAAA4/G,uBAAR,WACI,GAAI99G,EAAA6F,YAAY2gE,iBAAmB/1D,EAAAwD,QAAQgjD,gBAAkB/2D,EAAAwC,uBAAuB6lE,MAAO,CACvF,GAAI93D,EAAAwD,QAAQ+iD,sBAAwB55D,KAAKo+G,gBAOrC,MANAx7G,GAAA6F,YAAYmH,UAAW,EACvB5P,KAAK26E,mBACL36E,KAAK4/E,UACL98E,EAAAwC,uBAAuBswE,YACvBviE,EAAAwD,QAAQ4iD,iBAED,CAEP,IAAMonD,GAAO7gH,IAkBb,IAfIA,KAAKo+G,iBACL/qG,EAAAwD,QAAQ0iD,cAAa,EAAM,WACvBsnD,EAAKlmC,mBACLkmC,EAAKjhC,UACLh9E,EAAA6F,YAAYmH,UAAW,EACvB9M,EAAAwC,uBAAuBswE,cAK3BhzE,EAAA6F,YAAY8gE,YACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAGL/1F,EAAAwD,QAAQsjD,gCAKR,MAHAn6D,MAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAElC,EAKnB,OAAO,GAGHrD,wBAAA9yG,UAAAi/G,qBAAR,WACI,SAAK1sG,EAAAwD,QAAQgjD,eAAiB/2D,EAAAwC,uBAAuB6lE,SAIjD93D,EAAAwD,QAAQ+iD,sBAAwBvmD,EAAAwD,QAAQsjD,iCACpCx3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,eACLr2G,KAAKo+G,iBAAkB,EAElBx7G,EAAA6F,YAAY2gE,iBAIbppE,KAAK62G,mBACLj0G,EAAA6F,YAAY6hE,qBACZtqE,KAAKs2G,uBALLt2G,KAAKw2E,WAQTx2E,KAAKs2G,uBAGF,IAEPjjG,EAAAwD,QAAQ0iD,cAAa,EAAO,MAC5BlmD,EAAAwD,QAAQojD,4BAED,KAIf25C,wBAAA9yG,UAAAsoG,MAAA,WACI10B,EAAAyD,YAAY9e,aAERz2D,EAAA6F,YAAY2gE,gBACZppE,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6nE,EAAAU,YAAYK,gBAAiBzxF,EAAAgC,WAAWC,kBAAkBkjE,oBAC3Dt8C,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,oBAAoB,EACjClpE,EAAC6nE,EAAAU,YAAYO,gBAAiB5tB,EAAAsD,WAAWwU,OACzChzD,EAAC6nE,EAAAU,YAAYQ,iBAAkB7tB,EAAAsD,WAAWuU,OAC1C/yD,EAAC6nE,EAAAU,YAAYU,eAAgBxxF,EAAAwC,uBAAuB6lE,OAAS3oE,EAAAgC,WAAWC,kBAAkBk8G,cAC1Ft1F,EAAC6nE,EAAAU,YAAYC,aAAa,EAC1BxoE,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpF+8tB7B3oE,IoF58tBLrrB,KAAK+4E,QAAQi+B,oBAAmB8J,KAC5BA,EAAC5tB,EAAAU,YAAYK,iBAAiB,EAC9B6sB,EAAC5tB,EAAAU,YAAYM,qBAAqB,EAClC4sB,EAAC5tB,EAAAU,YAAYW,oBAAoB,EACjCusB,EAAC5tB,EAAAU,YAAYO,gBAAgB,EAC7B2sB,EAAC5tB,EAAAU,YAAYQ,iBAAiB,EAC9B0sB,EAAC5tB,EAAAU,YAAYU,eAAe,EAC5BwsB,EAAC5tB,EAAAU,YAAYC,aAAa,EAC1BitB,EAAC5tB,EAAAU,YAAYI,iBAAiB,EpFi9tB7B8sB,IoF78tBT9gH,KAAK80G,YAAY1L;ApFi9tBhB,GAAI/9E,GAAIy1F,GoF98tBblN,wBAAA9yG,UAAA8+E,QAAA,WACI5/E,KAAKy+G,eAAe/oG,OACpB1V,KAAK+4E,QAAQq+B,oBACbpxB,EAAAE,mBAAmB4G,oBAEdr+E,EAAAyB,cAAc8nE,oBACfh4E,KAAK80G,YAAYr6B,cAGrB/3E,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAOtCrD,wBAAA9yG,UAAAs/E,wBAAP,SAA+BC,GAC3BrgF,KAAKm+G,sBAAwB99B,GAMzBuzB,wBAAA9yG,UAAAm+G,wBAAR,WACIj/G,KAAKg/G,uBAAuBtpG,OAExBjH,EAAAyB,cAAc8nE,qBACdh4E,KAAKw+G,qBAAsB,EAC3B/vG,EAAAyB,cAAcwvE,mBASZk0B,wBAAA9yG,UAAA0/G,sBAAV,SAAgCO,GAAA,SAAAA,MAAA,GACwB,MAAhDv+G,EAAAgC,WAAWC,kBAAkBu8G,iBAA2Bx+G,EAAAgC,WAAWC,kBAAkBu8G,gBAAkB,GACvGhhH,KAAKg/G,uBAAuBrpG,MAAMorG,EAAcv+G,EAAAgC,WAAWC,kBAAkBu8G,kBAIrFpN,wBAAA9yG,UAAA65E,iBAAA,WACI36E,KAAK80G,YAAYn6B,oBAxjCzBi5B,wBAAAh4F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cpF0/vBxB8pF,0BoFz/vBqCK,EAAAoD,aAAhCh3G,GAAAuzG,wBAAuBA,GpFigwB9B,SAAStzG,EAAQD,GAEtB,YqFliwBD,IAAAs/G,GAAA,mBAAAA,gBAGA,MADWA,aAAAC,iBAA2B,eACtCD,cAHat/G,GAAAs/G,YAAWA,GrF8iwBlB,SAASr/G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsF1jwBjEna,EAAAzB,EAAgC,GAChCw7G,EAAAx7G,EAA2B,IAC3B40E,EAAA50E,EAA0B,IAC1B8gH,EAAA9gH,EAAyB,IACzBic,EAAAjc,EAA+B,IAI/B++G,EAAA,SAAA/7G,GAAoC5B,EAAA29G,eAAA/7G,EAahC,SAAA+7G,kBACI/7G,EAAA1C,KAAAT,MAsGR,MAnGIk/G,gBAAAp+G,UAAA2xG,oBAAA,SAAoB7hG,GAKZA,YAAgBqwG,GAAAC,WAChBlhH,KAAK+7G,MAAQnrG,GAOjB5Q,KAAKg8G,OAAS,GAAIjnC,GAAA+E,UAAU95E,OAGhCk/G,eAAAp+G,UAAAu1E,aAAA,WACIr2E,KAAK+7G,MAAM1lC,aAAar2E,OAG5Bk/G,eAAAp+G,UAAAqgH,YAAA,WACInhH,KAAK+7G,MAAMoF,eAGfjC,eAAAp+G,UAAAo+E,UAAA,WACIl/E,KAAK+7G,MAAM78B,aAGfggC,eAAAp+G,UAAA01E,QAAA,WACIx2E,KAAK+7G,MAAMvlC,WAGf0oC,eAAAp+G,UAAAwyF,KAAA,WACItzF,KAAKg8G,OAAO1oB,OACZtzF,KAAK+7G,MAAMzoB,QAGf4rB,eAAAp+G,UAAA4U,KAAA,WACI1V,KAAK+7G,MAAMrmG,QAGfwpG,eAAAp+G,UAAA2yF,aAAA,WACIzzF,KAAK+7G,MAAMtoB,eACXzzF,KAAKyX,KAAKynG,eAAeC,eAG7BD,eAAAp+G,UAAAy+G,qBAAA,WACIv/G,KAAKyX,KAAKynG,eAAeI,uBAG7BJ,eAAAp+G,UAAAu+G,eAAA,WACIr/G,KAAKyX,KAAKynG,eAAeE,iBAG7BF,eAAAp+G,UAAAw0G,uBAAA,WACIt1G,KAAKyX,KAAKynG,eAAe7J,yBAG7B6J,eAAAp+G,UAAA00G,gBAAA,WACIx1G,KAAKyX,KAAKynG,eAAe3J,kBAG7B2J,eAAAp+G,UAAA65E,iBAAA,WACI36E,KAAK+7G,MAAMphC,oBAGfukC,eAAAp+G,UAAAk/E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF//E,KAAK+7G,MAAM/7B,MAAMD,IAGrBm/B,eAAAp+G,UAAA4lG,cAAA,WACI1mG,KAAKyX,KAAKynG,eAAevJ,gBAG7BuJ,eAAAp+G,UAAAm/E,MAAA,WACIjgF,KAAK+7G,MAAM97B,SAGfi/B,eAAAp+G,UAAA+kG,cAAA,WACI7lG,KAAKyX,KAAKynG,eAAetJ,gBAG7BsJ,eAAAp+G,UAAAsgH,cAAA,WACIphH,KAAK+7G,MAAMqF,iBAGflC,eAAAp+G,UAAA25E,YAAA,WACIz6E,KAAK+7G,MAAMthC,eAGfykC,eAAAp+G,UAAA0/E,aAAA,SAAah6D,GACTxmB,KAAK+7G,MAAMv7B,aAAah6D,IAG5B04F,eAAAp+G,UAAAsoG,MAAA,aAEA8V,eAAAp+G,UAAAw/G,uBAAA,WACItgH,KAAK+7G,MAAMuE,0BAjHQpB,eAAAC,aAAuB,oBACvBD,eAAAE,eAAyB,sBACzBF,eAAA7J,uBAAiC,8BACjC6J,eAAA3J,gBAA0B,uBAC1B2J,eAAAvJ,cAAwB,qBACxBuJ,eAAAtJ,cAAwB,qBAExBsJ,eAAAI,qBAA+B,4BAT1DJ,eAAAtjG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAewD,atFspwBxB+0F,iBsFrpwB4BvD,EAAAxxF,WAAvB9pB,GAAA6+G,eAAcA,GtF6pwBrB,SAAS5+G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GuFjrwBjEna,EAAAzB,EAAuC,GAIvCkhH,EAAAlhH,EAA4B,IAC5BmhH,EAAAnhH,EAAwB,KAExBic,EAAAjc,EAA+B,IAE/BwC,EAAAxC,EAA4B,IAC5BiT,EAAAjT,EAA2E,GAC3EgiF,EAAAhiF,EAAyB,IACzBsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5B0jG,EAAA1jG,EAAkC,IAElCohH,EAAAphH,EAA8B,KAC9B40E,EAAA50E,EAA0B,IAE1BqhH,EAAArhH,EAA8B,KAC9BshH,EAAAthH,EAAuC,KAGvC+gH,EAAA,SAAA/9G,GAA8B5B,EAAA2/G,SAAA/9G,EA4B1B,SAAA+9G,YACI/9G,EAAA1C,KAAAT,MAtBIA,KAAA0hH,cAAwB,EAmBtB1hH,KAAA2hH,cAIN3hH,KAAK4hH,YAAcxuG,EAAAa,iBAAiB,cACpCjU,KAAK4hH,YAAY1tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK0mG,cAAcryF,KAAKrU,OACvEA,KAAK6hH,YAAczuG,EAAAa,iBAAiB,cACpCjU,KAAK6hH,YAAY3tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK6lG,cAAcxxF,KAAKrU,OACvEA,KAAK8hH,WAAa1uG,EAAAa,iBAAiB,aACnCjU,KAAK8hH,WAAW5tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK+hH,sBAAsB1tG,KAAKrU,OAC9EA,KAAKgiH,YAAc5uG,EAAAa,iBAAiB,cACpCjU,KAAKgiH,YAAY9tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKiiH,uBAAuB5tG,KAAKrU,OAChFA,KAAKkiH,gBAAkB9uG,EAAAa,iBAAiB,kBACxCjU,KAAKkiH,gBAAgBhuG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKmiH,eAAe9tG,KAAKrU,OAC5EA,KAAKoiH,kBAAoBhvG,EAAAa,iBAAiB,oBAC1CjU,KAAKoiH,kBAAkBluG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKqiH,iBAAiBhuG,KAAKrU,OAChFA,KAAKsiH,aAAelvG,EAAAa,iBAAiB,eACrCjU,KAAKsiH,aAAapuG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKuiH,YAAYluG,KAAKrU,OAyd9E,MAtdWkhH,UAAApgH,UAAAa,OAAP,SAAcmc,GACV3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEbojG,SAASsB,cAAgB,GAAIhB,GAAAgB,cAEC,MAA1BxiH,KAAK4pG,OAAgB,UACrB5pG,KAAKyiH,SAAWziH,KAAK4pG,OAAgB,QACrC5pG,KAAKymB,YAAYzmB,KAAKyiH,WAEK,MAA3BziH,KAAK4pG,OAAiB,WAAW5pG,KAAK0iH,UAAY1iH,KAAK4pG,OAAiB,UAC9C,MAA1B5pG,KAAK4pG,OAAgB,UAAW5pG,KAAK2iH,SAAW3iH,KAAK4pG,OAAgB,SACvC,MAA9B5pG,KAAK4pG,OAAoB,cAAW5pG,KAAK4iH,aAAe5iH,KAAK4pG,OAAoB,aAElD,MAA/B5pG,KAAK4pG,OAAqB,eAAWsX,SAAS2B,aAAe7iH,KAAK4pG,OAAqB,cAChE,MAAvB5pG,KAAK4pG,OAAa,OAAWsX,SAAS4B,KAAO9iH,KAAK4pG,OAAa,MAClC,MAA7B5pG,KAAK4pG,OAAmB,aAAWsX,SAAS6B,WAAa/iH,KAAK4pG,OAAmB,YAE9C,MAAnC5pG,KAAK4pG,OAAyB,mBAC9B5pG,KAAKgjH,kBAAoBhjH,KAAK4pG,OAAyB,iBAEzB,MAA1B5pG,KAAKgjH,oBACLhjH,KAAKijH,mBAAyCjjH,KAAKgjH,kBAAkBE,sBAAsB,WAInGljH,KAAKmjH,0BACLnjH,KAAK8f,SAAU,GAGZohG,SAAApgH,UAAAu1E,aAAP,SAAoB8c,GAChBnzF,KAAK80G,YAAc3hB,EAEE,MAAjBnzF,KAAKyiH,UACgB,MAAjBziH,KAAK2iH,UAC2B,MAA5BhgH,EAAAoG,YAAYqhE,eAC6B,MAArCznE,EAAAoG,YAAYqhE,aAAa5I,UAA+D,MAA3C7+D,EAAAoG,YAAYqhE,aAAa5I,SAASwJ,QAC/EhrE,KAAK2iH,SAASzuG,GAAGotG,EAAA8B,QAAQC,YAAarjH,KAAKsjH,cAAcjvG,KAAKrU,OAC9DA,KAAK2iH,SAASzuG,GAAGotG,EAAA8B,QAAQhE,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OAClEA,KAAK2iH,SAAS7+G,WACV9D,KAAKyiH,SACL9/G,EAAAoG,YAAYqhE,aAAa5I,SAASwJ,MAClChrE,KAAK4pG,OAAgB,QACrB5pG,KAAK4pG,OAAmB,YACxB,EACA5pG,KAAK4pG,OAAmB,WACxB5pG,KAAK4pG,OAAqB,eAKK,MAAnCjnG,EAAAoG,YAAYqhE,aAAaW,QACgB,MAAzCpoE,EAAAoG,YAAYqhE,aAAaW,OAAOC,OACiB,IAAjDroE,EAAAoG,YAAYqhE,aAAaW,OAAOC,MAAM9+D,SAEb,MAArBlM,KAAK4iH,eACL5iH,KAAK4iH,aAAa1uG,GACdmtG,EAAAkC,YAAYC,qBACZxjH,KAAKyjH,qBAAqBpvG,KAAKrU,OAEnCA,KAAK4iH,aAAa1uG,GAAGmtG,EAAAkC,YAAYG,kBAAmB1jH,KAAK2jH,kBAAkBtvG,KAAKrU,OAChFA,KAAK4iH,aAAa9+G,WACd9D,KAAKyiH,SACLziH,KAAK0iH,UACL1iH,KAAK4pG,OAAuB,eAC5B5pG,KAAK4pG,OAAqB,aAC1B5pG,KAAK4pG,OAA0B,kBAC/B5pG,KAAK4pG,OAAuB,eAC5B5pG,KAAK4pG,OAAuB,eAC5B,KACA5pG,KAAK4pG,OAA8B,sBACnC5pG,KAAK4pG,OAAoB,aAE7B5pG,KAAK4iH,aAAagB,YAAYjhH,EAAAoG,YAAYqhE,aAAaW,OAAOC,OAClC,MAAxB+J,EAAA+E,UAAUC,YAAwD,OAAlChF,EAAA+E,UAAUC,WAAkB,OAC5D/5E,KAAK4iH,aAAaiB,WAAW9uC,EAAA+E,UAAUC,WAAkB,OAC7D/5E,KAAK4iH,aAAakB,uBACd9jH,KAAK4pG,OAAgC,wBACrC5pG,KAAK4pG,OAA6B,qBAClC5pG,KAAK4pG,OAA4B,oBACjC5pG,KAAK4pG,OAA6B,qBAClC,OAGR5pG,KAAK2iH,SAASoB,uBAAuBphH,EAAAoG,YAAYqhE,aAAaW,OAAOC,SAqBrFhrE,KAAK8f,SAAU,EAEXrR,EAAAyB,cAAckqE,iBACdp6E,KAAK8f,SAAU,EACf9f,KAAKgkH,WAAY,EACjBhkH,KAAKgjH,kBAAkBiB,SAAS,sBAIjC/C,SAAApgH,UAAA2yF,aAAP,WACI7wF,EAAA6F,YAAYmiE,uBAEoB,MAA5BjoE,EAAAoG,YAAYqhE,cAA4D,OAApCznE,EAAAoG,YAAYqhE,aAAaW,QAC7D/qE,KAAK4iH,aAAanvB,aAAa9wF,EAAAoG,YAAYqhE,aAAaW,OAAOC,OAEnEhrE,KAAK2iH,SAASoB,uBAAuBphH,EAAAoG,YAAYqhE,aAAaW,OAAOC,OACrEhrE,KAAK2iH,SAAS3e,SAAS,MAAM,GAAO,IAGjCkd,SAAApgH,UAAAwyF,KAAP,WACgC,MAAxBve,EAAA+E,UAAUC,YAAuD,MAAjChF,EAAA+E,UAAUC,WAAkB,MAC5D/5E,KAAK4iH,aAAatvB,KAAKve,EAAA+E,UAAUC,WAAkB,OAEnD/5E,KAAK4iH,aAAatvB,KAAK,MAE3BnR,EAAAp4D,SAASrU,KAAK,qBACdysE,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,gBACvBruF,KAAK2iH,SAASrd,UAAUtlG,KAAK4iH,aAAa1mD,OAAM,IAAO,EAAMl8D,KAAK4iH,aAAazc,iBAG5E+a,SAAApgH,UAAA4U,KAAP,WACI1V,KAAK2iH,SAAS3e,SAAS,MAAM,IAG1Bkd,SAAApgH,UAAA01E,QAAP,WACI2L,EAAAp4D,SAASrU,KAAK,qBACdysE,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,gBACvBruF,KAAK4iH,aAAa1mD,OAAM,IAGrBglD,SAAApgH,UAAAo+E,UAAP,WACIl/E,KAAK8f,SAAU,EACXnd,EAAAoG,YAAYgxD,aAAaqR,SAAW,EAChC38D,EAAAyB,cAAc8nE,mBACdmK,EAAAp4D,SAAS8jE,KAAK,cACgC,GAAvClrF,EAAAoG,YAAYqhE,aAAa2pB,YAEhC5R,EAAAp4D,SAAS8jE,KAAK,sBAGlB1L,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,iBAE3BruF,KAAK4iH,aAAasB,aAAavhH,EAAAoG,YAAYqhE,aAAa+5C,KAAMxhH,EAAAoG,YAAYqhE,aAAa2pB,aAGpFmtB,SAAApgH,UAAAk/E,MAAP,SAAaD,GAAA,SAAAA,OAAA,GACT//E,KAAK8f,SAAU,EACXnd,EAAAoG,YAAYgxD,aAAaqR,SAAW,EACpC+W,EAAAp4D,SAASqkE,UAAU,eAAgB,IAEnCjM,EAAAp4D,SAASrU,KAAK,qBACdysE,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,iBAEM,MAA7BruF,KAAK4pG,OAAmB,YACxB5pG,KAAK4pG,OAAmB,WAAEqa,SAAS,UAGnCjkH,KAAKgkH,WAAahkH,KAAKgjH,mBACvBhjH,KAAKgjH,kBAAkBiB,SAAS,QAGhClkC,GACA//E,KAAK8f,SAAU,EACf9f,KAAK4iH,aAAa1mD,OAAM,GACxBl8D,KAAK4iH,aAAagB,YAAY7uC,EAAA+E,UAAUC,WAAkB,OAC9B,MAAxBhF,EAAA+E,UAAUC,YAAwD,OAAlChF,EAAA+E,UAAUC,WAAkB,OAC5D/5E,KAAK4iH,aAAaiB,WAAW9uC,EAAA+E,UAAUC,WAAkB,OAClC,MAAvBmnC,SAAS6B,aACT/iH,KAAKiS,SAASivG,SAAS6B,YACvB7B,SAAS6B,WAAWkB,SAAS,QAEjCjkH,KAAK4hH,YAAYjsG,MAAM,KAEvB3V,KAAK4hH,YAAYjsG,MAAM,KAIxBurG,SAAApgH,UAAAm/E,MAAP,WACIkC,EAAAp4D,SAASrU,KAAK,cACa,MAAvB1V,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,YAE9D,IAAIG,GAAuBpkH,KAAK0hH,aAC5B2C,EAAsBrkH,KAAK4iH,aAAa1mD,OAAM,EAE9CztD,GAAAyB,cAAc+nE,mBACa,MAAvBipC,SAAS6B,aACT/iH,KAAKiS,SAASivG,SAAS6B,YACvB7B,SAAS6B,WAAWkB,SAAS,UAEjC9hC,EAAAp4D,SAASsS,KAAK,eACdwnE,EAAA8C,kBAAkBC,wBAAwB,KAAM,KAAM,KACtD5mG,KAAK6hH,YAAYlsG,MAAM,IAEvBwsE,EAAAp4D,SAASqkE,UAAU,eAAgB,GACnCjM,EAAAp4D,SAASrU,KAAK,sBAEV0uG,EACApkH,KAAKsiH,aAAa3sG,MAAM,IAEpB0uG,EACArkH,KAAKsiH,aAAa3sG,MAAM,IAExB3V,KAAKsiH,aAAa3sG,MAAM,KAMhCurG,SAAApgH,UAAA+kG,cAAR,WACI7lG,KAAK80G,YAAYjP,gBACjB7lG,KAAK4iH,aAAa0B,aAClB/C,EAAAgD,cAAc1B,aAAaoB,SAAS,SAEhCx1G,EAAAyB,cAAc+nE,oBACdj4E,KAAK8f,SAAU,IAMfohG,SAAApgH,UAAAyhH,YAAR,WACQviH,KAAKgjH,oBACLhjH,KAAKgkH,WAAY,EACjBhkH,KAAKgjH,kBAAkBiB,SAAS,gBAEpC9hC,EAAAp4D,SAASqkE,UAAU,eAAgB,GACnCjM,EAAAp4D,SAASrU,KAAK,qBACdysE,EAAAp4D,SAASsS,KAAK,wBACdr8B,KAAK6hH,YAAYlsG,MAAM,KAGpBurG,SAAApgH,UAAAqgH,YAAP,WAC+B,MAAvBnhH,KAAK4pG,OAAa,MAClB5pG,KAAKymB,YAAYzmB,KAAK4pG,OAAa,OAIpCsX,SAAApgH,UAAA65E,iBAAP,WACI36E,KAAK4iH,aAAa1mD,OAAM,IAGrBglD,SAAApgH,UAAA25E,YAAP,WACIz6E,KAAK4iH,aAAa0B,cAGfpD,SAAApgH,UAAAsgH,cAAP,aAEOF,SAAApgH,UAAA0/E,aAAP,SAAoBh6D,GACZA,GACA27D,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,kBAEvBlM,EAAAp4D,SAASqkE,UAAU,eAAgB,GACnCjM,EAAAp4D,SAASrU,KAAK,uBAIdwrG,SAAApgH,UAAAwiH,cAAR,WACItjH,KAAK4iH,aAAaU,cAAc3gH,EAAAoG,YAAYqhE,aAAaW,OAAOC,MAAOhrE,KAAK2iH,SAAS6B,oBAGjFtD,SAAApgH,UAAAu+G,eAAR,WACQ5wG,EAAAyB,cAAc8nE,mBACmB,MAA7Bh4E,KAAK4pG,OAAmB,YACxB5pG,KAAK4pG,OAAmB,WAAEqa,SAAS,WAGN,MAA7BjkH,KAAK4pG,OAAmB,YACxB5pG,KAAK4pG,OAAmB,WAAEqa,SAAS,UAIvCx1G,EAAAyB,cAAc8nE,oBACdh4E,KAAK80G,YAAYyK,uBACjBv/G,KAAKoiH,kBAAkBzsG,MAAM,KAE7B3V,KAAKqiH,oBAILnB,SAAApgH,UAAAuhH,iBAAR,WACIriH,KAAKoiH,kBAAkB1sG,OACnB1V,KAAK4iH,aAAa6B,YAAY9hH,EAAAoG,YAAYqhE,aAAaW,OAAOC,QAC9DhrE,KAAK80G,YAAYyK,uBACjBv/G,KAAKkiH,gBAAgBvsG,MAAM,KAE3B3V,KAAKmiH,kBAILjB,SAAApgH,UAAAqhH,eAAR,WACIniH,KAAKkiH,gBAAgBxsG,OACjB1V,KAAK4iH,aAAavD,eAAe18G,EAAAoG,YAAYqhE,aAAaW,OAAOC,QACjEhrE,KAAK80G,YAAYyK,uBACjBv/G,KAAK8hH,WAAWnsG,MAAM,KAEtB3V,KAAK+hH,yBAILb,SAAApgH,UAAAihH,sBAAR,WACI/hH,KAAKiiH,0BAGDf,SAAApgH,UAAAmhH,uBAAR,WACIjiH,KAAK0hH,cAAe,EACpB1hH,KAAK80G,YAAYuK,iBACbr/G,KAAK4iH,aAAapgD,SAAS7/D,EAAAoG,YAAYqhE,aAAa+5C,KAAMxhH,EAAAoG,YAAYqhE,aAAa2pB,aAKnFmtB,SAAApgH,UAAA2iH,qBAAR,WACIzjH,KAAK0hH,cAAe,EACpB1hH,KAAK80G,YAAYQ,0BAGb4L,SAAApgH,UAAA6iH,kBAAR,WACS/gH,EAAA6F,YAAYmH,WAAYnB,EAAAyB,cAAc8nE,qBACvCmK,EAAAp4D,SAASqkE,UAAU,eAAgB,GAE/B3/E,EAAAyB,cAAc8nE,oBACdmK,EAAAp4D,SAAS8jE,KAAK,eAGtB7tF,KAAK80G,YAAYU,mBAGb0L,SAAApgH,UAAA4lG,cAAR,WACQ9jG,EAAA6F,YAAY2gE,iBACZ+Y,EAAAp4D,SAAS8jE,KAAK,gBACd1L,EAAAp4D,SAASskE,cAAc,iBAEvBlM,EAAAp4D,SAAS8jE,KAAK,qBAES,MAAvB7tF,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,QAC9DjkH,KAAK4iH,aAAa1mD,OAAM,GACxBl8D,KAAK80G,YAAYpO,iBAGrBwa,SAAApgH,UAAAw/G,uBAAA,WACI,GAAMp1C,GAAgBtoE,EAAA6F,YAAYwiE,qCAE7BrpE,GAAAqG,MAAMC,kBAAkBgjE,IACrBlrE,KAAK2hH,YAAcz2C,EAAcL,YACjC7qE,KAAK2hH,WAAaz2C,EAAcL,UAE3BjpE,EAAAqG,MAAMC,kBAAkBgjE,EAAcJ,aACvC9qE,KAAK4iH,aAAagB,YAAY14C,EAAcJ,WAC5C9qE,KAAK4iH,aAAa8B,eAEU,MAAxB3vC,EAAA+E,UAAUC,aACVhF,EAAA+E,UAAUC,WAAkB,MAAI7O,EAAcJ,UAC9C9qE,KAAK4iH,aAAaiB,WAAW9uC,EAAA+E,UAAUC,WAAkB,WAOrEmnC,SAAApgH,UAAAqiH,wBAAR,WACInjH,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAoB,YAClCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAoB,eAEvD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAgB,QAC9BnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAgB,WAEnD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAmB,WACjCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAmB,cAEtD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAiB,SAC/BnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAiB,YAEpD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAuB,eACrCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAuB,kBAE1D5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAuB,eACrCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAuB,kBAE1D5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAuB,eACrCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAuB,kBAE1D5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAA4B,oBAC1CnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAA4B,uBAE/D5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAiB,SAC/BnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAiB,YAEpD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAgC,wBAC9CnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAgC,2BAEnE5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAoB,YAClCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAoB,eAEvD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAA6B,qBAC3CnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAA6B,wBAEhE5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAA0B,kBACxCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAA0B,qBAE7D5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAqB,aACnCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAqB,gBAExD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAqB,aACnCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAqB,gBAExD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAA6B,qBAC3CnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAA6B,wBAEhE5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAoB,YAClCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAoB,eAEvD5pG,KAAKijH,mBAAmB0B,YACpBt7G,QAASrJ,KAAK4pG,OAAqB,aACnCnxE,OAAQz4B,KACR2jC,MAAO3jC,KAAK4kH,cAAc5kH,KAAK4pG,OAAqB,iBAlgBhEsX,SAAAtlG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBvFomxBxBs6F,WuFnmxBsBO,EAAAoD,uBAAjBxkH,GAAA6gH,SAAQA,GvF2mxBf,SAAS5gH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwF9oxBjEna,EAAAzB,EAAyD,GACzD6B,EAAA7B,EAA8B,GAC9B2kH,EAAA3kH,EAAwB,IAExB4kH,EAAA5kH,EAAoC,KACpC6kH,EAAA7kH,EAAuB,KAEvBic,EAAAjc,EAA+B,IAC/Bs5F,EAAAt5F,EAA8B,IAC9Bi8G,EAAAj8G,EAAiC,IACjC8kH,EAAA9kH,EAAgC,KAChCotF,EAAAptF,EAA6B,IAC7BiT,EAAAjT,EAA2E,GAC3EiC,EAAAjC,EAA0B,IAC1BomE,EAAApmE,EAA2B,IAC3BgiF,EAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3B+kH,EAAA/kH,EAAwC,KACxCsO,EAAAtO,EAA8B,IAE9B20E,EAAA30E,EAA+B,IAC/BshH,EAAAthH,EAAuC,KASvCojH,EAAA,SAAApgH,GAAiC5B,EAAAgiH,YAAApgH,EAAjC,SAAAogH,eAAiCpgH,EAAA9B,MAAArB,KAAAoD,WAi2BjC,MA1xBWmgH,aAAAziH,UAAAa,OAAP,SAAcmc,GASV,GARA3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAETA,EAAKU,aAAane,EAAA8kH,sBAAsBC,SACuC,MAA3E73B,EAAAI,aAAaY,UAAUzwE,EAAKe,aAAaxe,EAAA8kH,sBAAsBC,WAC/DplH,KAAKsuF,SAAWxwE,EAAKe,aAAaxe,EAAA8kH,sBAAsBC,SAI5DtnG,EAAKU,aAAane,EAAA8kH,sBAAsBE,SAGxC,IAAK,GAFDC,GAAyBxnG,EAAKe,aAAaxe,EAAA8kH,sBAAsBE,SAASr/F,MAAM,KAE3EjmB,EAAI,EAAGA,EAAIulH,EAAQp5G,OAAQnM,IAChCC,KAAKulH,UAAU9rB,EAAAO,cAAcvB,eAAe6sB,EAAQvlH,MAKtDwjH,YAAAziH,UAAAykH,UAAV,SAAoBznG,GACZA,EAAKU,aAAa,eAClBxe,KAAKwlH,UAAYtvG,SAAS4H,EAAKe,aAAa,eAG5Cf,EAAKU,aAAa,WAClBxe,KAAKylH,MAAQ7jH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WAGtDf,EAAKU,aAAa,WAClBxe,KAAK0lH,MAAQ9jH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WAGtDf,EAAKU,aAAa,wBAClBxe,KAAK2lH,YAAczvG,SAAS4H,EAAKe,aAAa,wBAG9Cf,EAAKU,aAAa,iBAClBxe,KAAK4lH,YAAc1vG,SAAS4H,EAAKe,aAAa,iBAG9Cf,EAAKU,aAAa,kBAClBxe,KAAK6lH,aAAe3vG,SAAS4H,EAAKe,aAAa,kBAG/Cf,EAAKU,aAAa,qBAClBxe,KAAK8lH,YAAclkH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,qBAG5Df,EAAKU,aAAa,oBAClBxe,KAAK+lH,eAAiBjoG,EAAKe,aAAa,kBAAkBmH,MAAM,OAIjEu9F,YAAAziH,UAAAgD,WAAP,SACIokG,EACA8d,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEsB,MAAlBF,IACArmH,KAAKqmH,eAAiBA,GAE1BrmH,KAAKwmH,cACLxmH,KAAKklG,cACDgD,EACA+d,EACAC,EACAC,EACAC,EACAE,GAEJtmH,KAAKymH,eAAeT,GACpBhmH,KAAK8jG,iBAAiByiB,IAOnBhD,YAAAziH,UAAAwiH,cAAP,SAAqBx4C,EAA4C47C,GAC7D1mH,KAAK2mH,aAAe77C,CAEpB,KAAK,GAAI/qE,GAAI,EAAGA,EAAI+qE,EAAU47C,GAAWxe,QAAQh8F,OAAQnM,IACrDC,KAAK4mH,oBAAoBF,EAAW3mH,EAGxC,KAAK,GAAIA,GAAI,EAAGA,EAAI+qE,EAAU47C,GAAWxe,QAAQh8F,OAAQnM,IACrDC,KAAK6mH,iBAAiBH,EAAW3mH,IAIlCwjH,YAAAziH,UAAA8iH,YAAP,SAAmB94C,GACf9qE,KAAK2mH,aAAe77C,CAEpB,KAAK,GAAI/qE,GAAI,EAAGA,EAAI+qE,EAAU5+D,OAAQnM,IAClC,IAAK,GAAI4iC,GAAI,EAAGA,EAAImoC,EAAU/qE,GAAGmoG,QAAQh8F,OAAQy2B,IAC7C3iC,KAAK4mH,oBAAoB7mH,EAAG4iC,EAIpC,KAAK,GAAI5iC,GAAI,EAAGA,EAAI+qE,EAAU5+D,OAAQnM,IAClC,IAAK,GAAI4iC,GAAI,EAAGA,EAAImoC,EAAU/qE,GAAGmoG,QAAQh8F,OAAQy2B,IACxC3iC,KAAK8mH,mBAAmB/mH,EAAG4iC,IAC5B3iC,KAAK6mH,iBAAiB9mH,EAAG4iC,IAUlC4gF,YAAAziH,UAAA0hE,SAAP,SAAgB2hD,EAAsC7xC,GAMlD,GALAtyE,KAAK+mH,YAAc5C,EACnBnkH,KAAK+zF,WAAazhB,EAElBtyE,KAAKgnH,kBAEO,MAAR7C,GAAgBA,EAAKj4G,OAAS,EAAG,CACjClM,KAAKinH,uBAAyB,CAE9B,KAAK,GAAIlnH,GAAI,EAAGA,EAAIC,KAAK8lH,YAAY55G,OAAQnM,IACrCC,KAAK+zF,WAAaxtB,EAAAsD,WAAWK,KAAOlqE,KAAK8lH,YAAY/lH,KACrDC,KAAKinH,uBAAyBlnH,EAQtC,OAJKC,MAAKknH,iBACNlnH,KAAKmnH,gBAGFnnH,KAAKinH,wBAA0B,EAItC,MAFAjnH,MAAKonH,WAAW7D,YAAY8D,KAAMrnH,KAAKsnH,wBAEhC,GAIL/D,YAAAziH,UAAAomH,cAAV,WACI,OAAO,GAGD3D,YAAAziH,UAAAqmH,cAAV,WACInnH,KAAKunH,mBAAmBvC,EAAAwC,OAAOC,WAAW,GAC1CznH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQF,UAEjC,KAAK,GAAI1nH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACzCC,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOK,SAAS,GAC3C7nH,KAAK8nH,mBAAmB/nH,EAAG+kH,EAAA6C,QAAQI,aAGvC/nH,MAAKgoH,kBAGCzE,YAAAziH,UAAAmnH,gBAAV,WACIjoH,KAAKyX,KAAK8rG,YAAYG,mBAEtB1jH,KAAKkoH,aAAe,EAEpBloH,KAAKmoH,WAAU,IAOZ5E,YAAAziH,UAAAojH,aAAP,SAAoBC,EAAsC7xC,GACtDtyE,KAAK+mH,YAAc5C,EACnBnkH,KAAK+zF,WAAazhB,EAElBtyE,KAAKgnH,kBAEO,MAAR7C,GAAgBA,EAAKj4G,OAAS,GAC9BlM,KAAKooH,oBACLpoH,KAAKqoH,oBACLroH,KAAKsoH,uBAELtoH,KAAKonH,WAAW7D,YAAY8D,KAAMrnH,KAAKsnH,wBAIrC/D,YAAAziH,UAAAsnH,kBAAV,aAEU7E,YAAAziH,UAAAunH,kBAAV,WACIroH,KAAKunH,mBAAmBvC,EAAAwC,OAAOC,WAAW,GAC1CznH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQF,UAEjC,KAAK,GAAI1nH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACzCC,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOK,SAAS,GAC3C7nH,KAAK8nH,mBAAmB/nH,EAAG+kH,EAAA6C,QAAQI,eAIjCxE,YAAAziH,UAAAwnH,oBAAV,WACItoH,KAAKkoH,aAAe,EAEpBloH,KAAKmoH,WAAU,IAOT5E,YAAAziH,UAAAqnH,UAAV,SAAoBI,GAAA,SAAAA,OAAA,GACQ,MAApBvoH,KAAK+mH,cAILwB,IACAvoH,KAAKwoH,UAAY,GAGrBrmC,EAAAp4D,SAASsS,KAAK,wBAET5tB,EAAAyB,cAAc8nE,oBAAuBvpE,EAAAyB,cAAc+nE,mBAAwC,IAAnBj4E,KAAKwoH,YAC9ExoH,KAAKwoH,YACLrmC,EAAAp4D,SAASrU,KAAK,qBACdysE,EAAAp4D,SAAS8jE,KAAK,sBAGlB7tF,KAAK0nH,oBAAoB5C,EAAA6C,QAAQF,WAEjCznH,KAAK4nH,mBAAmB5nH,KAAKkoH,aAAclD,EAAAwC,OAAOiB,WAAW,GAC7DzoH,KAAK8nH,mBAAmB9nH,KAAKkoH,aAAcpD,EAAA6C,QAAQE,SAEnD7nH,KAAKkoH,cAAgBloH,KAAKkoH,aAAe,GAAKloH,KAAK+mH,YAAY76G,OAE/B,IAA5BlM,KAAK+mH,YAAY76G,QAGrBlM,KAAKonH,WAAW7D,YAAYmF,UAAW1oH,KAAK2oH,gCAAgCJ,MAGtEhF,YAAAziH,UAAA6nH,gCAAV,SAA0CJ,GACtC,GAAIK,GAAY5oH,KAAK6oH,oBAAsB,GAAM,IAC7C/zG,GAAQzJ,KAAKs9C,MAAQ3oD,KAAK8oH,WAAaF,CAM3C,QALI9zG,EAAO,KAAOyzG,KACdzzG,EAAO,EACP9U,KAAK8oH,UAAYz9G,KAAKs9C,QAGlBigE,EAAW9zG,GAAQ,MAGrByuG,YAAAziH,UAAA+nH,kBAAV,WACI,MAAO,KAOJtF,YAAAziH,UAAAo7D,MAAP,SAAa6sD,GACT/oH,KAAK+jG,YAEL/jG,KAAKunH,mBAAmBwB,EAAkB/D,EAAAwC,OAAOwB,WAAahE,EAAAwC,OAAOyB,WAAW,GAChFjpH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQqB,YAEjChpH,KAAKgmH,SAASkD,oBAEVH,GACA/oH,KAAKonH,WAAW7D,YAAY8D,KAAMrnH,KAAKsnH,uBAG3CtnH,KAAK+M,MAAM2I,OACX1V,KAAK+M,MAAM+S,SAAU,CAErB,IAAIqpG,GAAsBnpH,KAAKinH,sBAG/B,OAFAjnH,MAAKinH,0BAE6B,MAA9BjnH,KAAKopH,sBACDppH,KAAKqpH,0BACLrpH,KAAKgnH,kBAELhnH,KAAK+mH,YAAc,KACnB/mH,KAAK+zF,WAAa,MACX,IAEP/zF,KAAKspH,gBAELtpH,KAAK+mH,YAAc,KACnB/mH,KAAK+zF,WAAa,KACXo1B,GAAuB,IAGlCnpH,KAAK+mH,YAAc,KACnB/mH,KAAK+zF,WAAa,KACXo1B,GAAuB,IAQ5B5F,YAAAziH,UAAA0lH,YAAV,WACIxmH,KAAKupH,YAAc,GAEnBvpH,KAAKygH,MAAQrtG,EAAAa,iBAAiB,SAC9BjU,KAAKygH,MAAMvsG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKwpH,gBAAgBn1G,KAAKrU,QAG7DujH,YAAAziH,UAAAsmH,WAAV,SAAqBhgH,EAAgBmS,GACjCvZ,KAAKupH,YAAcniH,EAEnBpH,KAAKygH,MAAM9qG,MAAM4D,IAGXgqG,YAAAziH,UAAAijG,UAAV,WACsB,MAAd/jG,KAAKygH,OACLzgH,KAAKygH,MAAM/qG,QAIZ6tG,YAAAziH,UAAAwjH,WAAP,WACItkH,KAAK+jG,YAEA/jG,KAAKqpH,0BACNrpH,KAAKspH,iBAIH/F,YAAAziH,UAAA0oH,gBAAV,WAGI,OAFAxpH,KAAKygH,MAAM/qG,OAEH1V,KAAKupH,aACT,IAAKhG,aAAY8D,KACbrnH,KAAKypH,MACL,MACJ,KAAKlG,aAAYmF,UACb1oH,KAAKmoH,cASP5E,YAAAziH,UAAAokG,cAAV,SACIgD,EACA+d,EACAC,EACAC,EACAC,EACAE,GAEAtmH,KAAKkoG,QAAUA,EAEc,MAAzB+d,EACAjmH,KAAKimH,sBAAwBA,GAE7BjmH,KAAKimH,sBAAwB,GAAI7J,GAAA0B,iBACjC99G,KAAKimH,sBAAsBhoG,KAAO,eAElCje,KAAKiS,SAASjS,KAAKimH,wBAGD,MAAlBG,EACApmH,KAAKomH,eAAiBA,GAEtBpmH,KAAKomH,eAAiB,GAAIhK,GAAA0B,iBAC1B99G,KAAKomH,eAAenoG,KAAO,cAE3Bje,KAAKiS,SAASjS,KAAKomH,iBAGE,MAArBD,EACAnmH,KAAKmmH,kBAAoBA,GAEzBnmH,KAAKmmH,kBAAoB,GAAI/J,GAAA0B,iBAC7B99G,KAAKmmH,kBAAkBloG,KAAO,YAE9Bje,KAAKiS,SAASjS,KAAKmmH,oBAGC,MAApBD,EACAlmH,KAAKkmH,iBAAmBA,GAExBlmH,KAAKkmH,iBAAmB,GAAI9J,GAAA0B,iBAC5B99G,KAAKkmH,iBAAiBjoG,KAAO,UAE7Bje,KAAKiS,SAASjS,KAAKkmH,mBAGH,MAAhBI,EACAtmH,KAAKsmH,aAAeA,GAEpBtmH,KAAKsmH,aAAe,GAAIlK,GAAA0B,iBACxB99G,KAAKsmH,aAAaroG,KAAO,OAEzBje,KAAKiS,SAASjS,KAAKsmH,eAGvBtmH,KAAKmmG,kBACLnmG,KAAK0pH,eACL1pH,KAAK2pH,YAEL,KAAK,GAAI5pH,GAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAAK,CACrCC,KAAKmmG,eAAenzF,SACpBhT,KAAK2pH,UAAU32G,QAEf,KAAK,GAAI2vB,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAahjF,IAAK,CACvC3iC,KAAKmmG,eAAepmG,GAAGiT,KAAK,KAC5B,IAAM00F,GAAS1nG,KAAKkoG,QAAQ0hB,UAAU,GAAI5E,EAAAwC,OAAOyB,UACjDvhB,GAAOnoF,SAASL,EAAIlf,KAAKylH,MAAM1lH,GAAK2nG,EAAOmiB,QAC3CniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAM3lH,GAAKC,KAAK6lH,aAAeljF,EAAI+kE,EAAOoiB,QAEnE9pH,KAAK2pH,UAAU5pH,GAAGiT,KAAK00F,GACvB1nG,KAAKmmH,kBAAkBl0G,SAASy1F,IAIxC,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAAK,CACrCC,KAAK0pH,YAAY12G,QACjB,KAAK,GAAI2vB,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAc,EAAGhjF,IACtC3iC,KAAK0pH,YAAY3pH,GAAGiT,KAAK,QAK3BuwG,YAAAziH,UAAA+lH,iBAAV,SAA2BH,EAAmBqD,GAC1C,GAAoD,OAAhD/pH,KAAKmmG,eAAeugB,GAAWqD,GAAuB,CACtD,GAAMxpH,GAAKP,KAAK2mH,aAAaD,GAAWxe,QAAQ6hB,GAE1CriB,EAAS1nG,KAAKkoG,QAAQ0hB,UAAUrpH,EAAK,EAAGykH,EAAAwC,OAAOwB,WACrDthB,GAAOnoF,SAASL,EAAIlf,KAAKylH,MAAMiB,GAAahf,EAAOmiB,QACnDniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAMgB,GAAa1mH,KAAK6lH,aAAekE,EAAcriB,EAAOoiB,QAErF9pH,KAAKkmH,iBAAiBj0G,SAASy1F,GAE/B1nG,KAAKmmG,eAAeugB,GAAWqD,GAAeriB,IAI5C6b,YAAAziH,UAAAgmH,mBAAV,SAA6BJ,EAAmBqD,GAC5C,GAAoD,OAAhD/pH,KAAKmmG,eAAeugB,GAAWqD,GAAuB,CACtD,GAAMxpH,GAAKP,KAAK2mH,aAAaD,GAAW1vG,UAAU+yG,EAClD,IAAW,KAAPxpH,EACA,OAAO,CAGX,IAAMmnG,GAAS1nG,KAAKkoG,QAAQ0hB,UAAUrpH,EAAK,EAAGykH,EAAAwC,OAAOwB,WAqBrD,OApBAthB,GAAOnoF,SAASL,EAAIlf,KAAKylH,MAAMiB,GAAahf,EAAOmiB,QACnDniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAMgB,GAAa1mH,KAAK6lH,aAAekE,EAAcriB,EAAOoiB,QACrFpiB,EAAOsiB,YAAYhqH,KAAKkoG,SACpBz5F,EAAAyB,cAAc+nE,kBAEkD,MAA5DnD,EAAAmF,eAAeF,WAAkB,MAAE2sC,GAAW5uD,YACoC,MAAlFgd,EAAAmF,eAAeF,WAAkB,MAAE2sC,GAAW5uD,WAA+B,oBACkB,MAA/Fgd,EAAAmF,eAAeF,WAAkB,MAAE2sC,GAAW5uD,WAA+B,mBAAEiyD,IAE/EriB,EAAOuiB,kBACHn1C,EAAAmF,eAAeF,WAAkB,MAAE2sC,GAAW5uD,WAA+B,mBAAEiyD,IAIvFriB,EAAOwiB,sBAGXlqH,KAAKkmH,iBAAiBj0G,SAASy1F,GAG0B,IAArD1nG,KAAK2mH,aAAaD,GAAWxe,QAAQ6hB,IAAsB/pH,KAAKmqH,qBAChEziB,EAAOuc,SAAS,gBAChBjkH,KAAKoqH,0BAA0Bp3G,KAAK00F,IAC7B,IAGX1nG,KAAKmmG,eAAeugB,GAAWqD,GAAeriB,GACvC,KAIL6b,YAAAziH,UAAAqpH,kBAAV,WAGI,IAAK,GAFDxwG,GAAQ,EAEH5Z,EAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChC,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAahjF,IACK,IAAnC3iC,KAAK2mH,aAAa5mH,GAAGmoG,QAAQvlE,IAC7BhpB,GAKZ,OAAOA,GAAQ,GAGT4pG,YAAAziH,UAAA8lH,oBAAV,SAA8BF,EAAmBqD,GACO,OAAhD/pH,KAAKmmG,eAAeugB,GAAWqD,KAC/B/pH,KAAKkoG,QAAQmiB,aAAarqH,KAAKmmG,eAAeugB,GAAWqD,IAEzD/pH,KAAKmmG,eAAeugB,GAAWqD,GAAe,OAI5CxG,YAAAziH,UAAAymH,mBAAV,SAA6B+C,EAAkBC,GAC3C,IAAK,GAAIxqH,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5C,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IAAK,CACpD,GAAM+kE,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EAEvB,QAAX+kE,GAAmB1nG,KAAKwqH,oBAAoBzqH,EAAG4iC,EAAG2nF,KAClD5iB,EAAOuc,SAASqG,GACM,MAAlBtqH,KAAK2pH,WAA6C,MAAxB3pH,KAAK2pH,UAAU5pH,GAAG4iC,IAAY3iC,KAAK2pH,UAAU5pH,GAAG4iC,GAAGshF,SAASqG,GAEtFC,EACAvqH,KAAKimH,sBAAsBh0G,SAASy1F,GAEpC1nG,KAAKkmH,iBAAiBj0G,SAASy1F,MAOzC6b,YAAAziH,UAAA8mH,mBAAV,SAA6B6C,EAAkBH,EAAkBI,GAC7D,GAAMp4C,GAAMtyE,KAAK+mH,YAAY0D,GACzBviB,IAEJ,QAAQ51B,EAAIq4C,SACR,IAAK3oH,GAAAkD,cAAcC,KAAKylH,WAAWjD,QAC/Bzf,EAAUloG,KAAK6qH,4BAA4BJ,EAAUH,EACrD,MACJ,KAAKtoH,GAAAkD,cAAcC,KAAKylH,WAAWE,QAC/B5iB,EAAUloG,KAAK+qH,4BAA4BN,EAAUH,EACrD,MACJ,KAAKtoH,GAAAkD,cAAcC,KAAKylH,WAAWI,IAC/B9iB,EAAUloG,KAAKirH,wBAAwBR,EAAUH,EACjD,MACJ,SACIpiB,EAAUloG,KAAKkrH,2BAA2BT,EAAUH,GAIxDI,GAAYxiB,EAAQh8F,OAAS,GAAKomE,EAAI/0C,OAAS,GAC/Cv9B,KAAK+M,MAAM+S,SAAU,EACrB9f,KAAK+M,MAAMwS,SAASL,EAAIgpF,EAAQ,GAAG3oF,SAASL,EAAIgpF,EAAQ,GAAG2hB,QAC3D7pH,KAAK+M,MAAMwS,SAASH,EAAI8oF,EAAQ,GAAG3oF,SAASH,EAAI8oF,EAAQ,GAAG4hB,QACvDtnH,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD65C,EAAAiG,wBAAwBC,OAAQ,EAChCprH,KAAK+M,MAAMsvB,KAAKnmB,SAAStU,EAAA4L,YAAY89D,OAAOgH,EAAI/0C,OAAQgpC,EAAAsD,WAAWwB,UAAUn9D,eAE7Eg3G,EAAAiG,wBAAwBC,OAAQ,EAChCprH,KAAK+M,MAAMsvB,KAAKzd,WAAWxc,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa2R,EAAI/0C,OAAOrvB,gBAGtFlO,KAAK+M,MAAM+S,SAAU,GAInByjG,YAAAziH,UAAA+pH,4BAAV,SAAsCJ,EAAkBH,GACpD,GAAMh4C,GAAMtyE,KAAK+mH,YAAY0D,GACvBviB,IAEN,IAAqB,MAAjBloG,KAAKgmH,SAML,IAAK,GALCngH,GAAak/G,EAAAsG,oBAAoBC,0BACnCh5C,EAAIi5C,UACJvrH,KAAKgmH,SAASwF,mBAGTzrH,EAAI,EAAGA,EAAI8F,EAAWqG,OAAQnM,IACnC,GAAoB,IAAhBuyE,EAAI1xD,KAAK7gB,IAAYC,KAAKwqH,oBAAoBzqH,EAAG8F,EAAW9F,GAAIuqH,GAAW,CAC3E,GAAM5iB,GAAS1nG,KAAKmmG,eAAepmG,GAAG8F,EAAW9F,GACjD2nG,GAAOuc,SAASqG,GAEhBtqH,KAAKkmH,iBAAiBj0G,SAASy1F,GAE/BQ,EAAQl1F,KAAK00F,GAKzB,MAAOQ,IAGDqb,YAAAziH,UAAAiqH,4BAAV,SAAsCN,EAAkBH,GAIpD,IAAK,GAHCh4C,GAAMtyE,KAAK+mH,YAAY0D,GACvBviB,KAEGnoG,EAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChC,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAahjF,IAClC,GAAiC,KAA5B2vC,EAAI1xD,KAAK7gB,GAAM,GAAK4iC,IAAa3iC,KAAKwqH,oBAAoBzqH,EAAG4iC,EAAG2nF,GAAW,CAC5E,GAAM5iB,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EACtC+kE,GAAOuc,SAASqG,GAEhBtqH,KAAKkmH,iBAAiBj0G,SAASy1F,GAE/BQ,EAAQl1F,KAAK00F,GAKzB,MAAOQ,IAGDqb,YAAAziH,UAAAmqH,wBAAV,SAAkCR,EAAkBH,GAIhD,IAAK,GAHCh4C,GAAMtyE,KAAK+mH,YAAY0D,GACvBviB,KAEGnoG,EAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChC,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAahjF,IAClC,GAAiC,KAA5B2vC,EAAI1xD,KAAK7gB,GAAM,GAAK4iC,IAAa3iC,KAAKwqH,oBAAoBzqH,EAAG4iC,EAAG2nF,GAAW,CAC5E,GAAM5iB,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EACtC+kE,GAAOuc,SAASqG,GAEhBtqH,KAAKkmH,iBAAiBj0G,SAASy1F,GAE/BQ,EAAQl1F,KAAK00F,GAKzB,MAAOQ,IAGDqb,YAAAziH,UAAAoqH,2BAAV,SAAqCT,EAAkBH,GAEnD,UAGM/G,YAAAziH,UAAA0pH,oBAAV,SAA8B9D,EAAmBqD,EAAqBO,GAClE,OAAO,GAOD/G,YAAAziH,UAAA2lH,eAAV,SAAyBT,GACrBhmH,KAAKgmH,SAAWA,EAEhBhmH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQqB,YAEjChpH,KAAKgmH,SAASkD,qBAGR3F,YAAAziH,UAAA4mH,oBAAV,SAA8B4C,GACL,MAAjBtqH,KAAKgmH,UACLhmH,KAAKgmH,SAAS/B,SAASqG,IAIrB/G,YAAAziH,UAAAgnH,mBAAV,SAA6B2C,EAAkBH,GAC3C,GAAqB,MAAjBtqH,KAAKgmH,SAAkB,CACvB,GAAM1zC,GAAMtyE,KAAK+mH,YAAY0D,EAEzBn4C,GAAIq4C,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWjD,UAC1C2C,IAAaxF,EAAA6C,QAAQE,SAAuC,IAA5B7nH,KAAK+mH,YAAY76G,OACjDlM,KAAKgmH,SAAS/B,SAASa,EAAA6C,QAAQ8D,cAAen5C,EAAIi5C,WAElDvrH,KAAKgmH,SAAS/B,SAASqG,EAAUh4C,EAAIi5C,cAU3ChI,YAAAziH,UAAAgjG,iBAAV,SAA2ByiB,GACvBvmH,KAAK0rH,oBAAsB,GAAItP,GAAA0B,iBAC/B99G,KAAK0rH,oBAAoBztG,KAAO,aAE5BsoG,EACAA,EAAYt0G,SAASjS,KAAK0rH,qBAE1B1rH,KAAKiS,SAASjS,KAAK0rH,qBAGnB1rH,KAAK4pG,OAAc,QACnB5pG,KAAK+M,MAAQ/M,KAAK4pG,OAAc,MAEhC5pG,KAAK0rH,oBAAoBz5G,SAASjS,KAAK+M,QAG3C/M,KAAK2rH,aAEL,KAAK,GAAI5rH,GAAI,EAAGA,EAAIC,KAAK+lH,eAAe75G,OAAQnM,IAC5C,GAAIC,KAAK4pG,OAAO5pG,KAAK+lH,eAAehmH,IAAK,CACrC,GAAI6rH,GAAY5rH,KAAK4pG,OAAO5pG,KAAK+lH,eAAehmH,GAChD6rH,GAAU9rG,SAAU,EACpB8rG,EAAU13G,GAAG,WAAYlU,KAAK6rH,oBAAoBx3G,KAAKrU,OACvD4rH,EAAU13G,GAAG+wG,EAAA6G,gBAAgBC,kBAAmB/rH,KAAKgsH,oBAAoB33G,KAAKrU,OAE9EA,KAAK2rH,WAAW34G,KAAK44G,GAErB5rH,KAAK0rH,oBAAoBz5G,SAAS25G,GAI1C5rH,KAAKopH,sBAAwB,KAC7BppH,KAAKqpH,0BAA2B,GAG1B9F,YAAAziH,UAAAkmH,gBAAV,WACIhnH,KAAKopH,sBAAwB,KAC7BppH,KAAKqpH,0BAA2B,CAEhC,KAAK,GAAItpH,GAAI,EAAGA,EAAIC,KAAK2rH,WAAWz/G,OAAQnM,IAAK,CAC7C,GAAM6rH,GAAY5rH,KAAK2rH,WAAW5rH,EAClC6rH,GAAU9rG,SAAU,EACpB8rG,EAAUl2G,SAIR6tG,YAAAziH,UAAAknH,eAAV,WACIhoH,KAAKopH,sBAAwBppH,KAAKisH,oBAClCjsH,KAAKqpH,0BAA2B,CAEhC,IAAMuC,GAAY5rH,KAAK2rH,WAAW3rH,KAAKopH,sBACvCwC,GAAU9rG,SAAU,EAChBtd,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD65C,EAAAiG,wBAAwBC,OAAQ,EAChCQ,EAAUvvF,KAAKnmB,SAAStU,EAAA4L,YAAY89D,OAAOtrE,KAAK+zF,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,eAEjFg3G,EAAAiG,wBAAwBC,OAAQ,EAChCQ,EAAUvvF,KAAKr8B,KAAK+zF,cAIlBwvB,YAAAziH,UAAAwoH,cAAV,WACI,GAAkC,MAA9BtpH,KAAKopH,sBAA+B,CACpC,GAAMwC,GAAY5rH,KAAK2rH,WAAW3rH,KAAKopH,sBACvCwC,GAAU9rG,SAAU,EAChBtd,EAAAgC,WAAWC,kBAAkBiJ,UAAmC,MAAvB64D,EAAAsD,WAAWwB,UACpD65C,EAAAiG,wBAAwBC,OAAQ,EAChCQ,EAAUM,UAAUh2G,SAAStU,EAAA4L,YAAY89D,OAAOtrE,KAAK+zF,WAAYxtB,EAAAsD,WAAWwB,UAAUn9D,eAEtFg3G,EAAAiG,wBAAwBC,OAAQ,EAChCQ,EAAUM,UAAUlsH,KAAK+zF,aAG7B/zF,KAAKopH,sBAAwB,KAC7BppH,KAAKqpH,0BAA2B;GAI9B9F,YAAAziH,UAAAmrH,kBAAV,WACI,MAAOjsH,MAAKinH,wBAGN1D,YAAAziH,UAAA+qH,oBAAV,WACI7rH,KAAKqpH,0BAA2B,EAEhCrpH,KAAKyX,KAAK8rG,YAAYC,uBAGhBD,YAAAziH,UAAAkrH,oBAAV,WACIhsH,KAAKopH,sBAAwB,KAC7BppH,KAAKinH,uBAAyB,EAE9BjnH,KAAKioH,mBAOC1E,YAAAziH,UAAA2oH,KAAV,WACI,IAAK,GAAI1pH,GAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChC,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IAAK,CACpD,GAAM+kE,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EAGlC+kE,IACAA,EAAOykB,mBAAqBnH,EAAAwC,OAAOwB,YACnCthB,EAAOykB,mBAAqBnH,EAAAwC,OAAOyB,WAEnCvhB,EAAOuc,SAASe,EAAAwC,OAAO4E,SAAW,IAAMrsH,GAKpDC,KAAKonH,WAAW7D,YAAY8D,KAAMrnH,KAAKqsH,iBAGjC9I,YAAAziH,UAAAwmH,oBAAV,WACI,MAAO,KAGD/D,YAAAziH,UAAAurH,aAAV,WACI,MAAO,MAGD9I,YAAAziH,UAAAwrH,2BAAV,WACI,MAAO,IA11BY/I,YAAAC,qBAA+B,4BAE/BD,YAAAG,kBAA4B,yBAMzBH,YAAA8D,KAAe,OAEf9D,YAAAmF,UAAoB,YAhBlDnF,YAAA3nG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBxFwtyBxB28F,cwFvtyByB9B,EAAAoD,uBAApBxkH,GAAAkjH,YAAWA,EAm2BXljH,EAAA8kH,uBAOTC,OAAQ,SAORC,QAAS,YxFk3wBP,SAAS/kH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GyF7wyBjEna,EAAAzB,EAAgC,GAChCosH,EAAApsH,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAC/Bmc,EAAAnc,EAA2B,IAQ3BwnH,EAAA,SAAAxkH,GAA6B5B,EAAAomH,QAAAxkH,EAczB,SAAAwkH,WACIxkH,EAAA1C,KAAAT,MAHJA,KAAA6gD,OAAiB,EAiBrB,MALI8mE,SAAA7mH,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEnB9d,KAAK6gD,OAASvkC,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAmsH,kBAAkBC,QAASzsH,KAAK6gD,SAzBjF8mE,QAAA+E,WAAqB,SAErB/E,QAAAqB,WAAqB,SACrBrB,QAAAF,UAAoB,QACpBE,QAAAE,QAAkB,MAClBF,QAAAI,aAAuB,YACvBJ,QAAA8D,cAAwB,aACxB9D,QAAAgF,gBAA0B,eAC1BhF,QAAAc,UAAoB,QAX/Bd,QAAA/rG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBzF6xyBxB+gG,UyF5xyBqB4E,EAAAK,cAAhBvsH,GAAAsnH,QAAOA,EA+BPtnH,EAAAmsH,mBAMTC,QAAS,WzFkwyBP,SAASnsH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G0F9zyBjEna,EAAAzB,EAAyD,GACzDqb,EAAArb,EAA4B,IAE5B0sH,EAAA1sH,EAAuD,IACvD6mB,EAAA7mB,EAA6B,IAC7B2sH,EAAA3sH,EAAiC,IACjCiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B4sH,EAAA5sH,EAAgC,IAChC6sH,EAAA7sH,EAA8B,IAC9B8sH,EAAA9sH,EAA4B,IAa5BysH,EAAA,SAAAzpH,GAAmC5B,EAAAqrH,cAAAzpH,EAwB/B,SAAAypH,iBACIzpH,EAAA1C,KAAAT,MAHIA,KAAAktH,YAAc,EAMlBltH,aAAY,OACZA,KAAKmtH,QAAS,EAEdntH,KAAKygH,MAAQrtG,EAAAa,iBAAiB,SA8VtC,MA3VIpT,QAAAmD,eAAW4oH,cAAA9rH,UAAA,e1F2xyBNmD,I0F3xyBL,WACI,MAAOjE,MAAKotH,c1F6xyBXxwG,I0FtxyBL,SAAuB7P,GACnB/M,KAAKotH,aAAergH,G1FwxyBnB5I,YAAY,EACZC,cAAc,I0F9xyBnBvD,OAAAmD,eAAW4oH,cAAA9rH,UAAA,gB1FiyyBNmD,I0FjyyBL,WACI,MAAOjE,MAAKqtH,e1FmyyBXzwG,I0F5xyBL,SAAwB7P,GACpB/M,KAAKqtH,cAAgBtgH,G1F8xyBpB5I,YAAY,EACZC,cAAc,I0F5xyBnBvD,OAAAmD,eAAW4oH,cAAA9rH,UAAA,e1F+xyBNmD,I0F/xyBL,WACI,MAAwB,OAAjBjE,KAAKyyD,UAA4C,MAAxBzyD,KAAKyyD,SAASm3C,Q1FiyyB7CzlG,YAAY,EACZC,cAAc,I0F/xyBZwoH,cAAA9rH,UAAAwsH,oBAAP,WACI,MAAIttH,MAAKutH,YACEvtH,KAAKyyD,SAASm3C,OAGlB,MAGJgjB,cAAA9rH,UAAAoiH,sBAAP,SAA6BjlG,GACzB,MAAIje,MAAKutH,YACEvtH,KAAKyyD,SAASm3C,OAAO3rF,GAGzB,MASX2uG,cAAA9rH,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAmtH,wBAAwBnmG,SAC1CrnB,KAAK6R,MAAqBmV,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAAmtH,wBAAwBnmG,QACtE,MAAdrnB,KAAK6R,OAEuB,MAAxB7R,KAAK6R,MAAM2lC,YAEP15B,EAAKU,aAAane,EAAAmtH,wBAAwBC,QAC1C7rH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAmtH,wBAAwBC,QAEnEztH,KAAKyyD,SAAWzyD,KAAK6R,MAAM2lC,UAAUl6B,QAErCtd,KAAKyyD,SAAWzyD,KAAK6R,MAAM2lC,UAE/Bx3C,KAAKiS,SAASjS,KAAKyyD,YAS3B30C,EAAKU,aAAane,EAAAmtH,wBAAwBva,OAC1CjzG,KAAKikH,SAASnmG,EAAKe,aAAaxe,EAAAmtH,wBAAwBva,QAIhE2Z,cAAA9rH,UAAAkd,aAAA,SAAaF,GACT3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAmtH,wBAAwBva,OAC1CjzG,KAAKikH,SAASnmG,EAAKe,aAAaxe,EAAAmtH,wBAAwBva,OAGxDn1F,EAAKU,aAAa,eACc,MAA5BouG,cAAcc,YAAkD,IAA5Bd,cAAcc,YAClD1tH,KAAKikH,SAAS2I,cAAcc,aAWxCd,cAAA9rH,UAAA6sH,QAAA,SAAQt1G,GACJ,MAAqB,OAAdrY,KAAK6R,OAAqC,MAApB7R,KAAK6R,MAAM8gG,OAAiB3yG,KAAK6R,MAAM8gG,MAAMt6F,IAS9Eu0G,cAAA9rH,UAAA8sH,QAAA,SAAQv1G,GACJ,MAAkB,OAAdrY,KAAK6R,OAAqC,MAApB7R,KAAK6R,MAAM8gG,OAAiB3yG,KAAK6R,MAAM8gG,MAAMt6F,GAC5DrY,KAAK6R,MAAM8gG,MAAMt6F,GAErB,MAGJu0G,cAAA9rH,UAAAqrH,eAAP,WACI,MAAOnsH,eAUX4sH,cAAA9rH,UAAAmjH,SAAA,SAAS5rG,EAAWw1G,GAKhB,GALgB,SAAAA,OAAA,GACZA,GACA7tH,KAAK8tH,oBAGS,MAAd9tH,KAAK6R,OAAqC,MAApB7R,KAAK6R,MAAM8gG,OAAiB3yG,eAAcqY,IAC9C,MAAdrY,KAAKygH,QACLzgH,KAAKygH,MAAMtP,mBAAmB/9F,EAAAe,iBAAiBC,UAC/CpU,KAAKygH,MAAM/qG,QAGX1V,KAAK2tH,QAAQt1G,IAAI,CACjB,GAAIyF,GAAgB9d,KAAK6R,MAAM8gG,MAAMt6F,EACrC,IAAY,MAARyF,EAAc,CAOVA,EAAKU,aAAa,kBAClBxe,KAAKyX,KAAKm1G,cAAcmB,gBAG5B,IAAI1kH,GAAO,MACXrJ,cAAYqY,CAGZ,KAFA,GAAIiR,GAAgBxL,EAAKyL,kBACrBykG,KACW,MAAR1kG,GACH0kG,EAAIh7G,KAAKsW,EAAKpL,UACd7U,EAAUrJ,KAAKyyD,SAASm3C,OAAOtgF,EAAKpL,UACrB,MAAX7U,IACAA,EAAQyW,SAAU,EAWlBzW,EAAQ2U,aAAasL,IAazBA,EAAOA,EAAKG,kBAGhB,KAAK,GAAIpkB,KAAOrF,MAAKyyD,SAASm3C,OAAQ,CAClC5pG,KAAKyyD,SAASm3C,OAAOvkG,GAAK8rG,oBAG1B,KAAK,GADDpzB,IAAiB,EACZh+E,EAAY,EAAGA,EAAIiuH,EAAI9hH,OAAQnM,IAChCsF,IAAQ2oH,EAAIjuH,KACZg+E,GAAQ,EAGXA,KACG/9E,KAAKyyD,SAASm3C,OAAOvkG,YAAgB0nH,GAAAkB,gBACpCjuH,KAAKyyD,SAASm3C,OAAOvkG,GAAgCqQ,OAC/C1V,KAAKyyD,SAASm3C,OAAOvkG,YAAgB8E,MAAKyc,cACjD5mB,KAAKyyD,SAASm3C,OAAOvkG,GAAKya,SAAU,EAC7B9f,KAAKyyD,SAASm3C,OAAOvkG,YAAgB2nH,GAAAkB,cAC3CluH,KAAKyyD,SAASm3C,OAAOvkG,GAA8BqQ,OAC7C1V,KAAKyyD,SAASm3C,OAAOvkG,YAAgB4nH,GAAAkB,aAC3CnuH,KAAKyyD,SAASm3C,OAAOvkG,GAA4BqQ,QAI9D,GACIoI,EAAKU,aAAaquG,EAAAuB,0BAA0BC,YAC5CruH,KAAK2tH,QAAQ7vG,EAAKe,aAAaguG,EAAAuB,0BAA0BC,YAEzD,GAAIvwG,EAAKU,aAAaquG,EAAAuB,0BAA0BE,OAAQ,CACpD,GAAIC,GAAa,CACbzwG,GAAKU,aAAane,EAAAmtH,wBAAwBgB,UAC1CD,EAAavuH,KAAKyuH,4BAA4B3wG,IAGlD9d,KAAKygH,MAAMvsG,GACPd,EAAAe,iBAAiBC,SACjBpU,KAAKikH,SAAS5vG,KAAKrU,KAAM8d,EAAKe,aAAaguG,EAAAuB,0BAA0BC,aAEd,YAAvDvwG,EAAKe,aAAaguG,EAAAuB,0BAA0BE,OAC5CtuH,KAAKygH,MAAM9qG,MAAM3V,KAAKktH,YAAcqB,GAEpCvuH,KAAKygH,MAAM9qG,MACPO,SAAS4H,EAAKe,aAAaguG,EAAAuB,0BAA0BE,QAAUC,OAGhEzwG,GAAKU,aAAaquG,EAAAuB,0BAA0BM,UACnDrlH,EAAUrJ,KAAKyyD,SAASm3C,OAAO9rF,EAAKe,aAAaguG,EAAAuB,0BAA0BM,UACvErlH,GACAA,EAAQ6K,GACJ44G,EAAA6B,iBAAiB5C,kBACjB/rH,KAAKikH,SAAS5vG,KACVrU,KACA8d,EAAKe,aAAaguG,EAAAuB,0BAA0BC,YAC5C,KAKZruH,KAAKikH,SAASnmG,EAAKe,aAAaguG,EAAAuB,0BAA0BC,gBAG9D,IAAIvwG,EAAKU,aAAaquG,EAAAuB,0BAA0BE,OAAQ,CACpD,GAAIC,GAAa,CACbzwG,GAAKU,aAAane,EAAAmtH,wBAAwBgB,UAC1CD,EAAavuH,KAAKyuH,4BAA4B3wG,IAGlD9d,KAAKygH,MAAMvsG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK8tH,kBAAkBz5G,KAAKrU,OACV,YAAvD8d,EAAKe,aAAaguG,EAAAuB,0BAA0BE,OAC5CtuH,KAAKygH,MAAM9qG,MAAM3V,KAAKktH,YAAcqB,GAEpCvuH,KAAKygH,MAAM9qG,MACPO,SAAS4H,EAAKe,aAAaguG,EAAAuB,0BAA0BE,QAAUC,OAGhEzwG,GAAKU,aAAaquG,EAAAuB,0BAA0BM,WACnDrlH,EAAUrJ,KAAKyyD,SAASm3C,OAAO9rF,EAAKe,aAAaguG,EAAAuB,0BAA0BM,UACvErlH,GACAA,EAAQ6K,GAAG44G,EAAA6B,iBAAiB5C,kBAAmB/rH,KAAK8tH,kBAAkBz5G,KAAKrU,SAY/F6tH,GACA7tH,KAAK8tH,qBASLlB,cAAA9rH,UAAA2tH,4BAAR,SAAoC3wG,GAChC,GAAI3W,GAAS,EAETynH,EAAYhtH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAmtH,wBAAwBgB,QACjF,IAAII,EAAU1iH,OAAS,EAAG,CACtB,GAAIgyB,GAAM0wF,EAAU,GAChBn+E,EAAM,CAEe,KAArBm+E,EAAU1iH,SACVukC,EAAMm+E,EAAU,GAChB1wF,EAAMuS,EAAMm+E,EAAU,GAAKn+E,EAAMm+E,EAAU,IAG/CznH,EAAS4X,KAAK+0B,MAAM84E,cAAciC,UAAUp+E,EAAKvS,IAGrD,MAAO/2B,IAOJylH,cAAA9rH,UAAAguH,eAAP,SAAsBr7F,GAClBzzB,KAAKktH,YAAcz5F,GASRm5F,cAAAiC,UAAf,SAAyBp+E,EAAavS,GAClC,MAAOnf,MAAKE,UAAYif,EAAMuS,GAAOA,GAQzCm8E,cAAA9rH,UAAAgtH,kBAAA,WACI9tH,KAAKyX,KAAKm1G,cAAcb,oBAQ5Ba,cAAA9rH,UAAAwc,MAAA,WACI,GAAMjU,GAAyB,GAAIujH,cAiBnC,OAfAvjH,GAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QAEvBzW,EAAQopD,SAAWzyD,KAAKyyD,SAASn1C,QACjCjU,EAAQ4I,SAAS5I,EAAQopD,UAEzBppD,UAAerJ,aAEfqJ,EAAQuU,eACDvU,GAzXJujH,cAAAb,kBAA4B,oBAC5Ba,cAAAmB,gBAA0B,kBAE1BnB,cAAAc,WAAqB,GANhCd,cAAAhxG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB1F8jzBxBgmG,gB0F7jzB2BpxG,EAAAG,YAAtBtb,GAAAusH,cAAaA,EAmYbvsH,EAAAmtH,yBAOTva,KAAM,OACNwa,MAAO,QACPsB,WAAY,YACZjoG,MAAO,QAQPO,MAAO,QAOPmnG,OAAQ,W1FiryBN,SAASluH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G2FhnzBjEna,EAAAzB,EAAgC,GAChC6uH,EAAA7uH,EAAsB,IACtBi8G,EAAAj8G,EAAiC,IACjCic,EAAAjc,EAA+B,IAwB/B8uH,EAAA,SAAA9rH,GAAiC5B,EAAA0tH,YAAA9rH,EAO7B,SAAA8rH,eACI9rH,EAAA1C,KAAAT,MAEAA,KAAK2yG,SA2Cb,MAlCIsc,aAAAnuH,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,EAGb,KADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAK,WACDle,KAAKw3C,UAAY,GAAI4kE,GAAA0B,iBACrB99G,KAAKw3C,UAAU71C,OAAO2nB,EACtB,MACJ,KAAK,QAED,IADA,GAAI4lG,GAAoB5lG,EAAKC,kBACV,MAAZ2lG,GACCA,EAAS1wG,aAAane,EAAA+tH,0BAA0Bnb,OAC0B,OAAtEjzG,KAAK2yG,MAAMuc,EAASrwG,aAAaxe,EAAA+tH,0BAA0Bnb,SAC3DjzG,KAAK2yG,MAAMuc,EAASrwG,aAAaxe,EAAA+tH,0BAA0Bnb,OAASic,GAY5EA,EAAWA,EAASzlG,mBAIhCH,EAAOA,EAAKG,qBAnDxBwlG,YAAArzG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,Q3FoozBxBglG,c2FnozByBD,EAAA/kG,MAApB5pB,GAAA4uH,YAAWA,CAyDX5uH,GAAA+tH,2BACTnb,KAAM,OACNyb,QAAS,UACTL,UAAW,WACXC,MAAO,U3FqlzBL,SAAShuH,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G4FprzBjEna,EAAAzB,EAAwC,GACxCic,EAAAjc,EAA+B,IAO/B8pB,EAAA,mBAAAA,UA2BA,MAlBIA,OAAAnpB,UAAAa,OAAA,SAAOmc,GACc,MAAb9d,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,WAUf+L,MAAAnpB,UAAAsX,IAAV,SAAcC,KAtBlB4R,MAAArO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,Q5FiszBxBA,S4FhszBK5pB,GAAA4pB,MAAKA,G5FwszBZ,SAAS3pB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G6F5tzBjEna,EAAAzB,EAAwE,GACxE6mB,EAAA7mB,EAA6B,IAE7Bic,EAAAjc,EAA+B,IAC/Bgc,EAAAhc,EAA6B,IAC7Bkc,EAAAlc,EAAqD,IACrD+B,EAAA/B,EAAgC,GAGhCmc,GAFAnc,EAA4B,IAE5BA,EAA2B,KAC3BgvH,EAAAhvH,EAA4B,IAY5BwuH,EAAA,SAAAxrH,GAAsC5B,EAAAotH,iBAAAxrH,EAqClC,SAAAwrH,oBACI,GAAIS,IAAqCjlH,KAAKklH,QAAQC,MAEtDnsH,GAAA1C,KAAAT,KAAMovH,GAAc,GACpBjlH,KAAK4nB,OAAOw9F,OAAOhmH,IAAIvJ,KAAKwvH,OAAQxvH,KAAMmK,KAAKslH,gBAAgBC,MAG/D1vH,KAAK2vH,YAAc,EACnB3vH,KAAK4vH,mBAAoB,EACzB5vH,KAAK0pB,KAAO,SAEZ1pB,KAAKuc,SAAU,EACfvc,KAAKwc,aAAc,EAEnBxc,KAAKiZ,KAAUjZ,KAAKyc,cAAa,IAAI7a,EAAAqG,MAAM8Q,eAimCnD,MAtnCIlY,QAAAmD,eAAI2qH,iBAAA7tH,UAAA,e7FuszBCmD,I6FvszBL,WACI,MAAOjE,MAAK2c,c7FyszBXxY,YAAY,EACZC,cAAc,I6F5qzBZuqH,iBAAA7tH,UAAA0uH,OAAP,SAAcK,GACN7vH,KAAKsrF,SACLnoF,EAAArC,UAAM0uH,OAAM/uH,KAAAT,KAAC6vH,IAIdlB,iBAAA7tH,UAAAa,OAAP,SAAcmc,GACV9d,KAAK+d,aAAaD,GAClB9d,KAAKge,aAAaF,IASd6wG,iBAAA7tH,UAAAid,aAAR,SAAqBD,GAsBjB,GArBA9d,KAAKgd,gBAAgB,aAWJ,MAAbhd,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,WAUjBJ,EAAKU,aAAane,EAAAyvH,2BAA2BzoG,QAC7CvJ,EAAKU,aAAane,EAAAyvH,2BAA2BC,WAEzCjyG,EAAKU,aAAane,EAAAyvH,2BAA2BzoG,OAC7CrnB,KAAKgwH,OAAyBhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAAyvH,2BAA2BzoG,QACxFvJ,EAAKU,aAAane,EAAAyvH,2BAA2BC,UACpD/vH,KAAKgwH,OAAyBhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAAyvH,2BAA2BC,UAGhF,MAAf/vH,KAAKgwH,QAAgB,CAiBrB,GAhB8B,MAA1BhwH,KAAKgwH,OAAOC,WACZjwH,KAAK2vH,YAAc3vH,KAAKgwH,OAAOC,WAE/BjwH,KAAK2vH,YAAc,KAGK,MAAxB3vH,KAAKgwH,OAAOE,SACZlwH,KAAKmwH,UAAYnwH,KAAKgwH,OAAOE,SAE7BlwH,KAAKmwH,UAAY,KAGG,MAApBnwH,KAAKgwH,OAAOt6G,OACZ1V,KAAKowH,MAAQpwH,KAAKgwH,OAAOt6G,MAGC,KAA1B1V,KAAKgwH,OAAOpE,UAAkB,CAC9B,GAAI78G,GAAO,OACPshH,IACJ,IAAsB,MAAlBrwH,KAAKmwH,UACL,IAAK,GAAIpwH,GAAIC,KAAK2vH,YAAa5vH,GAAKC,KAAKmwH,UAAWpwH,IAAK,CACrD,GAAIuN,GAAMtN,KAAK+iE,SAAShjE,EAAG,EAC3BgP,GAAU5E,KAAK+E,MAAMC,aAAanP,KAAKgwH,OAAOpE,UAAYt+G,GAC3C,MAAXyB,IACIhP,GAAKC,KAAK2vH,cACV3vH,KAAK+O,QAAUA,GAGnBshH,EAASr9G,KAAKjE,QAYnB,CAQH,GAAI6D,GAAQ5S,KAAK+iE,SAAS/iE,KAAK2vH,YAAa,EAC5C5gH,GAAU5E,KAAK+E,MAAMC,aAAanP,KAAKgwH,OAAOpE,UAAYh5G,GAC3C,MAAX7D,IACA/O,KAAK+O,QAAUA,EACfshH,EAASr9G,KAAKjE,IAItB/O,KAAKqwH,SAAWA,EACZrwH,KAAKqwH,SAASnkH,OAAS,IACvBlM,KAAKy2B,WAAaz2B,KAAKswH,mBAAmBj8G,KAAKrU,MAE/CA,KAAK6tF,MAAO,EACZ7tF,KAAKuwH,eAAiB,EACtBvwH,KAAK0pB,KAAO,SACZ1pB,KAAK2pB,UAAYxf,KAAKqmH,YAAYC,OAClCzwH,KAAKme,MAAQ,EACbne,KAAK0wH,UAAW,GAYA,MAApB1wH,KAAKgwH,OAAOniC,OACZ7tF,KAAK6tF,KAAO7tF,KAAKgwH,OAAOniC,MAGD,MAAvB7tF,KAAKgwH,OAAOn5F,UACZ72B,KAAK0wH,SAAW1wH,KAAKgwH,OAAOn5F,SAGP,MAArB72B,KAAKgwH,OAAOW,QACZ3wH,KAAKuwH,eAAiBvwH,KAAKgwH,OAAOW,OAAS3wH,KAAKgwH,OAAOn5F,WAAe,IAGlD,MAApB72B,KAAKgwH,OAAOtmG,OACZ1pB,KAAK0pB,KAAO1pB,KAAKgwH,OAAOtmG,MAGC,MAAzB1pB,KAAKgwH,OAAOrmG,YACZ3pB,KAAK2pB,UAAYwlG,EAAAyB,YAAYC,aAAa7wH,KAAKgwH,OAAOrmG,YAGjC,MAArB3pB,KAAKgwH,OAAO7xG,QACZne,KAAKme,MAAQne,KAAKgwH,OAAO7xG,OASrC,GAAIL,EAAKU,aAAane,EAAAyvH,2BAA2B7vG,MAAO,CAEpD,IADA,GAAIqJ,GAAgBxL,EAAKhG,cAAcyR,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKpL,WAAaJ,EAAKe,aAAaxe,EAAAyvH,2BAA2B7vG,MAAO,CACtE,GAAIuJ,GAA6B,GAAIrN,GAAAgE,YACrCqJ,GAAa7nB,OAAO2nB,GACpBtpB,KAAK4gB,KAAO4I,EAEhBF,EAAOA,EAAKG,mBAGC,MAAbzpB,KAAK4gB,KAUb,GAAI9C,EAAKU,aAAane,EAAAyvH,2BAA2BjvG,aAAc,CAC3D,GAAIC,GAAQ5e,EAAAsD,gBAAgByJ,uBACxB6O,EAAKe,aAAaxe,EAAAyvH,2BAA2BjvG,aAGpC,OAATC,IACA9gB,KAAK+gB,WAAa,GAAI5W,MAAK6W,OAAOF,GAC9BhD,EAAKU,aAAane,EAAAyvH,2BAA2B7uG,iBAC7CjhB,KAAK+gB,WAAWxB,SAASL,EAAIN,WACzBd,EAAKe,aAAaxe,EAAAyvH,2BAA2B7uG,iBAGjDnD,EAAKU,aAAane,EAAAyvH,2BAA2B5uG,iBAC7ClhB,KAAK+gB,WAAWxB,SAASH,EAAIR,WACzBd,EAAKe,aAAaxe,EAAAyvH,2BAA2B5uG,iBAGhDpD,EAAKU,aAAane,EAAAyvH,2BAA2B3uG,oBAC9CnhB,KAAKiS,SAASjS,KAAK+gB,YACnB/gB,KAAK4gB,KAAO5gB,KAAK+gB,aAczBjD,EAAKU,aAAane,EAAAyvH,2BAA2BvyB,SAC7Cv9F,KAAKuwH,eACD3xG,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BvyB,SAAWv9F,KAAK0wH,YAAgB,KAa7F/B,iBAAA7tH,UAAAkd,aAAP,SAAoBF,GAChB,IAAKA,EAED,WADA9d,MAAK0hB,SAAS,wCA2ClB,IA7BK5D,EAAKU,aAAane,EAAAyvH,2BAA2BgB,mBAC8C,GAA5FlvH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAyvH,2BAA2BgB,oBAEtEz0G,EAAAe,OAAOC,aAAard,MAGxBA,KAAK4vH,kBAAoBtzG,EAAA8B,WAAW2B,uBAChCjC,EACAzd,EAAAyvH,2BAA2BiB,mBAC3B/wH,KAAK4vH,mBAGL9xG,EAAKU,aAAane,EAAAyvH,2BAA2BkB,QACc,MAAvDlzG,EAAKe,aAAaxe,EAAAyvH,2BAA2BkB,MAC7ChxH,KAAK0pB,KAAO,KACkD,YAAvD5L,EAAKe,aAAaxe,EAAAyvH,2BAA2BkB,MACpDhxH,KAAK0pB,KAAOxT,SAASy4G,iBAAiBsC,YAAa,IAEnDjxH,KAAK0pB,KAAOxT,SAAS4H,EAAKe,aAAaxe,EAAAyvH,2BAA2BkB,MAAO,KAIjFhxH,KAAKme,MAAQ7B,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyvH,2BAA2BvxG,MAAOve,KAAKme,OAEtFL,EAAKU,aAAane,EAAAyvH,2BAA2BoB,UAC7ClxH,KAAKmxH,OAAOjyG,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BoB,SACxElxH,KAAKmxH,OAAO/xG,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BoB,UAGxEpzG,EAAKU,aAAane,EAAAyvH,2BAA2BrxG,UAAW,CACxD,GAAIC,GAAWpC,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BrxG,SAAUze,KAAK0e,SAC7F1e,MAAK0e,SAAW1e,KAAK2e,gBAAgBD,GAMrCZ,EAAKU,aAAane,EAAAyvH,2BAA2BhxG,iBAEzChB,EAAKe,aAAaxe,EAAAyvH,2BAA2BhxG,kBAC7Cze,EAAAyvH,2BAA2BhxG,iBAE3B9e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAI1Djf,KAAKyR,MAAMyN,EAAI5C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyvH,2BAA2B3wG,QAASnf,KAAKyR,MAAMyN,GACpGlf,KAAKyR,MAAM2N,EAAI9C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyvH,2BAA2BzwG,QAASrf,KAAKyR,MAAM2N,GAEhGtB,EAAKU,aAAane,EAAAyvH,2BAA2BxwG,SAC7Ctf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BxwG,QACvEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BxwG,SAG3Etf,KAAKsrB,KAAKpM,EAAI5C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyvH,2BAA2BsB,OAAQpxH,KAAKsrB,KAAKpM,GACjGlf,KAAKsrB,KAAKlM,EAAI9C,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyvH,2BAA2BuB,OAAQrxH,KAAKsrB,KAAKlM,GAEjGpf,KAAKuf,SAASL,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BrwG,EAAGzf,KAAKuf,SAASL,GAClGlf,KAAKuf,SAASH,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BpwG,EAAG1f,KAAKuf,SAASH,GAClGpf,KAAK2f,MAAMT,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BlwG,QAAS5f,KAAK2f,MAAMT,GAClGlf,KAAK2f,MAAMP,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BjwG,QAAS7f,KAAK2f,MAAMP,GAClGpf,KAAK8f,QAAUxD,EAAA8B,WAAW2B,uBAAuBjC,EAAMzd,EAAAyvH,2BAA2B9vG,QAAShgB,KAAK8f,SAG5FhC,EAAKU,aAAane,EAAAyvH,2BAA2BwB,WAC7C1vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAyvH,2BAA2BwB,YAEtEtxH,KAAKuxH,WAAY,EACjBvxH,KAAKwxH,UAELxxH,KAAKuxH,WAAY,EAIjBzzG,EAAKU,aAAane,EAAAyvH,2BAA2B2B,OAC7C7vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAyvH,2BAA2B2B,SAEtEzxH,KAAKowH,OAAQ,EACbpwH,KAAK0wH,UAAW,EAEZ5yG,EAAKU,aAAane,EAAAyvH,2BAA2B4B,UAC7C9vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAyvH,2BAA2B4B,YAEtE1xH,KAAK0wH,SAAW9uH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAyvH,2BAA2B4B,UACtF1xH,KAAKuwH,eAAiBvwH,KAAKuwH,gBAAkBvwH,KAAK0wH,YAAgB,IAGlE5yG,EAAKU,aAAane,EAAAyvH,2BAA2BvyB,SAC7Cv9F,KAAKuwH,eACD3xG,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BvyB,SAAWv9F,KAAK0wH,YAAgB,IAGhG1wH,KAAKwxH,UAML1zG,EAAKU,aAAane,EAAAyvH,2BAA2BvyB,SAC7Cv9F,KAAKuwH,eACD3xG,WAAWd,EAAKe,aAAaxe,EAAAyvH,2BAA2BvyB,SAAWv9F,KAAK0wH,YAAgB,IAM5F5yG,EAAKU,aAAane,EAAAyvH,2BAA2B6B,OAE7C3xH,KAAK4xH,OAAO17G,SAAS4H,EAAKe,aAAaxe,EAAAyvH,2BAA2B6B,QAMlE7zG,EAAKU,aAAane,EAAAyvH,2BAA2B+B,aAE7C7xH,KAAK4xH,OAAO17G,SAAS4H,EAAKe,aAAaxe,EAAAyvH,2BAA2B+B,cAGtE7xH,KAAKshB,iBAAiBxD,GACtB9d,KAAKwhB,cAAc1D,GACnB9d,KAAKuhB,iBAAiBzD,GACtB9d,KAAKqhB,cAAcvD,GACnB9d,KAAKyhB,SAAS3D,IAgClB6wG,iBAAA7tH,UAAA0wH,OAAA,SAAO5+G,GAAA,SAAAA,UACE5S,KAAKuxH,WAAcvxH,KAAKsrF,UACrBtrF,KAAK4vH,mBAA0C,IAArB5vH,KAAK2vH,aAAuC,MAAlB3vH,KAAKmwH,YACzDnwH,KAAK2vH,YAAc5wG,KAAKC,MAAMD,KAAKE,SAAWjf,KAAKmwH,YAGnDnwH,KAAK0wH,SACL1wH,KAAKo8B,YAAYp8B,KAAKmwH,WAEtBnwH,KAAKo8B,YAAYp8B,KAAK2vH,eASlChB,iBAAA7tH,UAAA8wH,OAAA,SAAOE,GACgB,MAAfA,EACA9xH,KAAKs8B,YAAYw1F,GAEb9xH,KAAK0wH,SACL1wH,KAAKs8B,YAAYt8B,KAAKmwH,WAEtBnwH,KAAKs8B,YAAYt8B,KAAK2vH,cAYlChB,iBAAA7tH,UAAAixH,aAAA,WACI,MAAO/xH,OAQH2uH,iBAAA7tH,UAAAwvH,mBAAR,WACItwH,KAAKyX,KAAKk3G,iBAAiB5C,oBASxB4C,iBAAA7tH,UAAAwgB,iBAAP,SAAwBxD,GAAxB,GAAAtE,GAAAxZ,IACI,KACK8d,EAAKU,aAAane,EAAAyvH,2BAA2B/sG,oBAC7CjF,EAAKU,aAAane,EAAAyvH,2BAA2B9sG,kBAE9C,OAAO,CAGX,IAAIC,GACAC,EAEAC,EAAgC7G,EAAA8B,WAAW0D,sBAC3ChE,EACAzd,EAAAyvH,2BAA2B1sG,wBAC3B,KAEAD,IAAyB9iB,EAAAyvH,2BAA2BzsG,8BAA8BpB,UAClFgB,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2B/sG,mBAAmBX,IACpG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASL,IAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2B9sG,mBAAmBZ,IACpG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASH,MAGrC6D,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2B/sG,mBACrFG,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2B9sG,mBAGzF,IAAIgvG,GAAyB,KACzBC,EAAyB,KACzB5jG,EAAc,IAElB,IACIvQ,EAAKU,aAAane,EAAAyvH,2BAA2BoC,0BAC7Cp0G,EAAKU,aAAane,EAAAyvH,2BAA2BqC,yBAC/C,CACEH,EAAUpwH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BoC,0BAC9ED,EAAUrwH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BqC,0BAC9E9jG,GAAWvI,UAEX,KAAK,GAAI/lB,GAAI,EAAGA,EAAIgf,KAAK0xB,IAAIuhF,EAAQ9lH,OAAQ+lH,EAAQ/lH,QAASnM,IAC1DsuB,EAAOvI,OAAO9S,MAAOkM,EAAG8yG,EAAQjyH,GAAIqf,EAAG6yG,EAAQlyH,KAIvD,GAAMujB,GAAwBL,MACxBM,EAAwBL,MACxBX,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAyvH,2BAA2BtsG,oBAC3B,MAEEf,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAyvH,2BAA2BrsG,wBAC3B,KAEEd,EAAqBrG,EAAA8B,WAAWoB,mBAClC1B,EACAzd,EAAAyvH,2BAA2BpsG,qBAC3B,GAEEb,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAyvH,2BAA2BnsG,oBAC3B,KAGJtH,GAAAe,OAAOwG,cAAc5jB,MAAQsjB,SAAQC,SAAQhB,YAAWE,gBAAeE,aAAYE,YAAWwL,YAU3FsgG,iBAAA7tH,UAAA0gB,cAAP,SAAqB1D,GAArB,GACQsG,GACAC,EACAC,EAHR9K,EAAAxZ,KAIQukB,IAgBJ,IAdIzG,EAAKU,aAAane,EAAAyvH,2BAA2BtrG,iBAC7CJ,EAAcxiB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BtrG,iBAGlF1G,EAAKU,aAAane,EAAAyvH,2BAA2BrrG,iBAC7CJ,EAAcziB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BrrG,iBAGlF3G,EAAKU,aAAane,EAAAyvH,2BAA2BprG,eAC7CJ,EAAaqqG,iBAAiBhqG,8BAC1B7G,EAAKe,aAAaxe,EAAAyvH,2BAA2BprG,eAIjDJ,GAAcA,EAAWpY,OACzBqY,EAAcD,MACX,IAAIF,GAAeC,EAClBD,EAAYlY,SAAWmY,EAAYnY,SACnCqY,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAGiF,EAAYtkB,WAIxB,IAAIqkB,EACPG,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAG5F,EAAK/H,MAAM2N,SAGnB,KAAIiF,EAQP,OAAO,CAPPE,GAAcF,EAAYjC,IAAI,SAACyC,EAAqB9kB,GAChD,OACImf,EAAG1F,EAAK/H,MAAMyN,EACdE,EAAGyF,KAOf,GAAMtC,GAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAyvH,2BAA2BhrG,iBAC3B,MAEErC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAyvH,2BAA2B/qG,qBAC3B,KAEEpC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2B9qG,kBAAmB,GACvGnC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAyvH,2BAA2B7qG,iBAC3B,KAGJ5I,GAAAe,OAAOkH,WAAWtkB,MAAQukB,cAAahC,YAAWE,gBAAeE,aAAYE,eAS1E8rG,iBAAA7tH,UAAAygB,iBAAP,SAAwBzD,GACpB,IAAKA,EAAKU,aAAane,EAAAyvH,2BAA2BjsG,gBAC9C,OAAO,CAGX,IAAIC,GAA+BliB,EAAAsgB,WAAWC,YAC1CrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BjsG,iBAG3CE,EAAyBD,MAEzBvB,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAyvH,2BAA2B9rG,oBAC3B,MAEEvB,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAyvH,2BAA2B7rG,wBAC3B,KAEEtB,EAAqBrG,EAAA8B,WAAWoB,mBAClC1B,EACAzd,EAAAyvH,2BAA2B5rG,qBAC3B,GAEErB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAyvH,2BAA2B3rG,oBAC3B,KAGJ9H,GAAAe,OAAO0G,cAAc9jB,MAAQ+jB,UAASxB,YAAWE,gBAAeE,aAAYE,eASzE8rG,iBAAA7tH,UAAAugB,cAAP,SAAqBvD,GACjB,IAAKA,EAAKU,aAAane,EAAAyvH,2BAA2BnuG,aAC9C,OAAO,CAGX,IAAIC,GAA4BhgB,EAAAsgB,WAAWC,YACvCrE,EAAKe,aAAaxe,EAAAyvH,2BAA2BnuG,cAG3CW,EAAwBV,MAExBW,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAyvH,2BAA2BttG,iBAC3B,MAEEC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAyvH,2BAA2BptG,qBAC3B,KAEEC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAyvH,2BAA2BltG,kBAAmB,GACvGC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAyvH,2BAA2BhtG,iBAC3B,KAGJzG,GAAAe,OAAOwE,WAAW5hB,MAAQsiB,SAAQC,YAAWE,gBAAeE,aAAYE,eAQrE8rG,iBAAA7tH,UAAA2gB,SAAP,SAAgB3D,GACZ,GAAIA,EAAKU,aAAanC,EAAA6I,iBAAiBC,OAGnC,IAAK,GAFDC,GAAwBxjB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBC,QAE7EplB,EAAY,EAAGA,EAAIqlB,EAAOlZ,OAAQnM,IAAK,CAE5C,IAAK+d,EAAKU,aAAanC,EAAA6I,iBAAiBI,aAAevlB,GACnD,OAAO,CAGX,IAAIwlB,GAAgBH,EAAOrlB,GAErBwkB,EAA6BvkB,KAAKwlB,kBACpCD,EACA3jB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBI,aAAevlB,KAEvE0iB,EAA+B7gB,EAAAsgB,WAAWC,YAC5CrE,EAAKe,aAAaxC,EAAA6I,iBAAiBO,eAAiB1lB,IAAM,OAExDwiB,EAA2B3gB,EAAAsgB,WAAWmD,YACxCvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,WAAa3lB,IAAM,UAEpD4iB,EAA4B/gB,EAAAsgB,WAAWC,YACzCrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,YAAc5lB,IAAM,KAErD8iB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzB,EAAA6I,iBAAiBU,WAAa7lB,EAC9B,KAGS,UAATwlB,IACAA,EAAQ,UACRH,EAAOrlB,GAAK,UACZA,KAGJsc,EAAAe,OAAOyI,YAAY7lB,MAAQulB,QAAOhB,cAAahC,YAAWE,gBAAeE,aAAYE,cAI7F,OAAO,GAQH8rG,iBAAA7tH,UAAA0kB,kBAAR,SAA0BD,EAAeO,GACrC,GAAIvB,KAEU,WAAVgB,IACAA,EAAQ,UAKZ,KAAK,GAFDxY,GADAgZ,EAA0BR,EAAMS,MAAM,KAGjCjmB,EAAY,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IAAK,CAC5C,GAAI+H,GAAUge,EAAO/lB,EACrB,QAAQ+H,EAAQA,EAAQoE,OAAS,IAC7B,IAAK,IACsB,GAAnB6Z,EAAS7Z,QACTa,EAAQ/M,KAAK+lB,EAAS,IACF,aAAhBA,EAAS,KACThZ,EAAQ/M,KAAKimB,gBAAgBlZ,IAEjCwX,EAAYvR,KAAKjG,IACS,GAAnBgZ,EAAS7Z,QAChBqY,EAAYvR,KAAKhT,KAAK+lB,EAAS,IAAIA,EAAS,IAGhD,MACJ,KAAK,IACDhZ,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,SACIwX,EAAYvR,KAAK4L,WAAW9W,KAIxC,MAAOyc,IAQIoqG,iBAAAhqG,8BAAf,SAA6CwB,GACzC,MAAOA,GACF/Y,QAAQ,MAAO,IACf4Y,MAAM,KACN5D,IAAI,SAACgE,GACF,MAAO,QAAQ1S,KAAK0S,GAAcA,EAAWllB,MAAM,MAAO8kB,MAAM,MAAQI,EAAYA,KAEvFhE,IAAI,SAACgE,GACF,OAASlH,EAAGN,WAAWwH,EAAW,IAAKhH,EAAGR,WAAWwH,EAAW,QAUpEuoG,iBAAA7tH,UAAAiiE,SAAR,SAAiB1W,EAAa5lD,GAE1B,IADA,GAAI4R,GAAIg0C,EAAM,GACPh0C,EAAEnM,OAASzF,GAAM4R,EAAI,IAAMA,CAClC,OAAOA,IAQXs2G,iBAAA7tH,UAAAwc,MAAA,WACI,GAAIjU,GAA4B,GAAIslH,iBA2CpC,OAzCAtlH,GAAQ2mH,OAAShwH,KAAKgwH,OACtB3mH,EAAQsmH,YAAc3vH,KAAK2vH,YAC3BtmH,EAAQ8mH,UAAYnwH,KAAKmwH,UACzB9mH,EAAQ+mH,MAAQpwH,KAAKowH,MACrB/mH,EAAQumH,kBAAoB5vH,KAAK4vH,kBACjCvmH,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQiiB,KAAKpM,EAAIlf,KAAKsrB,KAAKpM,EAC3B7V,EAAQiiB,KAAKlM,EAAIpf,KAAKsrB,KAAKlM,EAC3B/V,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQsgB,UAAY3pB,KAAK2pB,UACzBtgB,EAAQqgB,KAAO1pB,KAAK0pB,KACpBrgB,EAAQ4U,KAAOje,KAAKie,KACpB5U,EAAQ8U,MAAQne,KAAKme,MAEA,MAAjBne,KAAKqwH,UAAoBrwH,KAAKqwH,SAASnkH,OAAS,IAChD7C,EAAQ0F,QAAU/O,KAAK+O,QACvB1F,EAAQgnH,SAAWrwH,KAAKqwH,SACxBhnH,EAAQotB,WAAaptB,EAAQinH,mBAAmBj8G,KAAKhL,GAClC,MAAfrJ,KAAKgwH,QAAsC,MAApBhwH,KAAKgwH,OAAOniC,OACnCxkF,EAAQwkF,KAAO7tF,KAAKgwH,OAAOniC,MAG/BxkF,EAAQknH,eAAiBvwH,KAAKuwH,gBAMlClnH,EAAQmoH,OAASxxH,KAAKwxH,OAAOn9G,KAAKhL,GAClCA,EAAQuoH,OAAS5xH,KAAK4xH,OAAOv9G,KAAKhL,GAClCA,EAAQqM,KAAO1V,KAAK0V,KAAKrB,KAAKhL,GAG9BA,EAAQuU,eAEDvU,GAMDslH,iBAAA7tH,UAAA8c,aAAV,WACI5d,KAAK6d,iBAMT8wG,iBAAA7tH,UAAA+c,cAAA,WACI7d,KAAKgd,gBAAgB,mBACrBhd,KAAKuc,SAAU,GAcToyG,iBAAA7tH,UAAAyc,yBAAV,WACIvd,KAAKwd,6BAMTmxG,iBAAA7tH,UAAA0c,0BAAA,WACIxd,KAAKgd,gBAAgB,4BAErB,IAAIS,IACAN,UAAU,EAGd,IAAqB,MAAjBnd,KAAKmd,UAAoBnd,KAAKmd,SAASjR,OAAS,EAChD,IAAK,GAAInM,GAAIC,KAAKmd,SAASjR,OAAS,EAAGnM,GAAK,EAAGA,IACnB,MAApBC,KAAKmd,SAASpd,IACbC,KAAKmd,SAASpd,GAAWgd,QAAQU,EAK9Czd,MAAK0d,kBAOCixG,iBAAA7tH,UAAAkc,gBAAV,SAA0BW,KAsB1BgxG,iBAAA7tH,UAAAic,QAAA,SAAQ/X,GACJhF,KAAKgd,gBAAgB,WAEjBpb,EAAAqG,MAAMC,kBAAkBlD,KACxBA,EAAU2pH,iBAAiB1xG,iBAG/Bjd,KAAKkd,gBAAgBlY,GAEhBpD,EAAAqG,MAAMC,kBAAkBlI,KAAKmd,WAC9Bha,EAAArC,UAAMic,QAAOtc,KAAAT,MASjBA,KAAKwc,aAAc,GAObmyG,iBAAA7tH,UAAAoc,gBAAV,SAA0BlY,GACtBhF,KAAKy2B,WAAa,KAClBz2B,KAAKqwH,UAAYlmH,KAAKklH,QAAQC,OAE9BjzG,EAAAe,OAAOC,aAAard,OAQxB2uH,iBAAA7tH,UAAA4b,aAAA,WAMI,MAAO,IAOXiyG,iBAAA7tH,UAAAsxH,UAAA,WAWI,MAAO,IAOXvxH,OAAAmD,eAAW2qH,iBAAA7tH,UAAA,U7F0yyBNmD,I6F1yyBL,WACI,MAAOjE,MAAKuc,S7F4yyBXpY,YAAY,EACZC,cAAc,I6F1yyBnBvD,OAAAmD,eAAW2qH,iBAAA7tH,UAAA,a7F6yyBNmD,I6F7yyBL,WACI,MAAOjE,MAAKwc,a7F+yyBXrY,YAAY,EACZC,cAAc,I6FzyyBnBvD,OAAAmD,eAAW2qH,iBAAA7tH,UAAA,O7F4yyBNmD,I6F5yyBL,WACI,MAAOjE,MAAKiZ,M7F8yyBX9U,YAAY,EACZC,cAAc,I6FxyyBnBvD,OAAAmD,eAAW2qH,iBAAA7tH,UAAA,iB7F2yyBNmD,I6F3yyBL,WACI,MAAQjE,MAAa8c,mB7F6yyBpB3Y,YAAY,EACZC,cAAc,I6FtyyBZuqH,iBAAA7tH,UAAA6d,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAQzBsoG,iBAAA7tH,UAAAmlB,gBAAP,SAAuBK,GACnB,MAAOA,IAAW,IAAMvH,KAAKsH,KAO1BsoG,iBAAA7tH,UAAAuxH,qBAAP,SAA4B1B,GACxB3wH,KAAKuwH,eAAiBI,GAMhBhC,iBAAA7tH,UAAAwxH,gBAAV,SAA0BpxD,EAAWpjD,KAoC3B6wG,iBAAA7tH,UAAAsX,IAAV,SAAcC,KAWJs2G,iBAAA7tH,UAAA4gB,SAAV,SAAmBrJ,KA5oCZs2G,iBAAA5C,kBAA4B,oBAE5B4C,iBAAAsC,YAAsB,SAsBtBtC,iBAAA1xG,iBACHE,UAAU,GA5BlBwxG,iBAAA/yG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB7F850BxB+nG,mB6F750B8BxkH,KAAKooH,OAAOC,eAArCnyH,GAAAsuH,iBAAgBA,EAspChBtuH,EAAAyvH,4BAOTvxG,MAAO,QACPoD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBACtBI,iBAAkB,iBAClBouG,OAAQ,SAQRrwG,YAAa,aACbM,iBAAkB,iBAClBF,cAAe,cACfC,cAAe,cAMfowG,SAAU,WACVvC,WAAY,YACZjoG,MAAO,QAQP7G,KAAM,OAONL,QAAS,SAOTC,QAAS,SAMT4xG,KAAM,OACN1uG,iBAAkB,iBAClBC,iBAAkB,iBAClBkvG,wBAAyB,uBACzBC,wBAAyB,uBACzB3uG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAEd0B,oBAAqB,oBAIrBotG,mBAAoB,mBAOpBW,QAAS,UAOTjzG,SAAU,WASVoF,eAAgB,gBAChBG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBC,oBAAqB,oBAUrBO,YAAa,aACbF,cAAe,cACfC,cAAe,cACfK,iBAAkB,iBAClBE,kBAAmB,kBACnBD,qBAAsB,qBACtBE,iBAAkB,iBAQlB9F,QAAS,SAQTE,QAAS,SAOTC,MAAO,QAOP8xG,OAAQ,QAORC,OAAQ,QAORvyG,eAAgB,gBAChB+yG,WAAY,YACZt0B,MAAO,QAMPo0B,KAAM,OACNtqG,MAAO,QACP0oG,OAAQ,SAORiB,KAAM,OAONhxG,QAAS,UACT8wG,iBAAkB,kBAOlBrxG,EAAG,IAOHC,EAAG,M7FooyBD,SAASpf,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G8Fvg1BjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAW/BsyH,EAAA,SAAAtvH,GAAiC5B,EAAAkxH,YAAAtvH,EAK7B,SAAAsvH,eACItvH,EAAA1C,KAAAT,MAEAA,KAAKkhE,KAAO,GA0LpB,MAhLWuxD,aAAA3xH,UAAAa,OAAP,SAAcmc,GACV9d,KAAK+d,aAAaD,GAClB9d,KAAKge,aAAaF,IAStB20G,YAAA3xH,UAAAid,aAAA,SAAaD,GACQ,MAAb9d,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,UAGjBJ,EAAKU,aAAane,EAAAqyH,sBAAsBC,QACxC3yH,KAAK6R,MAAM+gH,WAAa90G,EAAKe,aAAaxe,EAAAqyH,sBAAsBC,QAOjEF,YAAA3xH,UAAAkd,aAAP,SAAoBF,GACZA,EAAKU,aAAane,EAAAqyH,sBAAsBG,QACxC7yH,KAAKkhE,KAAOpjD,EAAKe,aAAaxe,EAAAqyH,sBAAsBG,OAGpD/0G,EAAKU,aAAane,EAAAqyH,sBAAsBI;AAIxCh1G,EAAKU,aAAane,EAAAqyH,sBAAsBK,eAYxCj1G,EAAKU,aAAane,EAAAqyH,sBAAsBM,QACxChzH,KAAK6R,MAAMm3B,SAAW9yB,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsBM,QAGvEl1G,EAAKU,aAAane,EAAAqyH,sBAAsBn0G,SACxCve,KAAKme,MAAQS,WAAWd,EAAKe,aAAaxe,EAAAqyH,sBAAsBn0G,SAGhET,EAAKU,aAAane,EAAAqyH,sBAAsBj0G,YACxCze,KAAK0e,SAAWxI,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsBj0G,YAGjEX,EAAKU,aAAane,EAAAqyH,sBAAsB5zG,iBACpChB,EAAKe,aAAaxe,EAAAqyH,sBAAsB5zG,kBAAoBze,EAAAqyH,sBAAsB5zG,iBAClF9e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAItDnB,EAAKU,aAAane,EAAAqyH,sBAAsBvzG,WACxCnf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAqyH,sBAAsBvzG,WAGlErB,EAAKU,aAAane,EAAAqyH,sBAAsBrzG,WACxCrf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAqyH,sBAAsBrzG,WAGlEvB,EAAKU,aAAane,EAAAqyH,sBAAsBpzG,SACxCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAqyH,sBAAsBpzG,QAClEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAqyH,sBAAsBpzG,SAGlExB,EAAKU,aAAane,EAAAqyH,sBAAsBjzG,KACxCzf,KAAKuf,SAASL,EAAIhJ,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsBjzG,KAGnE3B,EAAKU,aAAane,EAAAqyH,sBAAsBhzG,KACxC1f,KAAKuf,SAASH,EAAIlJ,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsBhzG,KAGnE5B,EAAKU,aAAane,EAAAqyH,sBAAsB9yG,WACxC5f,KAAK2f,MAAMT,EAAIhJ,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsB9yG,WAGhE9B,EAAKU,aAAane,EAAAqyH,sBAAsB7yG,WACxC7f,KAAK2f,MAAMP,EAAIlJ,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsB7yG,WAGhE/B,EAAKU,aAAane,EAAAqyH,sBAAsB1yG,WACxChgB,KAAK8f,QAAUle,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAqyH,sBAAsB1yG,WAGhFlC,EAAKU,aAAane,EAAAqyH,sBAAsB1B,QACc,MAAlDlzG,EAAKe,aAAaxe,EAAAqyH,sBAAsB1B,MACxChxH,KAAK6R,MAAMohH,KAAO,KAElBjzH,KAAK6R,MAAMohH,KAAO/8G,SAAS4H,EAAKe,aAAaxe,EAAAqyH,sBAAsB1B,MAAO,MAetFyB,YAAA3xH,UAAA8c,aAAA,WACI5d,KAAK6d,iBAMC40G,YAAA3xH,UAAA+c,cAAV,WACI7d,KAAKgd,gBAAgB,kBACrBhd,KAAKuc,SAAU,GAYTk2G,YAAA3xH,UAAAkc,gBAAV,SAA0BW,KAY1B9c,OAAAmD,eAAWyuH,YAAA3xH,UAAA,iB9Fm80BNmD,I8Fn80BL,WACI,MAAQjE,MAAa8c,mB9Fq80BpB3Y,YAAY,EACZC,cAAc,I8F/70BnBvD,OAAAmD,eAAWyuH,YAAA3xH,UAAA,O9Fk80BNmD,I8Fl80BL,WACI,MAAOjE,MAAKiZ,M9Fo80BX9U,YAAY,EACZC,cAAc,I8Fl80BnBquH,YAAA3xH,UAAA4b,aAAA,WAKI,MAAO,IAGX+1G,YAAA3xH,UAAAsxH,UAAA,WAMI,MAAO,IAjMfK,YAAA72G,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB9Fuo1BxB6rG,c8Fto1ByBtoH,KAAK+oH,KAAzB7yH,GAAAoyH,YAAWA,EAwMXpyH,EAAAqyH,uBAOTG,KAAM,OAONF,KAAM,OAINK,KAAM,OAQNF,WAAY,YACZK,kBACIC,KAAM,OACNC,OAAQ,SACRC,MAAO,SASXP,cAAe,eACfQ,qBACIC,OAAQ,SACRC,OAAQ,UAQZl1G,MAAO,QAOPE,SAAU,WAOVK,eAAgB,gBAQhBK,QAAS,SAQTE,QAAS,SAOTC,MAAO,QAOPG,EAAG,IAOHC,EAAG,IAOHE,QAAS,SAOTC,QAAS,SAOTG,QAAS,UAOTgxG,KAAM,S9Fi20BJ,SAAS1wH,EAAQD,EAASF,GAE/B,Y+Fxr1BD,IAAAyB,GAAAzB,EAA4B,GAC5B4C,EAAA5C,EAAwB,GACxBwC,EAAAxC,EAA4B,IAC5B6B,EAAA7B,EAA8B,GAQ9BywH,EAAA,mBAAAA,gBA8DA,MA7DkBA,aAAA8C,eAAd,WACI,GAAI/wH,EAAAoG,YAAYqhE,cAAgBznE,EAAAoG,YAAYqhE,aAAa+5C,MAAQxhH,EAAAoG,YAAYqhE,aAAa+5C,KAAKj4G,OAAS,EACpG,IAAK,GAAInM,GAAI,EAAGA,EAAI4C,EAAAoG,YAAYqhE,aAAa+5C,KAAKj4G,OAAQnM,IAAK,CAC3D,GAAIuyE,GAAM3vE,EAAAoG,YAAYqhE,aAAa+5C,KAAKpkH,EAExC,IACIuyE,EAAIq4C,SAAW3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,SAC7Cx4C,EAAIv+C,MAAQ/xB,EAAAkD,cAAcC,KAAKwuH,QAAQC,SAEnCthD,EAAIxa,WAA4B,gBAChC,OAAO,EAMvB,OAAO,GAGG84D,YAAAiD,kBAAd,SAAgCC,GAAA,SAAAA,OAAA,EAC5B,IAAI//B,GAAapxF,EAAAoG,YAAYqhE,aAAa2pB,UAE1C,IAAI68B,YAAY8C,kBAAoBI,GAC5BnxH,EAAAoG,YAAYqhE,cAAgBznE,EAAAoG,YAAYqhE,aAAa+5C,KAAKj4G,OAAS,EACnE,IAAK,GAAInM,GAAI,EAAGA,EAAI4C,EAAAoG,YAAYqhE,aAAa+5C,KAAKj4G,OAAQnM,IAAK,CAC3D,GAAIuyE,GAAM3vE,EAAAoG,YAAYqhE,aAAa+5C,KAAKpkH,EAGpCuyE,GAAIq4C,SAAW3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,SAC7Cx4C,EAAIv+C,MAAQ/xB,EAAAkD,cAAcC,KAAKwuH,QAAQC,UAEvC7/B,EAAan1E,WAAWhd,EAAA4L,YAAYs+D,SAASioB,EAAYzhB,EAAI/0C,UAM7E,MAAOw2D,IAGG68B,YAAAC,aAAd,SAA2BlnG,GAOvB,MANI5mB,GAAAuF,QAAQmL,OACS,GAAbkW,IACAA,EAAY,GAIbA,GAGGinG,YAAAmD,gBAAd,SAA8BC,GAC1B,GAAIjxH,EAAAuF,QAAQmL,OACS,MAAbugH,EAAmB,CACnB,GAAIC,GAAgBC,KAAKC,UAAUH,EACnCC,GAAgBA,EAAcjuG,MAAM,sBAAsByT,KAAK,oBAC/Du6F,EAAYE,KAAKtgF,MAAMqgF,GAI/B,MAAOD,IAEfpD,cA9DavwH,GAAAuwH,YAAWA,G/F4u1BlB,SAAStwH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GgGnw1BjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bi0H,EAAAj0H,EAA6B,IAC7B+B,EAAA/B,EAAgC,GAChCqb,EAAArb,EAA4B,IAC5Bkc,EAAAlc,EAAuB,IACvB6mB,EAAA7mB,EAA6B,IAC7Bk0H,EAAAl0H,EAA8B,IAC9BiT,EAAAjT,EAA2E,GAC3EgvH,EAAAhvH,EAA4B,IAC5B2sH,EAAA3sH,EAAiC,IAKjC8tH,EAAA,SAAA9qH,GAAqC5B,EAAA0sH,gBAAA9qH,EAwBjC,SAAA8qH,mBACI9qH,EAAA1C,KAAAT,MAEAA,KAAKs0H,SAELt0H,KAAK8Z,OAAS1G,EAAAa,iBAAiB,iBAC/BjU,KAAK8Z,OAAO5F,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKu0H,aAAalgH,KAAKrU,OAEjEA,KAAKw0H,WAAa,EAClBx0H,KAAKy0H,UAAW,EAChBz0H,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK20H,WAAY,EACjB30H,KAAK40H,cAAe,EACpB50H,KAAK60H,WAAa,GAClB70H,KAAK4vH,mBAAoB,EACzB5vH,KAAK80H,SAAW,EAChB90H,KAAK8f,SAAU,EACf9f,KAAKwkC,QAAUxkC,KAmnBvB,MA5mBIiuH,iBAAAntH,UAAAid,aAAA,SAAaD,GACJ9d,KAAKy0H,WACNtxH,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAGfA,EAAKU,aAAane,EAAA00H,0BAA0BC,aAC5Ch1H,KAAK20H,UAAY/yH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BC,aAGtFl3G,EAAKU,aAAane,EAAA00H,0BAA0BE,gBAC5Cj1H,KAAK40H,aAAehzH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BE,gBAGzFn3G,EAAKU,aAAane,EAAA00H,0BAA0BG,cAC5Cl1H,KAAKw0H,WAAat+G,SAAS4H,EAAKe,aAAaxe,EAAA00H,0BAA0BG,cAGvEp3G,EAAKU,aAAane,EAAA00H,0BAA0BhE,sBAC5C/wH,KAAK4vH,kBAAoBhuH,EAAA4I,YAAY8D,aACjCwP,EAAKe,aAAaxe,EAAA00H,0BAA0BhE,uBAKhDjzG,EAAKU,aAAane,EAAA00H,0BAA0B1tG,QAC5CvJ,EAAKU,aAAane,EAAA00H,0BAA0BhF,WAExCjyG,EAAKU,aAAane,EAAA00H,0BAA0B1tG,OAC5CrnB,KAAKgwH,OACDhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAA00H,0BAA0B1tG,QAGpErnB,KAAKgwH,OACDhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAA00H,0BAA0BhF,SAIxE/vH,KAAKm1H,WAAan1H,KAAKgwH,OAAO/xG,MAIlCje,KAAKo1H,kBACLp1H,KAAKy0H,UAAW,IAIxBxG,gBAAAntH,UAAAkd,aAAA,SAAaF,GAUT3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAA00H,0BAA0BM,YAC5Cr1H,KAAK80H,SAAW5+G,SAAS4H,EAAKe,aAAaxe,EAAA00H,0BAA0BM,WACrEr1H,KAAK80H,SAA2B,IAAhB90H,KAAK80H,SAEjB90H,KAAK80H,SAAW,IAChB90H,KAAK80H,SAAW,IAIpBh3G,EAAKU,aAAane,EAAA00H,0BAA0BO,cAC5Ct1H,KAAK60H,WAAa/2G,EAAKe,aAAaxe,EAAA00H,0BAA0BO,aAI9Dx3G,EAAKU,aAAane,EAAA00H,0BAA0BQ,QAC5C3zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BQ,SAErEv1H,KAAK2V,MAAM3V,KAAK20H,UAAW30H,KAAK60H,YAIhC/2G,EAAKU,aAAane,EAAA00H,0BAA0BS,WAC5C5zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BS,YAErEx1H,KAAKy1H,WAIL33G,EAAKU,aAAane,EAAA00H,0BAA0BpD,OAC5C/vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BpD,QAErE3xH,KAAK0V,OAILoI,EAAKU,aAAane,EAAA00H,0BAA0BW,QAC5C9zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BW,SAErE11H,KAAKk8D,QAILp+C,EAAKU,aAAane,EAAA00H,0BAA0BY,QAC5C/zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA00H,0BAA0BY,SAErE31H,KAAKsoB,SAQN2lG,gBAAAntH,UAAAs0H,gBAAP,WACI,GAAmB,MAAfp1H,KAAKgwH,QACqB,MAAtBhwH,KAAKgwH,OAAO4F,QAAkB51H,KAAKgwH,OAAO4F,OAAO1pH,OAAS,EAG1D,IAAK,GAFDyN,GAAgB3Z,KAAK20H,UAAY30H,KAAKgwH,OAAOr2G,MAAQ3Z,KAAKgwH,OAAO6F,oBAE5D91H,EAAY,EAAGA,EAAI4Z,EAAO5Z,IAAK,CACpC,GAAI+1H,GAA4C91H,KAAK+1H,gBAErD/1H,MAAKs0H,MAAMthH,KAAK8iH,KAMxB7H,gBAAAntH,UAAAi1H,eAAR,WACI,GAAID,EAUJ,OATAA,GAAW91H,KAAKg2H,yBAEhBh2H,KAAKi2H,cAAcH,GAEf91H,KAAK40H,eACL50H,KAAKk2H,cAAcJ,GACnB91H,KAAKm2H,aAAaL,IAGfA,GAGH7H,gBAAAntH,UAAAk1H,uBAAR,WACI,GAAmB,MAAfh2H,KAAKgwH,OAAgB,CACrB,GAAI52C,GAA4C,KAC5Cg9C,EAAap2H,KAAKq2H,mBAEtB,IAAID,EAAWjrG,QAAQ,WACnBiuD,EAAW,GAAIg7C,GAAAkC,aAAap0H,EAAAsD,gBAAgByJ,uBAAuBmnH,IACnEh9C,EAASzvD,UAAYwlG,EAAAyB,YAAYC,aAAa7wH,KAAKw0H,gBAChD,IAAI4B,EAAWjrG,QAAQ,WAAc,CACxC,GAAIrN,GAAgB3U,SAASkX,cAAc,YAC3CvC,GAAKxR,aAAa,SAAU8pH,GAC5Bt4G,EAAKxR,aAAa,mBAAoBtM,KAAK4vH,kBAAkB1hH,YAC7DkrE,EAAW,GAAI0zC,GAAA6B,iBACfv1C,EAASz3E,OAAOmc,GAGpB,GAAIy4G,GAAcn9C,EAASo9C,gBAE3B,OADAp9C,GAASz5D,MAAM/C,IAAI25G,EAAY5vH,MAAQ,EAAG4vH,EAAY3vH,OAAS,GACxDwyE,EAGX,MAAO,OAGH60C,gBAAAntH,UAAAu1H,kBAAR,WACI,MAAOr2H,MAAKgwH,OAAO4F,OAAO72G,KAAKC,MAAMD,KAAKE,SAAWjf,KAAKgwH,OAAO4F,OAAO1pH,UAOpE+hH,gBAAAntH,UAAAm1H,cAAR,SAAsBH,GAIlB,MAHA91H,MAAKy2H,cAAcX,GAAU,GAC7BA,EAASY,YAAa,EAEfZ,GAGH7H,gBAAAntH,UAAA21H,cAAR,SAAsBX,EAA2Ch2G,GAC7Dg2G,EAASh2G,QAAUA,EAEfg2G,YAAoBhJ,GAAA6B,mBAChB7uG,EACAg2G,EAAStE,SAETsE,EAASpgH,SAKbu4G,gBAAAntH,UAAAo1H,cAAR,SAAsBJ,GAClB,GAAI5jE,GAAS,EACTC,EAAS,CAEb,QAAQnyD,KAAKgwH,OAAO2G,aAAa5iG,MAC7B,IAAKsgG,GAAAuC,cAAcC,cAIf,GAHA3kE,EAASlyD,KAAKgwH,OAAO2G,aAAaz3G,EAAIH,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAahwH,MAC/EwrD,EAASnyD,KAAKgwH,OAAO2G,aAAav3G,EAAIL,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAa/vH,OAE3E5G,KAAKgwH,OAAO2G,aAAangH,gBAAoBxW,KAAKgwH,OAAO2G,aAAargH,gBAAmB,CACzF,GAAIwgH,GAAU92H,KAAKgwH,OAAO2G,aAAaz3G,EAAIlf,KAAKgwH,OAAO2G,aAAahwH,MAAQ,EACxEowH,EAAU/2H,KAAKgwH,OAAO2G,aAAav3G,EAAIpf,KAAKgwH,OAAO2G,aAAa/vH,OAAS,EACzEowH,EAAeh3H,KAAKgwH,OAAO2G,aAAaM,OAASj3H,KAAKgwH,OAAO2G,aAAangH,WAAa,EACvF0gH,EAAel3H,KAAKgwH,OAAO2G,aAAaQ,OAASn3H,KAAKgwH,OAAO2G,aAAargH,YAAc,EACxF8gH,EAAWr4G,KAAKE,SAAW,EAE3Bm4G,GAEIllE,EADAA,EAAS4kE,EACA92H,KAAK6uH,UACVmI,EAAqD,GAAtCh3H,KAAKgwH,OAAO2G,aAAangH,WACxCsgH,EAA2C,GAAjC92H,KAAKgwH,OAAO2G,aAAahwH,OAG9B3G,KAAK6uH,UAAU,EAAGmI,EAAqD,GAAtCh3H,KAAKgwH,OAAO2G,aAAangH,YAInE27C,EADAA,EAAS4kE,EACA/2H,KAAK6uH,UACVqI,EAAsD,GAAvCl3H,KAAKgwH,OAAO2G,aAAargH,YACxCygH,EAA4C,GAAlC/2H,KAAKgwH,OAAO2G,aAAa/vH,QAG9B5G,KAAK6uH,UAAU,EAAGqI,EAAsD,GAAvCl3H,KAAKgwH,OAAO2G,aAAargH,aAK/Ew/G,EAAS52G,EAAIgzC,EACb4jE,EAAS12G,EAAI+yC,CAEb,MACJ,KAAKkiE,GAAAuC,cAAcS,WACfnlE,EACIlyD,KAAKwkC,QAAQtlB,EACbH,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAahwH,MACzC3G,KAAKgwH,OAAO2G,aAAahwH,MAAQ,EACrCwrD,EACInyD,KAAKwkC,QAAQplB,EACbL,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAa/vH,OACzC5G,KAAKgwH,OAAO2G,aAAa/vH,OAAS,EAEtCkvH,EAAS52G,EAAIgzC,EACb4jE,EAAS12G,EAAI+yC,CACb,MACJ,KAAKkiE,GAAAuC,cAAcU,SAEf,KACJ,KAAKjD,GAAAuC,cAAcW,YACfrlE,EAASlyD,KAAKgwH,OAAO2G,aAAaz3G,EAClCizC,EAASnyD,KAAKgwH,OAAO2G,aAAav3G,CAClC,IAAIo4G,GAAgBz4G,KAAKC,MACrBhf,KAAK6uH,UAAU7uH,KAAKgwH,OAAO2G,aAAac,WAAYz3H,KAAKgwH,OAAO2G,aAAav7E,QAE7Es8E,EAAS13H,KAAK2e,gBAAgB64G,EAGlC,IAAIx3H,KAAKgwH,OAAO2G,aAAagB,YAAc,EAAG,CAC1C,GAAIC,GAAS53H,KAAK6uH,UACd7uH,KAAKgwH,OAAO2G,aAAakB,eACzB73H,KAAKgwH,OAAO2G,aAAagB,aAEzBG,EAAU93H,KAAK6uH,UACf7uH,KAAKgwH,OAAO2G,aAAaoB,gBACzB/3H,KAAKgwH,OAAO2G,aAAaqB,aAG7B9lE,GAASnzC,KAAKC,MAAMhf,KAAKgwH,OAAO2G,aAAaM,OAASW,EAAS74G,KAAKo7B,IAAIu9E,IACxEvlE,EAASpzC,KAAKC,MAAMhf,KAAKgwH,OAAO2G,aAAaQ,OAASW,EAAU/4G,KAAKq7B,IAAIs9E,IAG7E5B,EAAS52G,EAAIgzC,EACb4jE,EAAS12G,EAAI+yC,EACb2jE,EAASp3G,SAAWg5G,IAMzBzJ,gBAAAntH,UAAAm3H,iBAAP,SAAwB5uH,GACpBrJ,KAAKwkC,QAAUn7B,GAOX4kH,gBAAAntH,UAAAq1H,aAAR,SAAqBL,GACjB,GAAIoC,GACAn5G,KAAKC,MAAMD,KAAKE,UAAYjf,KAAKgwH,OAAOmI,QAAUn4H,KAAKgwH,OAAOoI,UAAYp4H,KAAKgwH,OAAOoI,OAE1Fp4H,MAAKq4H,iBAAiBvC,EAAUoC,GAChCl4H,KAAKs4H,kBAAkBxC,EAAUoC,GACjCl4H,KAAKu4H,qBAAqBzC,EAAUoC,GACpCl4H,KAAKw4H,kBAAkB1C,EAAUoC,IAG7BjK,gBAAAntH,UAAAu3H,iBAAR,SAAyBvC,EAA2C2C,GAChE,OAAQz4H,KAAKgwH,OAAO2G,aAAa5iG,MAC7B,IAAKsgG,GAAAuC,cAAcC,cACnB,IAAKxC,GAAAuC,cAAcS,WACfr3H,KAAK04H,yBAAyB5C,EAAU2C,EACxC,MACJ,KAAKpE,GAAAuC,cAAcW,YACfv3H,KAAK24H,uBAAuB7C,EAAU2C,KAK1CxK,gBAAAntH,UAAA43H,yBAAR,SAAiC5C,EAA2C2C,GACxE,GAA8B,MAA1Bz4H,KAAKgwH,OAAO4I,WAAoB,CAEhC,IAAK,GADD7vG,MACKhpB,EAAY,EAAGA,EAAIC,KAAKgwH,OAAO4I,WAAW1sH,OAAQnM,IACvD,GACiC,MAA7BC,KAAKgwH,OAAO4I,WAAW74H,IACQ,MAA/BC,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,GACK,MAA/Blf,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,EAC5B,CACE,GAAIy5G,GAAiB74H,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,EAC3C45G,EAAiB94H,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,CACN,OAArCpf,KAAKgwH,OAAO4I,WAAW74H,GAAGg5H,UAC1BF,EACI95G,KAAKC,MACDD,KAAKE,UAAYjf,KAAKgwH,OAAO4I,WAAW74H,GAAGg5H,QAAU/4H,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,IAC/Elf,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,GAEG,MAArClf,KAAKgwH,OAAO4I,WAAW74H,GAAGi5H,UAC1BF,EACI/5G,KAAKC,MACDD,KAAKE,UAAYjf,KAAKgwH,OAAO4I,WAAW74H,GAAGi5H,QAAUh5H,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,IAC/Epf,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,GAEtC2J,EAAO/V,MAAOkM,EAAG42G,EAAS52G,EAAI25G,EAAQz5G,EAAG02G,EAAS12G,EAAI05G,IAG1D/vG,EAAO7c,OAAS,EAChBmQ,EAAAe,OAAOwG,cAAckyG,GACjBznG,QACIvI,OAAQiD,GAEZzF,QAASwyG,EAAS52G,EAAG42G,EAAS52G,GAC9BqE,QAASuyG,EAAS12G,EAAG02G,EAAS12G,GAC9BqD,cAAeg2G,EACf1+G,QAAQ,EACR4T,iBAAkB3tB,KAAKi5H,eACvBnrG,gBAAiBgoG,GACjB/nG,cAAe,OAEM,IAAlBhF,EAAO7c,QACdmQ,EAAAe,OAAOwG,cAAckyG,GACjBxyG,QAASyF,EAAO,GAAM,EAAGA,EAAO,GAAM,GACtCxF,QAASwF,EAAO,GAAM,EAAGA,EAAO,GAAM,GACtCtG,cAAeg2G,EACf1+G,QAAQ,EACR4T,iBAAkB3tB,KAAKi5H,eACvBnrG,gBAAiBgoG,GACjB/nG,cAAe,SAMvBkgG,gBAAAntH,UAAA63H,uBAAR,SAA+B7C,EAA2C2C,GACtE,GAAIb,GAAS53H,KAAK6uH,UAAU7uH,KAAKgwH,OAAO2G,aAAauC,UAAWl5H,KAAKgwH,OAAO2G,aAAaiB,QACrFE,EAAU93H,KAAK6uH,UAAU7uH,KAAKgwH,OAAO2G,aAAawC,WAAYn5H,KAAKgwH,OAAO2G,aAAamB,SACvFsB,EAASr6G,KAAKC,MAAMhf,KAAKgwH,OAAO2G,aAAaz3G,EAAI04G,EAAS74G,KAAKo7B,IAAI27E,EAASp3G,WAC5E26G,EAASt6G,KAAKC,MAAMhf,KAAKgwH,OAAO2G,aAAav3G,EAAI04G,EAAU/4G,KAAKq7B,IAAI07E,EAASp3G,UAEjFrC,GAAAe,OAAOwG,cAAckyG,GACjBxyG,QAASwyG,EAAS52G,EAAGk6G,GACrB71G,QAASuyG,EAAS12G,EAAGi6G,GACrB52G,cAAeg2G,EACf1+G,QAAQ,EACR4T,iBAAkB3tB,KAAKi5H,eACvBnrG,gBAAiBgoG,GACjB/nG,cAAe,QAIfkgG,gBAAAntH,UAAAw3H,kBAAR,SAA0BxC,EAA2C2C,GACjE,GAA+B,MAA3Bz4H,KAAKgwH,OAAOsJ,YAAqB,CAEjC,IAAK,GADDC,MACKx5H,EAAY,EAAGA,EAAIC,KAAKgwH,OAAOsJ,YAAYptH,OAAQnM,IAAK,CAC7D,GAAIy5H,GAAU,MAEVA,GADAx5H,KAAKgwH,OAAOsJ,YAAYv5H,GAAGmM,OAAS,EAEhC6S,KAAKE,UAAYjf,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,GAAKC,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,IAC5EC,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,GAElBC,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,GAG5Cw5H,EAAYvmH,KAAK,GAAI7I,MAAK8e,MAAMuwG,EAAYA,IAGrB,IAAvBD,EAAYrtH,QACZ4pH,EAASrkH,MAAMyN,EAAIq6G,EAAY,GAAGr6G,EAClC42G,EAASrkH,MAAM2N,EAAIm6G,EAAY,GAAGn6G,GAC3Bm6G,EAAYrtH,OAAS,GAC5BmQ,EAAAe,OAAOkH,WAAWwxG,GACdvxG,YAAag1G,EACb92G,cAAeg2G,EACf1+G,QAAQ,MAMhBk0G,gBAAAntH,UAAAy3H,qBAAR,SAA6BzC,EAA2C2C,GAClC,MAA9Bz4H,KAAKgwH,OAAOyJ,gBAA0Bz5H,KAAKgwH,OAAOyJ,eAAevtH,OAAS,GAC1EmQ,EAAAe,OAAO0G,cAAcgyG,GACjB/xG,SAAU/jB,KAAKgwH,OAAOyJ,eAAe,GAAIz5H,KAAKgwH,OAAOyJ,eAAe,IACpEh3G,cAAeg2G,EACf1+G,QAAQ,KAKZk0G,gBAAAntH,UAAA03H,kBAAR,SAA0B1C,EAA2C2C,GACjE,GAA+B,MAA3Bz4H,KAAKgwH,OAAO0J,YAAqB,CAEjC,IAAK,GADDp3G,MACKviB,EAAY,EAAGA,EAAIC,KAAKgwH,OAAO0J,YAAYxtH,OAAQnM,IACxDuiB,EAAOtP,KAAKhT,KAAKgwH,OAAO0J,YAAY35H,GAExCsc,GAAAe,OAAOwE,WAAWk0G,GACdxzG,OAAQA,EACRG,cAAeg2G,EACf1+G,QAAQ,MASZk0G,gBAAAntH,UAAAyzH,aAAR,WACI,IAAKv0H,KAAKowH,MAAO,CACb,GAAIuJ,IAAY,CACgB,OAA5BxwH,SAAS6gD,iBAAwD,WAA7B7gD,SAAS6gD,kBAC7C2vE,GAAY,GAGZA,GACA35H,KAAK45H,cAGJ55H,KAAK00H,WACN10H,KAAK8Z,OAAOnE,MAAM3V,KAAKgwH,OAAOv8F,QAKlCw6F,gBAAAntH,UAAA+4H,qBAAR,WACI,IAAK,GAAI95H,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3C,IAAKC,KAAKs0H,MAAMv0H,GAAG22H,WACf,MAAO32H,EAIf,WAGIkuH,gBAAAntH,UAAA84H,YAAR,WAGI,IAAK,GAFDjgH,GAAQoF,KAAKC,MAAMhf,KAAKgwH,OAAOr2G,MAAQ3Z,KAAK80H,UAEvC/0H,EAAY,EAAGA,EAAI4Z,EAAO5Z,IAAK,CACpC,GAAI+1H,GAAQ,OACRnyF,EAAgB3jC,KAAK65H,sBAKrBl2F,QACAmyF,EAAW91H,KAAK+1H,iBAEhB/1H,KAAKs0H,MAAMthH,KAAK8iH,IAEhBA,EAAW91H,KAAKs0H,MAAM3wF,GAGV,MAAZmyF,IACAA,EAASY,YAAa,EACtB12H,KAAKiS,SAAS6jH,GACd91H,KAAKy2H,cAAcX,GAAU,GAEzB91H,KAAK40H,aACLv4G,EAAAe,OAAOyN,cAAcirG,EAAStrG,MAE9BnO,EAAAe,OAAOC,aAAay4G,GACpB91H,KAAKk2H,cAAcJ,GACnB91H,KAAKm2H,aAAaL,OAUlC7H,gBAAAntH,UAAA6U,MAAA,SAAMmkH,EAA2BC,GAA3B,SAAAD,OAAA,GAA2B,SAAAC,MAAA,IAC7B/5H,KAAK8f,SAAU,EAGI,MAAf9f,KAAKgwH,SACLhwH,KAAK8Z,OAAOpE,OACZ1V,KAAK20H,UAAYmF,EACjB95H,KAAK60H,WAAakF,EAClB/5H,KAAK00H,UAAYoF,EACjB95H,KAAKowH,OAAQ,EACRpwH,KAAK20H,UAMkB,QAApB30H,KAAK60H,WACL70H,KAAKu0H,eAELv0H,KAAK8Z,OAAOnE,MAAM3V,KAAKgwH,OAAOv8F,OARlCzzB,KAAK8Z,OAAOnE,MAAM3V,KAAKgwH,OAAOv8F,MACN,QAApBzzB,KAAK60H,YACL70H,KAAKu0H,kBAYrBtG,gBAAAntH,UAAA20H,SAAA,WACIz1H,KAAK00H,WAAY,GAGrBzG,gBAAAntH,UAAA4U,KAAA,WACI1V,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK8Z,OAAOpE,OACZ1V,KAAK8f,SAAU,EACf9f,KAAKg6H,mBAGT/L,gBAAAntH,UAAAo7D,MAAA,WACI,IAAK,GAAIn8D,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKk2H,cAAcl2H,KAAKs0H,MAAMv0H,IAC9BC,KAAKy2H,cAAcz2H,KAAKs0H,MAAMv0H,IAAI,IAI1CkuH,gBAAAntH,UAAAwnB,MAAA,WACItoB,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK8Z,OAAOpE,OACZ1V,KAAK8f,SAAU,EACf9f,KAAKi6H,qBAODhM,gBAAAntH,UAAAm4H,eAAR,SAAuBnD,GAEnBA,EAASh2G,SAAU,EACfg2G,YAAoBhJ,GAAA6B,kBACpBmH,EAASpgH,OAGbogH,EAASY,YAAa,GAGlBzI,gBAAAntH,UAAAk5H,gBAAR,WACI,IAAK,GAAIj6H,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKy2H,cAAcz2H,KAAKs0H,MAAMv0H,IAAI,GAClCC,KAAKymB,YAAYzmB,KAAKs0H,MAAMv0H,IAC5BC,KAAKs0H,MAAMv0H,GAAG22H,YAAa,GAI3BzI,gBAAAntH,UAAAm5H,kBAAR,WACI,IAAK,GAAIl6H,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKy2H,cAAcz2H,KAAKs0H,MAAMv0H,IAAI,GAClCC,KAAKymB,YAAYzmB,KAAKs0H,MAAMv0H,IAC5Bsc,EAAAe,OAAOC,aAAard,KAAKs0H,MAAMv0H,IAC/BC,KAAKs0H,MAAMv0H,GAAG22H,YAAa,GAQ3BzI,gBAAAntH,UAAA+tH,UAAR,SAAkBp+E,EAAavS,GAC3B,MAAOnf,MAAKE,UAAYif,EAAMuS,GAAOA,GAYzCw9E,gBAAAntH,UAAAwc,MAAA,WACI,GAAIjU,GAA2B,GAAI4kH,gBACnC5kH,GAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQm7B,QAAUxkC,KAAKwkC,QACvBn7B,EAAQmrH,WAAax0H,KAAKw0H,WAC1BnrH,EAAQsrH,UAAY30H,KAAK20H,UACzBtrH,EAAQurH,aAAe50H,KAAK40H,YAC5B,IAAI92G,GAAgB3U,SAASkX,cAAcrgB,KAAKie,KAIhD,OAHAH,GAAKxR,aAAa,SAAUtM,KAAKm1H,YACjC9rH,EAAQ1H,OAAOmc,GACfzU,EAAQwU,gBACDxU,GA5pBf4kH,gBAAAryG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBhG4u2BxBqnG,kBgG3u2B6BzyG,EAAAG,YAAxBtb,GAAA4tH,gBAAeA,EA+pBf5tH,EAAA00H,2BAyBTG,WAAY,YACZpuG,MAAO,QAIPiqG,mBAAoB,mBACpBxzB,MAAO,QACPy3B,UAAW,WACXM,WAAY,YAIZL,aAAc,cAIdI,SAAU,UAEV1zG,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBAEtBK,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBL,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAGd4B,eAAgB,gBAChBG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBAEtBQ,YAAa,aACbI,iBAAkB,iBAClBC,qBAAsB,qBAQtBsC,MAAO,QACP0oG,OAAQ,SACRmK,aAAc,cACd3E,MAAO,QACPC,SAAU,WACV7D,KAAM,OACN+D,MAAO,QACPC,MAAO,QACPwE,MAAO,QAOPnJ,KAAM,OACNoJ,WAAY,QACZC,UAAW,OACXC,SAAU,MACVC,SAAU,MACVC,gBAAiB,YACjBC,YAAa,SACbC,UAAW,OACXC,OAAQ,IACRC,OAAQ,IACRC,cAAe,UACfC,cAAe,UACfC,WAAY,QACZC,YAAa,SACbC,YAAa,SACbC,qBAAsB,iBACtBC,2BAA4B,sBAC5BC,gBAAiB,YACjBC,kBAAmB,cACnBC,WAAY,QACZC,gBAAiB,YACjBC,YAAa,SACbC,WAAY,QACZC,WAAY,chGoi1BV,SAASp7H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GiG702BjEna,EAAAzB,EAAwE,GACxEic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChCkc,EAAAlc,EAAqD,IAErDgc,EAAAhc,EAA6B,IAC7Bmc,EAAAnc,EAA2B,IAE3BgvH,GADAhvH,EAA4B,IAC5BA,EAA4B,KAU5Bm2H,EAAA,SAAAnzH,GAAkC5B,EAAA+0H,aAAAnzH,EAqB9B,SAAAmzH,cAAYvnH,GACR5L,EAAA1C,KAAAT,KAAM+O,GAHV/O,KAAA6gD,OAAiB,EAIb7gD,KAAK02H,YAAa,EAClB12H,KAAKiZ,KAAUjZ,KAAKyc,cAAa,IAAI7a,EAAAqG,MAAM8Q,eAE3C/Y,KAAK0pB,KAAO,SAklCpB,MAxkCI7oB,QAAAmD,eAAIsyH,aAAAx1H,UAAA,ejGiz2BCmD,IiGjz2BL,WACI,MAAOjE,MAAK2c,cjGmz2BXC,IiGhz2BL,SAAgBC,GACZ7c,KAAK2c,aAAeE,GjGkz2BnB1Y,YAAY,EACZC,cAAc,IiGhz2BZkyH,aAAAx1H,UAAAa,OAAP,SAAcmc,GACV9d,KAAK+d,aAAaD,GAClB9d,KAAKge,aAAaF,IAStBw4G,aAAAx1H,UAAAid,aAAA,SAAaD,GAcT,GAJiB,MAAb9d,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,UAGjBJ,EAAKU,aAAane,EAAAs7H,uBAAuBxB,OAEzCn6H,KAAK+O,QAAU7M,EAAAsD,gBAAgByJ,uBAAuB6O,EAAKe,aAAaxe,EAAAs7H,uBAAuBxB,YAC5F,IAAIr8G,EAAKU,aAAane,EAAAs7H,uBAAuBC,YAChD,GAAI99G,EAAKU,aAAane,EAAAs7H,uBAAuBE,OAAQ,CACjD,GAAIjpH,GAAQsD,SAAS4H,EAAKe,aAAaxe,EAAAs7H,uBAAuBE,QAC1DC,EAAWlpH,EAAQ,GAAK,IAAMA,EAAQA,CAC1C5S,MAAK+O,QAAU7M,EAAAsD,gBAAgByJ,uBAC3B6O,EAAKe,aAAaxe,EAAAs7H,uBAAuBC,YAAc,KAAOE,OAGlE97H,MAAK+O,QAAU7M,EAAAsD,gBAAgByJ,uBAC3B6O,EAAKe,aAAaxe,EAAAs7H,uBAAuBC,iBAG9C,IAAI99G,EAAKU,aAAane,EAAAs7H,uBAAuBI,WAAY,CAC5D,GAAInpH,GAAgB,CAChBkL,GAAKU,aAAane,EAAAs7H,uBAAuBE,SACzCjpH,EAAQsD,SAAS4H,EAAKe,aAAaxe,EAAAs7H,uBAAuBE,QAE9D,IAAIC,GAAWlpH,EAAQ,GAAK,IAAMA,EAAQA,CAE1C5S,MAAK+O,QAAU7M,EAAAsD,gBAAgByJ,uBAC3B6O,EAAKe,aAAaxe,EAAAs7H,uBAAuBI,WAAa,KAAOD,GAIrE,GAAI97H,KAAK+O,SACD+O,EAAKU,aAAane,EAAAs7H,uBAAuBzK,QAAS,CAClD,GAAI8K,GAAel+G,EAAKe,aAAaxe,EAAAs7H,uBAAuBzK,QAAQlrG,MAAM,IAE9C,KAAxBg2G,EAAa9vH,QACblM,KAAKmxH,OAAOjyG,EAAIN,WAAWo9G,EAAa,IACxCh8H,KAAKmxH,OAAO/xG,EAAIR,WAAWo9G,EAAa,KACT,IAAxBA,EAAa9vH,SACpBlM,KAAKmxH,OAAOjyG,EAAIN,WAAWo9G,EAAa,IACxCh8H,KAAKmxH,OAAO/xG,EAAIR,WAAWo9G,EAAa,KAYhDl+G,EAAKU,aAAane,EAAAs7H,uBAAuBv6G,gBACzCphB,KAAK2c,aAAemB,EAAKe,aAAaxe,EAAAs7H,uBAAuBv6G,eAGxC,MAArBphB,KAAKkgB,eACDpC,EAAKU,aAAa,oBAClBxe,KAAKi8H,wBAAwBn+G,EAAM9d,KAAKkgB,cAGxCpC,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,gBAGzDf,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,gBAGzDf,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASL,EAAIN,WAAWd,EAAKe,aAAa,WAG5Df,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASH,EAAIR,WAAWd,EAAKe,aAAa,aAcjEy3G,aAAAx1H,UAAAkd,aAAP,SAAoBF,GAChB,IAAKA,EAED,WADA9d,MAAK0hB,SAAS,wCAqElB,IAvDK5D,EAAKU,aAAa,iBAC4C,GAA/D5c,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,kBAE3CxC,EAAAe,OAAOC,aAAard,MAGxBA,KAAK8f,QAAUxD,EAAA8B,WAAW2B,uBAAuBjC,EAAMzd,EAAAs7H,uBAAuB37G,QAAShgB,KAAK8f,SAC5F9f,KAAKme,MAAQ7B,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAs7H,uBAAuBp9G,MAAOve,KAAKme,OACtFne,KAAK2pB,UAAYwlG,EAAAyB,YAAYC,aACzB7wH,KAAKk8H,qBACD5/G,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAs7H,uBAAuBzG,WAAYl1H,KAAK2pB,aAGvF3pB,KAAK2f,MAAMT,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuB/7G,QAAS5f,KAAK2f,MAAMT,GAC9Flf,KAAK2f,MAAMP,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuB97G,QAAS7f,KAAK2f,MAAMP,GAE1FtB,EAAKU,aAAane,EAAAs7H,uBAAuBl9G,YACzCze,KAAK0e,SAAW1e,KAAK2e,gBAAgBC,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBl9G,aAGzFX,EAAKU,aAAane,EAAAs7H,uBAAuB78G,iBACrChB,EAAKe,aAAaxe,EAAAs7H,uBAAuB78G,kBAAoBze,EAAAs7H,uBAAuB78G,iBACpF9e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAI1Djf,KAAKuf,SAASL,EAAI5C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuBl8G,EAAGzf,KAAKuf,SAASL,GAC9Flf,KAAKuf,SAASH,EAAI9C,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuBj8G,EAAG1f,KAAKuf,SAASH,GAE1FtB,EAAKU,aAAane,EAAAs7H,uBAAuBx8G,WACzCnf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBx8G,WAGnErB,EAAKU,aAAane,EAAAs7H,uBAAuBt8G,WACzCrf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBt8G,WAGnEvB,EAAKU,aAAane,EAAAs7H,uBAAuBr8G,SACzCtf,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBr8G,QACnEtf,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBr8G,SAGnExB,EAAKU,aAAane,EAAAs7H,uBAAuBvK,UACzCpxH,KAAKsrB,KAAKpM,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBvK,UAGlEtzG,EAAKU,aAAane,EAAAs7H,uBAAuBtK,UACzCrxH,KAAKsrB,KAAKlM,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBtK,UAGlEvzG,EAAKU,aAAane,EAAAs7H,uBAAuBQ,QACzCn8H,KAAKsrB,KAAKpM,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBQ,OAClEn8H,KAAKsrB,KAAKlM,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBQ,QAGlEr+G,EAAKU,aAAane,EAAAs7H,uBAAuB17G,MAAO,CAEhD,IADA,GAAIqJ,GAAgBxL,EAAKhG,cAAcyR,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKpL,WAAaJ,EAAKe,aAAaxe,EAAAs7H,uBAAuB17G,MAAO,CAClE,GAAIuJ,GAA6B,GAAIrN,GAAAgE,YACrCqJ,GAAa7nB,OAAO2nB,GACpBtpB,KAAKkgB,aAAesJ,EACpBxpB,KAAK4gB,KAAO4I,EAEhBF,EAAOA,EAAKG,mBAGC,MAAbzpB,KAAK4gB,KAOb,GAAI9C,EAAKU,aAAane,EAAAs7H,uBAAuB96G,aAAc,CACvD,GAAIC,GAAQ5e,EAAAsD,gBAAgByJ,uBAAuB6O,EAAKe,aAAaxe,EAAAs7H,uBAAuB96G,aAE/E,OAATC,IACA9gB,KAAK+gB,WAAa,GAAI5W,MAAK6W,OAAOF,GAC9BhD,EAAKU,aAAane,EAAAs7H,uBAAuB16G,iBACzCjhB,KAAK+gB,WAAWxB,SAASL,EAAIN,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuB16G,iBAEjFnD,EAAKU,aAAane,EAAAs7H,uBAAuBz6G,iBACzClhB,KAAK+gB,WAAWxB,SAASH,EAAIR,WAAWd,EAAKe,aAAaxe,EAAAs7H,uBAAuBz6G,iBAGjFpD,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWpB,MAAMT,EAAIhJ,SAAS4H,EAAKe,aAAa,sBAGrDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWpB,MAAMP,EAAIlJ,SAAS4H,EAAKe,aAAa,sBAGrDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWtP,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,sBAGvDf,EAAKU,aAAa,sBAClBxe,KAAK+gB,WAAWtP,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,sBAGtDf,EAAKU,aAAane,EAAAs7H,uBAAuBx6G,oBAC1CnhB,KAAKiS,SAASjS,KAAK+gB,YACnB/gB,KAAK4gB,KAAO5gB,KAAK+gB,YAGrB/gB,KAAKi8H,wBAAwBn+G,EAAM9d,KAAK+gB,aAahD,GAAIjD,EAAKU,aAAane,EAAAs7H,uBAAuB3K,MAAO,CAChD,GAAIoL,GAAG,MACgD,OAAnDt+G,EAAKe,aAAaxe,EAAAs7H,uBAAuB3K,MACzChxH,KAAK0pB,KAAO,KAC8C,YAAnD5L,EAAKe,aAAaxe,EAAAs7H,uBAAuB3K,MAChDhxH,KAAK0pB,KAAOxT,SAASogH,aAAarF,YAAa,KAE/CjxH,KAAK0pB,KAAOxT,SAAS4H,EAAKe,aAAaxe,EAAAs7H,uBAAuB3K,MAAO,IAChD,MAAjBhxH,KAAKmd,UAAwC,MAApBnd,KAAKmd,SAAS,IAAcnd,KAAKmd,SAAS,YAAchT,MAAK6W,SACtFo7G,EAAmBp8H,KAAKmd,SAAS,GACjCi/G,EAAI1yG,KAAO1pB,KAAK0pB,OA8C5B,MAzCI5L,GAAKU,aAAa,eAC+C,MAA7D83G,aAAa+F,YAAYv+G,EAAKe,aAAa,iBAC3C7e,KAAK0pB,KAAO4sG,aAAa+F,YAAYv+G,EAAKe,aAAa,gBAItC,MAArB7e,KAAKkgB,eACDpC,EAAKU,aAAa,oBAClBxe,KAAKi8H,wBAAwBn+G,EAAM9d,KAAKkgB,cAGxCpC,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,gBAGzDf,EAAKU,aAAa,gBAClBxe,KAAKkgB,aAAazO,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,gBAGzDf,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASL,EAAIN,WAAWd,EAAKe,aAAa,WAG5Df,EAAKU,aAAa,WAClBxe,KAAKkgB,aAAaX,SAASH,EAAIR,WAAWd,EAAKe,aAAa,YAIpE7e,KAAKshB,iBAAiBxD,GACtB9d,KAAKwhB,cAAc1D,GACnB9d,KAAKuhB,iBAAiBzD,GACtB9d,KAAKqhB,cAAcvD,GACnB9d,KAAKyhB,SAAS3D,GASP9d,MASJs2H,aAAAx1H,UAAAugB,cAAP,SAAqBvD,GAArB,GAAAtE,GAAAxZ,IACI,KAAK8d,EAAKU,aAAane,EAAAs7H,uBAAuBh6G,aAC1C,OAAO,CAGX,IAAIC,GAEAC,EAA6BvF,EAAA8B,WAAW0D,sBACxChE,EACAzd,EAAAs7H,uBAAuB55G,qBACvB,KAGAF,IAAsBxhB,EAAAs7H,uBAAuB35G,2BAA2BC,SACxEL,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBh6G,cAAcS,IACvF,SAACrV,GAAU,MAAAA,GAAQyM,EAAK2E,QAErB0D,GAAsBxhB,EAAAs7H,uBAAuB35G,2BAA2BK,QAC/ET,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBh6G,cACzEC,EAAW1V,SACX0V,EAAW,GAAK5hB,KAAKme,QAGzByD,EAAahgB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBh6G,aAGjF,IAAMW,GAAwBV,MAExBW,EAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAs7H,uBAAuBn5G,iBAAkB,MACpGC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAs7H,uBAAuBj5G,qBACvB,KAEEC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuB/4G,kBAAmB,GACnGC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAs7H,uBAAuB74G,iBACvB,KAGJzG,GAAAe,OAAOwE,WAAW5hB,MAAQsiB,SAAQC,YAAWE,gBAAeE,aAAYE,eASrEyzG,aAAAx1H,UAAAwgB,iBAAP,SAAwBxD,GAAxB,GAAAtE,GAAAxZ,IACI,MACM8d,EAAKU,aAAane,EAAAs7H,uBAAuB54G,mBACtCjF,EAAKU,aAAane,EAAAs7H,uBAAuB34G,mBAC5ClF,EAAKU,aAAa,qBAAwBV,EAAKU,aAAa,qBAC5DV,EAAKU,aAAa,6BAAgCV,EAAKU,aAAa,6BAEtE,OAAO,CAGX,IAAIyE,GACAC,CAEJ,IACIpF,EAAKU,aAAane,EAAAs7H,uBAAuB54G,mBACzCjF,EAAKU,aAAane,EAAAs7H,uBAAuB34G,kBAC3C,CACE,GAAIG,GAAgC7G,EAAA8B,WAAW0D,sBAC3ChE,EACAzd,EAAAs7H,uBAAuBv4G,wBACvB,KAEAD,KAA0B9iB,EAAAs7H,uBAAuBt4G,8BAA8BpB,UAC/EgB,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuB54G,mBAAmBX,IAChG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASL,IAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuB34G,mBAAmBZ,IAChG,SAACrV,GAAU,MAAAA,GAAQyM,EAAK+F,SAASH,MAGrC6D,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuB54G,mBACjFG,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuB34G,wBAE9ElF,GAAKU,aAAa,qBAAuBV,EAAKU,aAAa,qBAClEyE,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,qBAC1DoE,EAAe+f,QAAQhjC,KAAKuf,SAASL,GAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,qBAC1DqE,EAAe8f,QAAQhjC,KAAKuf,SAASH,IAC9BtB,EAAKU,aAAa,6BAA+BV,EAAKU,aAAa,8BAC1EyE,EAAiBrhB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,6BAA6BuD,IACnF,SAACrV,GAAU,MAAAyM,GAAK+F,SAASL,GAAKnS,EAAQyM,EAAK0M,oBAAoBhH,KAEnE+D,EAAe+f,QAAQhjC,KAAKuf,SAASL,GAErCgE,EAAiBthB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,6BAA6BuD,IACnF,SAACrV,GAAU,MAAAyM,GAAK+F,SAASH,GAAKrS,EAAQyM,EAAK0M,oBAAoB9G,KAEnE8D,EAAe8f,QAAQhjC,KAAKuf,SAASH,GAGzC,IAAI4yG,GAAyB,KACzBC,EAAyB,KACzB5jG,EAAc,IAElB,IACIvQ,EAAKU,aAAane,EAAAs7H,uBAAuBzJ,0BACzCp0G,EAAKU,aAAane,EAAAs7H,uBAAuBxJ,yBAC3C,CACEH,EAAUpwH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBzJ,0BAC1ED,EAAUrwH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBxJ,0BAC1E9jG,GAAWvI,UAEX,KAAK,GAAI/lB,GAAI,EAAGA,EAAIgf,KAAK0xB,IAAIuhF,EAAQ9lH,OAAQ+lH,EAAQ/lH,QAASnM,IAC1DsuB,EAAOvI,OAAO9S,MAAOkM,EAAG8yG,EAAQjyH,GAAIqf,EAAG6yG,EAAQlyH,IAGnD,IAAI+d,EAAKU,aAAane,EAAAs7H,uBAAuBW,kCAAmC,CAC5E,GAAIC,GAAqBz+G,EAAKe,aAAaxe,EAAAs7H,uBAAuBW,iCAClE,IAAIpmH,SAASqmH,IAAe36H,EAAA4I,YAAY8D,aAAaiuH,GACjDluG,EAAmB,WAAIkuG,MACpB,CACH,GAAIC,GAA8BD,EAAWv2G,MAAM,IACnD,IAA8B,GAA1Bw2G,EAAgBtwH,OAAa,CAExB,GAAApM,GAAA08H,EAAA,GAAGp7H,EAAAo7H,EAAA,GAAG77H,EAAA67H,EAAA,GAAGh7H,EAAAg7H,EAAA,GAAG38H,EAAA28H,EAAA,EACjBnuG,GAAmB,cACnBA,EAAmB,WAAErb,KAAKlT,GAC1BuuB,EAAmB,WAAErb,KAAK5R,GAC1BitB,EAAmB,WAAErb,KAAKrS,GAC1B0tB,EAAmB,WAAErb,KAAKkD,SAAS1U,IACnC6sB,EAAmB,WAAErb,KAAU,QAALnT,MAM1C,GAAMyjB,GAAwBL,MACxBM,EAAwBL,MACxBX,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAs7H,uBAAuBn4G,oBACvB,MAEEf,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAs7H,uBAAuBl4G,wBACvB,KAEEd,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuBj4G,qBAAsB,GACtGb,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAs7H,uBAAuBh4G,oBACvB,KAGJtH,GAAAe,OAAOwG,cAAc5jB,MAAQsjB,SAAQC,SAAQhB,YAAWE,gBAAeE,aAAYE,YAAWwL,YAS3FioG,aAAAx1H,UAAAygB,iBAAP,SAAwBzD,GACpB,IAAKA,EAAKU,aAAane,EAAAs7H,uBAAuB93G,gBAC1C,OAAO,CAGX,IAAIC,GAA+BliB,EAAAsgB,WAAWC,YAC1CrE,EAAKe,aAAaxe,EAAAs7H,uBAAuB93G,iBAGvCE,EAAyBD,MAEzBvB,EAAoBjG,EAAA8B,WAAW0D,sBACjChE,EACAzd,EAAAs7H,uBAAuB33G,oBACvB,MAEEvB,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAs7H,uBAAuB13G,wBACvB,KAEEtB,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuBz3G,qBAAsB,GACtGrB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAs7H,uBAAuBx3G,oBACvB,KAGJ9H,GAAAe,OAAO0G,cAAc9jB,MAAQ+jB,UAASxB,YAAWE,gBAAeE,aAAYE,eAUzEyzG,aAAAx1H,UAAA0gB,cAAP,SAAqB1D,GAArB,GACQsG,GACAC,EACAC,EAHR9K,EAAAxZ,KAIQukB,IAgBJ,IAdIzG,EAAKU,aAAane,EAAAs7H,uBAAuBn3G,iBACzCJ,EAAcxiB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBn3G,iBAG9E1G,EAAKU,aAAane,EAAAs7H,uBAAuBl3G,iBACzCJ,EAAcziB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAs7H,uBAAuBl3G,iBAG9E3G,EAAKU,aAAane,EAAAs7H,uBAAuBj3G,eACzCJ,EAAagyG,aAAa3xG,8BACtB7G,EAAKe,aAAaxe,EAAAs7H,uBAAuBj3G,eAI7CJ,GAAcA,EAAWpY,OACzBqY,EAAcD,MACX,IAAIF,GAAeC,EAClBD,EAAYlY,SAAWmY,EAAYnY,SACnCqY,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAGiF,EAAYtkB,WAIxB,IAAIqkB,EACPG,EAAcH,EAAYhC,IAAI,SAACwC,EAAqB7kB,GAChD,OACImf,EAAG0F,EACHxF,EAAG5F,EAAK/H,MAAM2N,SAGnB,KAAIiF,EAQP,OAAO,CAPPE,GAAcF,EAAYjC,IAAI,SAACyC,EAAqB9kB,GAChD,OACImf,EAAG1F,EAAK/H,MAAMyN,EACdE,EAAGyF,KAOf,GAAMtC,GAAoBjG,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAs7H,uBAAuB72G,iBAAkB,MACpGrC,EAAwBnG,EAAA8B,WAAWoB,mBACrC1B,EACAzd,EAAAs7H,uBAAuB52G,qBACvB,KAEEpC,EAAqBrG,EAAA8B,WAAWoB,mBAAmB1B,EAAMzd,EAAAs7H,uBAAuB32G,kBAAmB,GACnGnC,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzd,EAAAs7H,uBAAuB12G,iBACvB;AAGJ5I,EAAAe,OAAOkH,WAAWtkB,MAAQukB,cAAahC,YAAWE,gBAAeE,aAAYE,eAU1EyzG,aAAAx1H,UAAAm7H,wBAAP,SAA+Bn+G,EAAe2+G,GAC1C,GACIl4G,MACA9B,KACAF,KACAI,KACAE,GAAqB,EAErB9B,EAA8B07G,CAE9BA,aAAsBtgH,GAAAgE,cACtBoE,EAAc3iB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,oBACvD4D,EAAgB7gB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,4BAA8B,OACvF0D,EAAY3gB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,aAAe,UACrF/C,EAAa/gB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,cAAgB,KACvF9C,EAAYvG,EAAA8B,WAAW2B,uBAAuBjC,EAAMzB,EAAA6I,iBAAiBU,WAAY,QAEjFrB,EAAc3iB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,0BACvD4D,EAAgB7gB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,kCAAoC,OAC7F0D,EAAY3gB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,aAAe,UACrF/C,EAAa/gB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,cAAgB,KACvF9C,EAAYvG,EAAA8B,WAAW2B,uBAAuBjC,EAAMzB,EAAA6I,iBAAiBU,WAAY,OAGrFvJ,EAAAe,OAAOC,aAAa0D,EAAY,OAChC1E,EAAAe,OAAOyI,YAAY9E,GACfwE,MAAO,UACPhB,cACAhC,YACAE,gBACAE,aACAE,eASDyzG,aAAAx1H,UAAA2gB,SAAP,SAAgB3D,GACZ,GAAIA,EAAKU,aAAanC,EAAA6I,iBAAiBC,OAGnC,IAAK,GAFDC,GAAwBxjB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBC,QAE7EplB,EAAY,EAAGA,EAAIqlB,EAAOlZ,OAAQnM,IAAK,CAE5C,IAAK+d,EAAKU,aAAanC,EAAA6I,iBAAiBI,aAAevlB,GACnD,OAAO,CAGX,IAAIwlB,GAAgBH,EAAOrlB,GAErBwkB,EAA6BvkB,KAAKwlB,kBACpCD,EACA3jB,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxC,EAAA6I,iBAAiBI,aAAevlB,KAEvE0iB,EAA+B7gB,EAAAsgB,WAAWC,YAC5CrE,EAAKe,aAAaxC,EAAA6I,iBAAiBO,eAAiB1lB,IAAM,OAExDwiB,EAA2B3gB,EAAAsgB,WAAWmD,YACxCvH,EAAKe,aAAaxC,EAAA6I,iBAAiBQ,WAAa3lB,IAAM,UAEpD4iB,EAA4B/gB,EAAAsgB,WAAWC,YACzCrE,EAAKe,aAAaxC,EAAA6I,iBAAiBS,YAAc5lB,IAAM,KAErD8iB,EAAqBvG,EAAA8B,WAAW2B,uBAClCjC,EACAzB,EAAA6I,iBAAiBU,WAAa7lB,EAC9B,KAGU,WAAVwlB,IACAA,EAAQ,UACRH,EAAOrlB,GAAK,UACZA,KAGJsc,EAAAe,OAAOyI,YAAY7lB,MAAQulB,QAAOhB,cAAahC,YAAWE,gBAAeE,aAAYE,cAI7F,OAAO,GAGHyzG,aAAAx1H,UAAA0kB,kBAAR,SAA0BD,EAAeO,GACrC,GAAIvB,KAEU,WAAVgB,IACAA,EAAQ,UAKZ,KAAK,GAFDxY,GADAgZ,EAA0BR,EAAMS,MAAM,KAGjCjmB,EAAY,EAAGA,EAAI+lB,EAAO5Z,OAAQnM,IAAK,CAC5C,GAAI+H,GAAUge,EAAO/lB,EACrB,QAAQ+H,EAAQA,EAAQoE,OAAS,IAC7B,IAAK,IACsB,GAAnB6Z,EAAS7Z,QACTa,EAAQ/M,KAAK+lB,EAAS,IACF,aAAhBA,EAAS,KACThZ,EAAQ/M,KAAKimB,gBAAgBlZ,IAEjCwX,EAAYvR,KAAKjG,IACS,GAAnBgZ,EAAS7Z,QAChBqY,EAAYvR,KAAKhT,KAAK+lB,EAAS,IAAIA,EAAS,IAGhD,MACJ,KAAK,IACDhZ,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAC7BqjB,EAAYrY,OAAS,IACrBa,EAAQwX,EAAYA,EAAYrY,OAAS,GAAKa,GAElDwX,EAAYvR,KAAKjG,EACjB,MACJ,KAAK,IACDA,EAAQ6R,WAAW9W,EAAQ5G,MAAM,OAEd,YAAf6kB,EAAS,KACU,KAAfA,EAAS,GACThZ,EAAQ/M,KAAKuf,SAASL,GAAKnS,EAAQ/M,KAAKkmB,oBAAoBhH,GACtC,KAAf6G,EAAS,KAChBhZ,EAAQ/M,KAAKuf,SAASH,GAAKrS,EAAQ/M,KAAKkmB,oBAAoB9G,KAIpEmF,EAAYvR,KAAKjG,EACjB,MACJ,SACIwX,EAAYvR,KAAK4L,WAAW9W,KAIxC,MAAOyc,IAQX+xG,aAAAx1H,UAAAwc,MAAA,WACI,GAAIjU,GAAwB,GAAIitH,aAsBhC,IArBAjtH,EAAQqU,iBAERrU,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQ8nH,OAASnxH,KAAKmxH,OACtB9nH,EAAQqgB,KAAO1pB,KAAK0pB,KACpBrgB,EAAQsgB,UAAY3pB,KAAK2pB,UACzBtgB,EAAQ4U,KAAOje,KAAKie,KACpB5U,EAAQsT,aAAe3c,KAAK2c,aAER,MAAhB3c,KAAK+O,UACL1F,EAAQ0F,QAAU/O,KAAK+O,SAGJ,MAAnB/O,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,MACa,OAArBh+G,KAAKkgB,YAKhB,OAFA7W,GAAQuU,eAEDvU,GAODitH,aAAAx1H,UAAAoc,gBAAV,SAA0BlY,GACtBqX,EAAAe,OAAOC,aAAard,MAEpBA,KAAK+O,QAAU,MAGnBunH,aAAAx1H,UAAA4b,aAAA,WAKI,MAAO,IAGX45G,aAAAx1H,UAAAsxH,UAAA,WASI,MAAO,IAOXvxH,OAAAmD,eAAWsyH,aAAAx1H,UAAA,UjG+j2BNmD,IiG/j2BL,WACI,MAAOjE,MAAKuc,SjGik2BXpY,YAAY,EACZC,cAAc,IiG/j2BnBvD,OAAAmD,eAAWsyH,aAAAx1H,UAAA,ajGkk2BNmD,IiGlk2BL,WACI,MAAOjE,MAAKwc,ajGok2BXrY,YAAY,EACZC,cAAc,IiG9j2BnBvD,OAAAmD,eAAWsyH,aAAAx1H,UAAA,OjGik2BNmD,IiGjk2BL,WACI,MAAOjE,MAAKiZ,MjGmk2BX9U,YAAY,EACZC,cAAc,IiG7j2BnBvD,OAAAmD,eAAWsyH,aAAAx1H,UAAA,iBjGgk2BNmD,IiGhk2BL,WACI,MAAQjE,MAAa8c,mBjGkk2BpB3Y,YAAY,EACZC,cAAc,IiGhk2BnBkyH,aAAAx1H,UAAAic,QAAA,SAAQ/X,GACJhF,KAAKgd,gBAAgB,WAEjBpb,EAAAqG,MAAMC,kBAAkBlD,KACxBA,EAAUsxH,aAAar5G,iBAG3Bjd,KAAKkd,gBAAgBlY,GAEhBpD,EAAAqG,MAAMC,kBAAkBlI,KAAKmd,WAC9Bha,EAAArC,UAAMic,QAAOtc,KAAAT,KAACgF,GASlBhF,KAAKwc,aAAc,GAGb85G,aAAAx1H,UAAAkc,gBAAV,SAA0BW,KAaX24G,aAAA3xG,8BAAf,SAA6CwB,GACzC,MAAKA,GAIEA,EACF/Y,QAAQ,MAAO,IACf4Y,MAAM,KACN5D,IAAI,SAACgE,GACF,cAAQ1S,KAAK0S,GAAcA,EAAWllB,MAAM,MAAO8kB,MAAM,MAAQI,EAAYA,KAEhFhE,IAAI,SAACgE,GACF,OAASlH,EAAGN,WAAWwH,EAAW,IAAKhH,EAAGR,WAAWwH,EAAW,WAOlEkwG,aAAAx1H,UAAA+c,cAAV,WACI7d,KAAK4d,gBAMT04G,aAAAx1H,UAAA8c,aAAA,WACI5d,KAAK08H,iBAAiB,kBACtB18H,KAAKuc,SAAU,GAiBT+5G,aAAAx1H,UAAA47H,iBAAV,SAA2B/+G,KAW3B24G,aAAAx1H,UAAAyc,yBAAA,WACIvd,KAAKwd,6BAMC84G,aAAAx1H,UAAA0c,0BAAV,WACIxd,KAAK08H,iBAAiB,4BAEtB,IAAIj/G,IACAN,UAAU,EAGd,IAAqB,MAAjBnd,KAAKmd,UAAoBnd,KAAKmd,SAASjR,OAAS,EAChD,IAAK,GAAInM,GAAIC,KAAKmd,SAASjR,OAAS,EAAGnM,GAAK,EAAGA,IACnB,MAApBC,KAAKmd,SAASpd,IACbC,KAAKmd,SAASpd,GAAWgd,QAAQU,EAK9Czd,MAAK0d,kBAQF44G,aAAAx1H,UAAA6d,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAQzBiwG,aAAAx1H,UAAAmlB,gBAAP,SAAuBK,GACnB,MAAOA,IAAW,IAAMvH,KAAKsH,KAU1BiwG,aAAAx1H,UAAAo7H,qBAAP,SAA4B1tE,GAExB,OADAA,EAAOA,EAAKtgD,YAER,IAAK,IACL,IAAK,SACD,MAAO/D,MAAKqmH,YAAYC,MAC5B,KAAK,IACL,IAAK,MACD,MAAOtmH,MAAKqmH,YAAYmM,GAC5B,KAAK,IACL,IAAK,WACD,MAAOxyH,MAAKqmH,YAAYoM,QAC5B,KAAK,IACL,IAAK,SACD,MAAOzyH,MAAKqmH,YAAYqM,MAC5B,KAAK,IACL,IAAK,UACD,MAAO1yH,MAAKqmH,YAAYsM,OAC5B,KAAK,IACL,IAAK,SACD,MAAO3yH,MAAKqmH,YAAYuM,MAC5B,KAAK,IACL,IAAK,UACD,MAAO5yH,MAAKqmH,YAAYwM,OAC5B,KAAK,IACL,IAAK,cACD,MAAO7yH,MAAKqmH,YAAYyM,WAC5B,KAAK,IACL,IAAK,aACD,MAAO9yH,MAAKqmH,YAAY0M,UAC5B,KAAK,IACL,IAAK,aACD,MAAO/yH,MAAKqmH,YAAY2M,UAC5B,KAAK,KACL,IAAK,aACD,MAAOhzH,MAAKqmH,YAAY4M,UAC5B,KAAK,KACL,IAAK,aACD,MAAOjzH,MAAKqmH,YAAY6M,UAC5B,KAAK,KACL,IAAK,YACD,MAAOlzH,MAAKqmH,YAAY8M,SAC5B,KAAK,KACL,IAAK,MACD,MAAOnzH,MAAKqmH,YAAY+M,GAC5B,KAAK,KACL,IAAK,aACD,MAAOpzH,MAAKqmH,YAAYgN,UAC5B,KAAK,KACL,IAAK,QACD,MAAOrzH,MAAKqmH,YAAYhpG,KAC5B,KAAK,KACL,IAAK,aACD,MAAOrd,MAAKqmH,YAAYiN,UAC5B,SAII,MAAOtzH,MAAKqmH,YAAYC,SAO1B6F,aAAAx1H,UAAAwxH,gBAAV,SAA0BpxD,EAAWpjD,KAmC3Bw4G,aAAAx1H,UAAAsX,IAAV,SAAcC,KAWJi+G,aAAAx1H,UAAA4gB,SAAV,SAAmBrJ,KArmCZi+G,aAAArF,YAAsB,SAEtBqF,aAAA+F,eAYA/F,aAAAr5G,iBACHE,UAAU,GAjBlBm5G,aAAA16G,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBjG+l4BxB0vG,eiG9l4B0BnsH,KAAK6W,OAA1B3gB,GAAAi2H,aAAYA,GA8mCzB,mBAAAoH,qBAMA,MAAAA,qBAEar9H,GAAAs7H,wBAOTp9G,MAAO,QACPoD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBACtBI,iBAAkB,iBAClBf,qBAAsB,qBACtBC,4BACI6E,SAAU,WACV5E,SAAU,WACVI,OAAQ,UAEZ6uG,OAAQ,SAIR6K,UAAW,YAQXl7G,YAAa,aACbM,iBAAkB,iBAClBF,cAAe,cACfC,cAAe,cAyBfg0G,WAAY,YACZnG,WAAY,YACZjoG,MAAO,QAEP+0G,MAAO,QAEPD,WAAY,YAOZzB,MAAO,QAQPl6G,KAAM,OAONL,QAAS,SAOTC,QAAS,SACTkD,iBAAkB,iBAClBC,iBAAkB,iBAClBs5G,iCAAkC,gCAClCpK,wBAAyB,uBACzBC,wBAAyB,uBACzB3uG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAEd0B,oBAAqB,oBAOrBlF,SAAU,WACVoF,eAAgB,gBAChBG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBC,oBAAqB,oBAIrBO,YAAa,aACbF,cAAe,cACfC,cAAe,cACfK,iBAAkB,iBAClBE,kBAAmB,kBACnBD,qBAAsB,qBACtBE,iBAAkB,iBAOlB3F,MAAO,QACPH,QAAS,SAQTE,QAAS,SACT88G,KAAM,OAON/K,OAAQ,QAORC,OAAQ,QAORvyG,eAAgB,gBAOhBkyG,KAAM,OACN5vG,aAAc,cACdpB,QAAS,UAOTP,EAAG,IAOHC,EAAG,MjG031BD,SAASpf,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GkG7s4BjEna,EAAAzB,EAAyD,GACzD6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChC6mB,EAAA7mB,EAA6B,IAC7B4sH,EAAA5sH,EAA0C,IAiC1Cy2H,EAAA,SAAAzzH,GAAmC5B,EAAAq1H,cAAAzzH,EAqC/B,SAAAyzH,iBACIzzH,EAAA1C,KAAAT,MAEAA,KAAK29H,OAAS,EACd39H,KAAKyyB,MAAQ,GACbzyB,KAAK49H,SAAW,GAChB59H,KAAK69H,SAAW,IAChB79H,KAAK89H,WACL99H,KAAK4vH,mBAAoB,EACzB5vH,KAAK+9H,kBAAoB,GACzB/9H,KAAKg+H,eACDjqG,KAAM6iG,cAAcC,cACpB33G,EAAG,EACHE,EAAG,EACH63G,OAAQ,EACRE,OAAQ,EACRxwH,MAAOzE,EAAAsD,gBAAgB+K,MACvB3J,OAAQ1E,EAAAsD,gBAAgBgL,OACxBgG,cACAF,eACAshH,OAAQ,EACRsB,UAAW,EACXpB,QAAS,EACTqB,WAAY,EACZxB,YAAa,EACbE,eAAgB,EAChBG,aAAc,EACdD,gBAAiB,EACjB38E,MAAO,IACPq8E,WAAY,GAEhBz3H,KAAKi+H,eACLj+H,KAAKk+H,gBACLl+H,KAAKm+H,mBACLn+H,KAAKo+H,gBAyab,MAhaIxH,eAAA91H,UAAAa,OAAA,SAAOmc,GAKH,GAJA9d,KAAK8d,KAAOA,EAEZ3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAETA,EAAKU,aAAauuG,EAAAgI,0BAA0BmF,cAAe,CAC3D,GAAImE,GACAr3G,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAakuG,EAAAgI,0BAA0BmF,cAEjD,OAAfmE,GAA2C,MAApBA,EAAYvgH,MACnC9d,KAAKs+H,mBAAmBD,EAAYvgH,MAI5C9d,KAAKs+H,mBAAmBxgH,IAGpB84G,cAAA91H,UAAAw9H,mBAAR,SAA2BxgH,GAEvB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAK04G,eAAc2H,UACfv+H,KAAKw+H,gBAAgBl1G,EACrB,MACJ,KAAKstG,eAAc6H,SACfz+H,KAAK0+H,eAAep1G,EACpB,MACJ,KAAKstG,eAAc+H,WACf3+H,KAAK4+H,iBAAiBt1G,EACtB,MACJ,KAAKstG,eAAciI,aACf7+H,KAAK8+H,mBAAmBx1G,EACxB,MACJ,KAAKstG,eAAcmI,SACf/+H,KAAKg/H,eAAe11G,EACpB,MACJ,KAAKstG,eAAcqI,UACfj/H,KAAKk/H,gBAAgB51G,EACrB,MACJ,KAAKstG,eAAcuI,aACfn/H,KAAKo/H,mBAAmB91G,EACxB,MACJ,KAAKstG,eAAcyI,UACfr/H,KAAKs/H,gBAAgBh2G,GAO7BA,EAAOA,EAAKG,qBAIpB5oB,OAAAmD,eAAI4yH,cAAA91H,UAAA,SlG8n4BCmD,IkG9n4BL,WACI,MAAOjE,MAAK29H,QlGgo4BXx5H,YAAY,EACZC,cAAc,IkG9n4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,QlGio4BCmD,IkGjo4BL,WACI,MAAOjE,MAAKyyB,OlGmo4BXtuB,YAAY,EACZC,cAAc,IkGjo4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,WlGoo4BCmD,IkGpo4BL,WACI,MAAOjE,MAAK49H,UlGso4BXz5H,YAAY,EACZC,cAAc,IkGpo4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,WlGuo4BCmD,IkGvo4BL,WACI,MAAOjE,MAAK69H,UlGyo4BX15H,YAAY,EACZC,cAAc,IkGvo4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,UlG0o4BCmD,IkG1o4BL,WACI,MAAOjE,MAAK89H,SlG4o4BX35H,YAAY,EACZC,cAAc,IkG1o4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,oBlG6o4BCmD,IkG7o4BL,WACI,MAAOjE,MAAK4vH,mBlG+o4BXzrH,YAAY,EACZC,cAAc,IkG7o4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,oBlGgp4BCmD,IkGhp4BL,WACI,MAAOjE,MAAK+9H,mBlGkp4BX55H,YAAY,EACZC,cAAc,IkGhp4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,gBlGmp4BCmD,IkGnp4BL,WACI,MAAOjE,MAAKg+H,elGqp4BX75H,YAAY,EACZC,cAAc,IkGnp4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,clGsp4BCmD,IkGtp4BL,WACI,MAAOjE,MAAKi+H,alGwp4BX95H,YAAY,EACZC,cAAc,IkGtp4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,elGyp4BCmD,IkGzp4BL,WACI,MAAOjE,MAAKk+H,clG2p4BX/5H,YAAY,EACZC,cAAc,IkGzp4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,kBlG4p4BCmD,IkG5p4BL,WACI,MAAOjE,MAAKm+H,iBlG8p4BXh6H,YAAY,EACZC,cAAc,IkG5p4BnBvD,OAAAmD,eAAI4yH,cAAA91H,UAAA,elG+p4BCmD,IkG/p4BL,WACI,MAAOjE,MAAKo+H,clGiq4BXj6H,YAAY,EACZC,cAAc,IkG/p4BnBwyH,cAAA91H,UAAA+0H,kBAAA,WACI,GAAI0J,GAA6Br9H,EAAAsD,gBAAgBgN,IAAMxS,KAAKyyB,MAASzyB,KAAK29H,OACtE6B,EAA4Bx/H,KAAK69H,SAAW37H,EAAAsD,gBAAgBgN,IAAO+sH,CACvE,OAAOC,IAYH5I,cAAA91H,UAAA09H,gBAAR,SAAwB1gH,GAChBA,EAAKU,aAAaihH,EAAwBrF,cAC1Cp6H,KAAK29H,OAASznH,SAAS4H,EAAKe,aAAa4gH,EAAwBrF,cAEjEt8G,EAAKU,aAAaihH,EAAwBpF,aAC1Cr6H,KAAKyyB,MAAQvc,SAAS4H,EAAKe,aAAa4gH,EAAwBpF,cAShEzD,cAAA91H,UAAA49H,eAAR,SAAuB5gH,GACfA,EAAKU,aAAaihH,EAAwBnF,YAC1Ct6H,KAAK49H,SAAW1nH,SAAS4H,EAAKe,aAAa4gH,EAAwBnF,YAEnEx8G,EAAKU,aAAaihH,EAAwBlF,YAC1Cv6H,KAAK69H,SAAW3nH,SAAS4H,EAAKe,aAAa4gH,EAAwBlF,YAGnEv6H,KAAK49H,SAAW59H,KAAK69H,WACrB79H,KAAK69H,SAAW79H,KAAK49H,WASrBhH,cAAA91H,UAAA89H,iBAAR,SAAyB9gH,GACrB,GAAIA,EAAKU,aAAaihH,EAAwBjF,iBAAkB,CAC5Dx6H,KAAK89H,QAAUhgH,EAAKe,aAAa4gH,EAAwBjF,iBAAiBx0G,MAAM,IAEhF,KAAK,GAAIjmB,GAAY,EAAGA,EAAIC,KAAK89H,QAAQ5xH,OAAQnM,IAE7CC,KAAK89H,QAAQ/9H,GAAKC,KAAK89H,QAAQ/9H,GAAK,WAEjC+d,GAAKU,aAAaihH,EAAwBhF,eACjDz6H,KAAK89H,QAAUhgH,EAAKe,aAAa4gH,EAAwBhF,aAAaz0G,MAAM,KAG5ElI,GAAKU,aAAaihH,EAAwBC,2BAC1C1/H,KAAK4vH,kBAAoBhuH,EAAA4I,YAAY8D,aACjCwP,EAAKe,aAAa4gH,EAAwBC,2BAI9C5hH,EAAKU,aAAaihH,EAAwBE,2BAC1C3/H,KAAK+9H,kBAAoBjgH,EAAKe,aAAa4gH,EAAwBE,2BAUnE/I,cAAA91H,UAAAg+H,mBAAR,SAA2BhhH,GACvB,GAAIA,EAAKU,aAAaihH,EAAwB/E,WAE1C,OADA16H,KAAKg+H,cAAcjqG,KAAOjW,EAAKe,aAAa4gH,EAAwB/E,WAC5D16H,KAAKg+H,cAAcjqG,MACvB,IAAK6iG,eAAcC,cAEX/4G,EAAKU,aAAaihH,EAAwB9E,UAC1C36H,KAAKg+H,cAAc9+G,EAAIN,WAAWd,EAAKe,aAAa4gH,EAAwB9E,SAC5E36H,KAAKg+H,cAAc/G,OAASj3H,KAAKg+H,cAAc9+G,GAE/CpB,EAAKU,aAAaihH,EAAwB7E,UAC1C56H,KAAKg+H,cAAc5+G,EAAIR,WAAWd,EAAKe,aAAa4gH,EAAwB7E,SAC5E56H,KAAKg+H,cAAc7G,OAASn3H,KAAKg+H,cAAc5+G,GAE/CtB,EAAKU,aAAaihH,EAAwBG,gBAC1C5/H,KAAKg+H,cAAc/G,OAASr4G,WAAWd,EAAKe,aAAa4gH,EAAwBG,gBAEjF9hH,EAAKU,aAAaihH,EAAwBI,gBAC1C7/H,KAAKg+H,cAAc7G,OAASv4G,WAAWd,EAAKe,aAAa4gH,EAAwBI,gBAEjF/hH,EAAKU,aAAaihH,EAAwB1E,cAC1C/6H,KAAKg+H,cAAcr3H,MAAQiY,WAAWd,EAAKe,aAAa4gH,EAAwB1E,cAEhFj9G,EAAKU,aAAaihH,EAAwBzE,eAC1Ch7H,KAAKg+H,cAAcp3H,OAASgY,WAAWd,EAAKe,aAAa4gH,EAAwBzE,eAEjFl9G,EAAKU,aAAaihH,EAAwBK,oBAC1C9/H,KAAKg+H,cAAcxnH,WAAaoI,WAC5Bd,EAAKe,aAAa4gH,EAAwBK,oBAG9ChiH,EAAKU,aAAaihH,EAAwBM,qBAC1C//H,KAAKg+H,cAAc1nH,YAAcsI,WAC7Bd,EAAKe,aAAa4gH,EAAwBM,oBAGlD,MACJ,KAAKnJ,eAAcS,WACfr3H,KAAKg+H,cAAcr3H,MAAQ,EAC3B3G,KAAKg+H,cAAcp3H,OAAS,EAExBkX,EAAKU,aAAaihH,EAAwB1E,cAC1C/6H,KAAKg+H,cAAcr3H,MAAQiY,WAAWd,EAAKe,aAAa4gH,EAAwB1E,cAEhFj9G,EAAKU,aAAaihH,EAAwBzE,eAC1Ch7H,KAAKg+H,cAAcp3H,OAASgY,WAAWd,EAAKe,aAAa4gH,EAAwBzE,cAGrF,MACJ,KAAKpE,eAAcoJ,YACf,KACJ,KAAKpJ,eAAcU,SAEf,KACJ,KAAKV,eAAcW,YAef,GAdIz5G,EAAKU,aAAaihH,EAAwB9E,UAC1C36H,KAAKg+H,cAAc9+G,EAAIN,WAAWd,EAAKe,aAAa4gH,EAAwB9E,SAC5E36H,KAAKg+H,cAAc/G,OAASj3H,KAAKg+H,cAAc9+G,GAE/CpB,EAAKU,aAAaihH,EAAwB7E,UAC1C56H,KAAKg+H,cAAc5+G,EAAIR,WAAWd,EAAKe,aAAa4gH,EAAwB7E,SAC5E56H,KAAKg+H,cAAc7G,OAASn3H,KAAKg+H,cAAc5+G,GAE/CtB,EAAKU,aAAaihH,EAAwBG,gBAC1C5/H,KAAKg+H,cAAc/G,OAASr4G,WAAWd,EAAKe,aAAa4gH,EAAwBG,gBAEjF9hH,EAAKU,aAAaihH,EAAwBI,gBAC1C7/H,KAAKg+H,cAAc7G,OAASv4G,WAAWd,EAAKe,aAAa4gH,EAAwBI,gBAEjF/hH,EAAKU,aAAaihH,EAAwBxE,aAAc,CACxD,GAAIrD,GAASh5G,WAAWd,EAAKe,aAAa4gH,EAAwBxE,aAElEj7H,MAAKg+H,cAAcpG,OAASA,EAC5B53H,KAAKg+H,cAAclG,QAAUF,EAC7B53H,KAAKg+H,cAAc9E,UAAYtB,EAC/B53H,KAAKg+H,cAAc7E,WAAavB,EAmBpC,GAjBI95G,EAAKU,aAAaihH,EAAwBrE,mBAC1Cp7H,KAAKg+H,cAAc9E,UAAYt6G,WAC3Bd,EAAKe,aAAa4gH,EAAwBrE,kBAE9Cp7H,KAAKg+H,cAAc7E,WAAan5H,KAAKg+H,cAAc9E,WAEnDp7G,EAAKU,aAAaihH,EAAwBQ,iBAC1CjgI,KAAKg+H,cAAclG,QAAUl5G,WACzBd,EAAKe,aAAa4gH,EAAwBQ,gBAE9CjgI,KAAKg+H,cAAc7E,WAAan5H,KAAKg+H,cAAclG,SAEnDh6G,EAAKU,aAAaihH,EAAwBS,qBAC1ClgI,KAAKg+H,cAAc7E,WAAav6G,WAC5Bd,EAAKe,aAAa4gH,EAAwBS,qBAG9CpiH,EAAKU,aAAaihH,EAAwBpE,mBAAoB,CAC9D,GAAI1D,GAAc/4G,WAAWd,EAAKe,aAAa4gH,EAAwBpE,mBACvEr7H,MAAKg+H,cAAcrG,YAAcA,EACjC33H,KAAKg+H,cAAchG,aAAeL,EAClC33H,KAAKg+H,cAAcnG,eAAiBF,EACpC33H,KAAKg+H,cAAcjG,gBAAkBJ,EAmBzC,GAjBI75G,EAAKU,aAAaihH,EAAwBU,yBAC1CngI,KAAKg+H,cAAcnG,eAAiBj5G,WAChCd,EAAKe,aAAa4gH,EAAwBU,wBAE9CngI,KAAKg+H,cAAcjG,gBAAkB/3H,KAAKg+H,cAAcnG,gBAExD/5G,EAAKU,aAAaihH,EAAwBW,uBAC1CpgI,KAAKg+H,cAAchG,aAAep5G,WAC9Bd,EAAKe,aAAa4gH,EAAwBW,sBAE9CpgI,KAAKg+H,cAAcjG,gBAAkB/3H,KAAKg+H,cAAchG,cAExDl6G,EAAKU,aAAaihH,EAAwBY,2BAC1CrgI,KAAKg+H,cAAcjG,gBAAkBn5G,WACjCd,EAAKe,aAAa4gH,EAAwBY,2BAG9CviH,EAAKU,aAAaihH,EAAwBa,kBAAmB,CAC7D,GAAI7I,GAAa74G,WAAWd,EAAKe,aAAa4gH,EAAwBa,kBACtEtgI,MAAKg+H,cAAcvG,WAAaA,EAEpC,GAAI35G,EAAKU,aAAaihH,EAAwBnE,YAAa,CACvD,GAAIlgF,GAAQx8B,WAAWd,EAAKe,aAAa4gH,EAAwBnE,YACjEt7H,MAAKg+H,cAAc5iF,MAAQA,KAoBvCw7E,cAAA91H,UAAAk+H,eAAR,SAAuBlhH,GAEnB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,GAAIA,EAAKpL,WAAa04G,cAAc2J,UAAW,CAC3C,GAAIz3G,KACAQ,GAAK9K,aAAaihH,EAAwB9E,QAC1C7xG,EAAK5J,EAAIN,WAAW0K,EAAKzK,aAAa4gH,EAAwB9E,SAE9D7xG,EAAK5J,EAAI,EAEToK,EAAK9K,aAAaihH,EAAwB7E,QAC1C9xG,EAAK1J,EAAIR,WAAW0K,EAAKzK,aAAa4gH,EAAwB7E,SAE9D9xG,EAAK1J,EAAI,EAETkK,EAAK9K,aAAaihH,EAAwB5E,eAC1C/xG,EAAKiwG,QAAUn6G,WAAW0K,EAAKzK,aAAa4gH,EAAwB5E,gBAEpE/xG,EAAKiwG,QAAU,KAEfzvG,EAAK9K,aAAaihH,EAAwB3E,eAC1ChyG,EAAKkwG,QAAUp6G,WAAW0K,EAAKzK,aAAa4gH,EAAwB3E,gBAEpEhyG,EAAKkwG,QAAU,KAEnBh5H,KAAKi+H,YAAYjrH,KAAK8V,GAE1BQ,EAAOA,EAAKG,qBAaZmtG,cAAA91H,UAAAo+H,gBAAR,SAAwBphH,GAEpB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GACCA,EAAKpL,WAAa04G,cAAc2J,WAC5Bj3G,EAAK9K,aAAaihH,EAAwBjE,cAC1Cx7H,KAAKk+H,aAAalrH,KACdpR,EAAAsgB,WAAWC,YAAYmH,EAAKzK,aAAa4gH,EAAwBjE,eAI7ElyG,EAAOA,EAAKG,oBAaZmtG,cAAA91H,UAAAs+H,mBAAR,SAA2BthH,GAEvB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GACCA,EAAKpL,WAAa04G,cAAc2J,WAC5Bj3G,EAAK9K,aAAaihH,EAAwBhE,aAC1Cz7H,KAAKm+H,gBAAgBnrH,KAAK4L,WAAW0K,EAAKzK,aAAa4gH,EAAwBhE,cAGvFnyG,EAAOA,EAAKG,oBAYZmtG,cAAA91H,UAAAw+H,gBAAR,SAAwBxhH,GAEpB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GACCA,EAAKpL,WAAa04G,cAAc2J,WAC5Bj3G,EAAK9K,aAAaihH,EAAwBhE,aAC1Cz7H,KAAKo+H,aAAaprH,KAAK4L,WAAW0K,EAAKzK,aAAa4gH,EAAwBhE,cAGpFnyG,EAAOA,EAAKG,oBA3ebmtG,cAAA4J,gBAA0B,GAG1B5J,cAAAC,cAAwB,YACxBD,cAAAU,SAAmB,OACnBV,cAAAW,YAAsB,UACtBX,cAAAS,WAAqB,SACrBT,cAAAoJ,YAAsB,UAEtBpJ,cAAA2H,UAAoB,QACpB3H,cAAA6H,SAAmB,OACnB7H,cAAA+H,WAAqB,SACrB/H,cAAAiI,aAAuB,WACvBjI,cAAAmI,SAAmB,OACnBnI,cAAAqI,UAAoB,QACpBrI,cAAAuI,aAAuB,WACvBvI,cAAAyI,UAAoB,QACpBzI,cAAA2J,UAAoB,QArB/B3J,cAAAh7G,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QlGuk5BxB2sG,gBkGrk5B2B5H,EAAA/kG,MAAtB5pB,GAAAu2H,cAAaA,CAkf1B,IAAM6I,IACFrF,WAAY,QACZC,UAAW,OACXC,SAAU,MACVC,SAAU,MACVC,gBAAiB,YACjBC,YAAa,SACbC,UAAW,OACXC,OAAQ,IACRC,OAAQ,IACRgF,aAAc,SACdC,aAAc,SACd5E,YAAa,SACbG,gBAAiB,YACjB6E,cAAe,UACfC,kBAAmB,aACnB7E,kBAAmB,cACnB8E,sBAAuB,iBACvBC,oBAAqB,eACrBC,wBAAyB,kBACzB/E,WAAY,QACZgF,iBAAkB,aAClBzF,cAAe,UACfC,cAAe,UACfC,WAAY,QACZC,YAAa,SACb8E,iBAAkB,aAClBC,kBAAmB,cACnBvE,YAAa,SACbC,WAAY,QACZiE,wBAAyB,mBACzBC,wBAAyB,qBlG6l4BvB,SAASr/H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmGhq5BjEna,EAAAzB,EAAwE,GAExE6mB,EAAA7mB,EAA6B,IAC7Bic,EAAAjc,EAA+B,IAC/BmY,EAAAnY,EAA0C,IAC1C+B,EAAA/B,EAAgC,GAChCgvH,EAAAhvH,EAA4B,IAExBsgI,EAAmBh9H,OAAe,OAGtCyqH,EAAA,SAAA/qH,GAAmC5B,EAAA2sH,cAAA/qH,EAmB/B,SAAA+qH,iBACI/qH,EAAA1C,KAAAT,MAjBIA,KAAA0gI,eAAyB,GAmB7B1gI,KAAK2gI,WAAY,EACjB3gI,KAAK00H,WAAY,EAEjB10H,KAAK4gI,gBAAkB,EACvB5gI,KAAK6gI,aACL7gI,KAAK8gI,QAAU,GAAIL,GAEnBzgI,KAAK+gI,eAAiB/gI,KAAK+gI,eAAe1sH,KAAKrU,MAC/CA,KAAKghI,kBAAoBhhI,KAAKghI,kBAAkB3sH,KAAKrU,MACrDA,KAAKihI,iBAAmBjhI,KAAKihI,iBAAiB5sH,KAAKrU,MACnDA,KAAKkhI,eAAiBlhI,KAAKkhI,eAAe7sH,KAAKrU,MAC/CA,KAAKmhI,gBAAkBnhI,KAAKmhI,gBAAgB9sH,KAAKrU,MACjDA,KAAKohI,UAAYphI,KAAKohI,UAAU/sH,KAAKrU,MACrCA,KAAKqhI,UAAYrhI,KAAKqhI,UAAUhtH,KAAKrU,MAm4C7C,MAh4CckuH,eAAAptH,UAAAsY,cAAV,WACIpZ,KAAK8gI,QAAQtR,UAGjB3uH,OAAAmD,eAAckqH,cAAAptH,UAAA,cnG0o5BTmD,ImG1o5BL,WACI,MAAOjE,MAAKm1H,YnG4o5BXhxH,YAAY,EACZC,cAAc,ImG1o5BZ8pH,cAAAptH,UAAAkd,aAAP,SAAoBF,GAChB9d,KAAK2B,OAAOmc,IAShBowG,cAAAptH,UAAAa,OAAA,SAAOmc,GAgDH,GA/CA9d,KAAKsZ,OAAOyE,aAAaD,GAQrBA,EAAKU,aAAa,UAClBxe,KAAKshI,MAAQprH,SAAS4H,EAAKe,aAAa,QAAS,KA2BjDf,EAAKU,aAAa,eAClBxe,KAAKw0H,WAAat+G,SAAS4H,EAAKe,aAAa,gBAU7Cf,EAAKU,aAAa,UAAYV,EAAKU,aAAa,aAC5CV,EAAKU,aAAa,UAClBxe,KAAKgwH,OAAwBhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAa,UACnE7e,KAAKm1H,WAAan1H,KAAKgwH,OAAOlyG,KAAKI,WAEnCle,KAAKgwH,OAAwBhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAa,WACnE7e,KAAKm1H,WAAan1H,KAAKgwH,OAAOlyG,KAAKI,UAGpB,MAAfle,KAAKgwH,QAAgB,CAErB,IADA,GAAI1mG,GAAgBtpB,KAAKgwH,OAAOlyG,KAAKyL,kBACtB,MAARD,GAAc,CACjB,GAAsB,YAAlBA,EAAKpL,SAAwB,CAC7B,GAAIqjH,GAA0B,GAAIC,QAAOltH,OACzCtU,MAAK6gI,UAAU7tH,KAAKuuH,EAGpB,KADA,GAAIE,GAAuBn4G,EAAKC,kBACV,MAAfk4G,GAAqB,CACxB,OAAQA,EAAYvjH,UAChB,IAAK,OACD,GAAIujH,EAAYjjH,aAAa,QAAS,CAClC,GAAIkjH,GAAsB9/H,EAAAsgB,WAAWC,YACjCs/G,EAAY5iH,aAAa,QAET,KAAhB6iH,EAAKx1H,SACLq1H,EAAQG,KAAO,GAAIF,QAAOG,KAAKD,EAAK,GAAIA,EAAK,SAQ9C,IACHD,EAAYjjH,aAAa,cACzBijH,EAAYjjH,aAAa,WAC3B,CACE,GAAIojH,GAA2BhgI,EAAAsgB,WAAWC,YACtCs/G,EAAY5iH,aAAa,cAEzBgjH,EAAyBjgI,EAAAsgB,WAAWC,YACpCs/G,EAAY5iH,aAAa,WAE7B0iH,GAAQG,KAAO,GAAIF,QAAOG,KACtB,GAAIH,QAAOM,KAAKF,EAAU,GAAIA,EAAU,IACxC,GAAIJ,QAAOM,KAAKD,EAAQ,GAAIA,EAAQ,KAO5C,KACJ,KAAK,eACD7hI,KAAK+hI,mBAAmBN,EAAazhI,KAAK6gI,UAAU7gI,KAAK6gI,UAAU30H,OAAS,GAC5E,MACJ,KAAK,aACDlM,KAAKgiI,iBAAiBP,EAAazhI,KAAK6gI,UAAU7gI,KAAK6gI,UAAU30H,OAAS,IAOlFu1H,EAAcA,EAAYh4G,mBAG1BH,EAAK9K,aAAa,QAClB+iH,EAAQ9pH,KAAK6R,EAAKzK,aAAa,SAE/B0iH,EAAQ9pH,OAGR6R,EAAK9K,aAAa,OAClB+iH,EAAW,EAAEriH,EAAIhJ,SAASoT,EAAKzK,aAAa,OAG5CyK,EAAK9K,aAAa,OAClB+iH,EAAW,EAAEniH,EAAIlJ,SAASoT,EAAKzK,aAAa,OAGpDyK,EAAOA,EAAKG,mBAGhB,GAAsB,MAAlBzpB,KAAK6gI,UAAmB,CACxB,IAAK,GAAI9gI,GAAI,EAAGA,EAAIC,KAAK6gI,UAAU30H,OAAQnM,IACvCC,KAAK8gI,QAAQmB,WAAWjiI,KAAK6gI,UAAU9gI,GAG3CC,MAAKkiI,UAAY,GAAIV,QAAO5yH,SAAS,QAAS5O,KAAK8gI,SACnD9gI,KAAKkiI,UAAUnB,eAAiB/gI,KAAK+gI,eACrC/gI,KAAKkiI,UAAUlB,kBAAoBhhI,KAAKghI,kBACxChhI,KAAKkiI,UAAUjB,iBAAmBjhI,KAAKihI,iBACvCjhI,KAAKkiI,UAAUhB,eAAiBlhI,KAAKkhI,eACrClhI,KAAK2gI,WAAY,EACjB3gI,KAAK0Z,cAajB,GAAIoE,EAAKU,aAAa,UACdxe,KAAKmiI,eAAgB,CAOrB,GANsB,MAAlBniI,KAAKkiI,WACLliI,KAAKkiI,UAAUxsH,OAGnB1V,KAAKoiI,eAEiB,MAAlBpiI,KAAK6gI,WAAqB7gI,KAAK6gI,UAAU30H,OAAS,GAC9C4R,EAAKU,aAAa,QAClB,IAAK,GAAIze,GAAY,EAAGA,EAAIC,KAAK6gI,UAAU30H,OAAQnM,IAC/CC,KAAK6gI,UAAU9gI,GAAG0X,KAAKqG,EAAKe,aAAa,QAI/B,OAAlB7e,KAAKkiI,YACLliI,KAAKkiI,UAAUvsH,QACf3V,KAAK00H,WAAY,EACjB10H,KAAK2gI,WAAY,EACjB3gI,KAAKqa,eAKbyD,EAAKU,aAAa,cAClBxe,KAAK2gI,WAAY,EACjB3gI,KAAK00H,WAAY,GAGjB52G,EAAKU,aAAa,SAClBxe,KAAK0V,QAILw4G,cAAAptH,UAAAigI,eAAR,WACI,GAAIsB,GAAWriI,KAAK6gI,UAAU,EAEK,UAA/BwB,EAAyB,gBAAiD,IAAjCA,EAAoB,UAAEn2H,SAC/DlM,KAAK2gI,WAAY,EACjB3gI,KAAK0Z,aACL1Z,KAAKkiI,UAAUxsH,OAEf1V,KAAKoiI,iBAILlU,cAAAptH,UAAAkgI,kBAAR,SAA0BlL,GACtB,GAAI91H,KAAK00H,aAAc,EAAO,CAC1BoB,EAASwM,OAAS,KACK,MAAnBxM,EAASwM,SACa,MAAlBtiI,KAAKuiI,WAAqBviI,KAAKuiI,UAAUr2H,OAAS,GAClDgiH,cAAcsU,KAAKxiI,KAAK0gI,gBAAgB1tH,KAAK8iH,EAASwM,QACtDtiI,KAAKsZ,OAAOmN,YAAYqvG,EAASwM,UAEjCpU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,IAAIzvH,KAAK8iH,EAASwM,QACrEtiI,KAAKsZ,OAAOmN,YAAYqvG,EAASwM,SAGzC,IAAII,GAAc,MACI,OAAlB1iI,KAAKuiI,WAAqBviI,KAAKuiI,UAAUr2H,OAAS,GACH,MAA3CgiH,cAAcsU,KAAKxiI,KAAK0gI,kBACxBxS,cAAcsU,KAAKxiI,KAAK0gI,oBAQ2B,IAAnDxS,cAAcsU,KAAKxiI,KAAK0gI,gBAAgBx0H,QACxCw2H,EAAiB,GAAIv4H,MAAKooH,OAAOC,eAAexyH,KAAKuiI,WACrDG,EAAezkH,KAAOje,KAAK0gI,gBAE3BgC,EAAiBxU,cAAcsU,KAAKxiI,KAAK0gI,gBAAgBn1G,QAG7Dm3G,EAAe70C,MAAO,EACtB60C,EAAenS,eAAiBvwH,KAAK4gI,gBACrC8B,EAAermG,SAE+C,MAA1D6xF,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,MACnDvU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,QAGe,IAAlEvU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,IAAIv2H,QACvDw2H,EAAiB,GAAIv4H,MAAK6W,OAAO80G,EAAS/qH,QAC1C23H,EAAezkH,KAAO63G,EAAS/qH,OAAO03H,gBAAgB,IAEtDC,EAAiBxU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,IAAIl3G,SAG9D,MAAdvrB,KAAKshI,QACLoB,EAAeh5G,KAAO1pB,KAAKshI,OAGR,MAAnBthI,KAAKw0H,aACLkO,EAAe/4G,UAAYwlG,EAAAyB,YAAYC,aAAa7wH,KAAKw0H,aAG7DkO,EAAe5iH,SAAU,EACzBg2G,EAASwM,OAASI,EAClB1iI,KAAKsZ,OAAOrH,SAASywH,KAIrBxU,cAAAptH,UAAAmgI,iBAAR,SAAyBnL,GACL,MAAZA,GAAuC,MAAnBA,EAASwM,QAC7BtiI,KAAKmhI,gBAAgBrL,EAASwM,OAAQxM,IAItC5H,cAAAptH,UAAAogI,eAAR,SAAuBpL,GACI,MAAnBA,EAASwM,SACTxM,EAASwM,OAAOxiH,SAAU,EACtBg2G,EAASwM,iBAAkBn4H,MAAKooH,OAAOC,gBACvCsD,EAASwM,OAAO5sH,OAEpB1V,KAAKsZ,OAAOmN,YAAYqvG,EAASwM,SAGrCxM,EAASwM,OAAS,KAClBxM,EAAS6M,MAAO,EAChB7M,EAAW,MAUP5H,cAAAptH,UAAAqgI,gBAAR,SAAwBuB,EAAqB5M,GAET,MAA5B4M,EAAe1rH,WACdpV,EAAAqG,MAAMC,kBAAkBw6H,IACxB9gI,EAAAqG,MAAMC,kBAAkB4tH,GAWzBA,EAAS6M,MAAO,GAThBD,EAAenjH,SAASL,EAAI42G,EAASl1H,EAAEse,EACvCwjH,EAAenjH,SAASH,EAAI02G,EAASl1H,EAAEwe,EACvCsjH,EAAejxH,MAAMyN,EAAI42G,EAASrkH,MAClCixH,EAAejxH,MAAM2N,EAAI02G,EAASrkH,MAClCixH,EAAevR,OAAOjyG,EAAI,GAC1BwjH,EAAevR,OAAO/xG,EAAI,GAC1BsjH,EAAevkH,MAAQ23G,EAAS33G,MAChCukH,EAAehkH,SAAYo3G,EAASp3G,SAAWK,KAAKsH,GAAM,MAWlE6nG,cAAAptH,UAAA4U,KAAA,WACI1V,KAAK2gI,WAAY,EACjB3gI,KAAK00H,WAAY,EACjB10H,KAAK0Z,aAEiB,MAAlB1Z,KAAKkiI,WACLliI,KAAKkiI,UAAUxsH,OAGnB1V,KAAKoiI,gBAGTlU,cAAAptH,UAAAshI,aAAA,WACI,GAA4B,MAAxBpiI,KAAKsZ,OAAO6D,SAEZ,KAAuC,IAAhCnd,KAAKsZ,OAAO6D,SAASjR,QACO,MAA3BlM,KAAKsZ,OAAO6D,SAAS,KACC,MAAlBnd,KAAKuiI,WAAqBviI,KAAKuiI,UAAUr2H,OAAS,GACjDlM,KAAKsZ,OAAO6D,SAAS,GAAkCzH,OACxDw4G,cAAcsU,KAAKxiI,KAAK0gI,gBAAgB1tH,KAAKhT,KAAKsZ,OAAO6D,SAAS,KAElE+wG,cAAcsU,KAAKxiI,KAAKsZ,OAAO6D,SAAS,GAAGc,MAAMjL,KAAKhT,KAAKsZ,OAAO6D,SAAS,IAE/End,KAAKsZ,OAAOmN,YAAYzmB,KAAKsZ,OAAO6D,SAAS,MAM7D+wG,cAAAptH,UAAAoc,gBAAA,SAAgBlY,GAMZ,GALAhF,KAAK2gI,WAAY,EACjB3gI,KAAK00H,WAAY,EACjB10H,KAAK0Z,aACL1Z,KAAKuiI,UAAY,KAEK,MAAlBviI,KAAK6gI,WAAqB7gI,KAAK6gI,UAAU30H,OAAS,EAClD,IAAK,GAAInM,GAAI,EAAGA,EAAIC,KAAK6gI,UAAU30H,OAAQnM,IACd,MAArBC,KAAK6gI,UAAU9gI,KACfC,KAAK8gI,QAAQ8B,cAAc5iI,KAAK6gI,UAAU9gI,IAC1CC,KAAK6gI,UAAU9gI,GAAGgd,UAClB/c,KAAK6gI,UAAU9gI,GAAK,KASV,OAAlBC,KAAKkiI,YACLliI,KAAKkiI,UAAUxsH,OACf1V,KAAKkiI,UAAY,MAGrBliI,KAAK8gI,QAAQ/jH,UACb/c,KAAK8gI,QAAU,KAEf9gI,KAAKoiI,gBAWDlU,cAAAptH,UAAAihI,mBAAR,SAA2BjkH,EAAeyjH,GAEtC,IADA,GAAIj4G,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAK,cACD,GAAI2kH,GAAkC7iI,KAAK8iI,eAAex5G,EACvC,OAAfu5G,GACAtB,EAAQwB,cAAcF,EAM1B,MACJ,KAAK,kBACD7iI,KAAKgjI,mBAAmB15G,EACxB,MACJ,KAAK,SACD,GAAIsuG,GAAwB53H,KAAKijI,UAAU35G,EAC7B,OAAVsuG,GACA2J,EAAQwB,cAAcnL,EAM1B,MACJ,KAAK,OACD,GAAIsL,GAAoBljI,KAAKmjI,QAAQ75G,EACzB,OAAR45G,GACA3B,EAAQwB,cAAcG,EAM1B,MACJ,KAAK,OACD,GAAIzK,GAAoBz4H,KAAKojI,QAAQ95G,EACzB,OAARmvG,GACA8I,EAAQwB,cAActK,EAM1B,MACJ,KAAK,WACD,GAAIl5G,GAA4Bvf,KAAKqjI,YAAY/5G,EACjC,OAAZ/J,GACAgiH,EAAQwB,cAAcxjH,EAM1B,MACJ,KAAK,WACD,GAAI+jH,GAA4BtjI,KAAKujI,YAAYj6G,EACjC,OAAZg6G,GACA/B,EAAQwB,cAAcO,GAYlCh6G,EAAOA,EAAKG,qBAaZykG,cAAAptH,UAAAgiI,eAAR,SAAuBhlH,GACnB,GAAIA,EAAKU,aAAa,SAAU,CAG5B,IAAK,GAFDwvG,GAAqBlwG,EAAKe,aAAa,SAASmH,MAAM,KACtDw9G,KACKzjI,EAAY,EAAGA,EAAIiuH,EAAI9hH,OAAQnM,IAAK,CACzC,GAAIq2H,GAAapI,EAAIjuH,GACjBgP,EAAwB7M,EAAAsD,gBAAgByJ,uBAAuBmnH,EACpD,OAAXrnH,GACAy0H,EAAYxwH,KAAKjE,GAGzB,MAAmB,OAAfy0H,GAAuBA,EAAYt3H,OAAS,EACrC,GAAIs1H,QAAOiC,YAAYD,GAEvB,KAQf,MAAO,OAWHtV,cAAAptH,UAAAkiI,mBAAR,SAA2BllH,GACvB,GAAIA,EAAKU,aAAa,cAAgBV,EAAKU,aAAa,UAAW,CAC3DV,EAAKU,aAAa,WAClBxe,KAAK4gI,gBAAkBhiH,WAAWd,EAAKe,aAAa,WAGxD7e,KAAK0gI,eAAiB5iH,EAAKe,aAAa,aAExC7e,KAAKuiI,YACL,KAAK,GAAIxiI,GAAI,EAAGA,EAAImW,SAAS4H,EAAKe,aAAa,WAAa,EAAG9e,IAAK,CAChE,GAAIuN,GAAMvN,EAAI,GAAK,IAAMA,EAAIA,EACzBgP,EAAwB5E,KAAKklH,QAAQqU,UAAU5lH,EAAKe,aAAa,aAAe,KAAOvR,EAC3FtN,MAAKuiI,UAAUvvH,KAAKjE,MAaxBm/G,cAAAptH,UAAAqiI,QAAR,SAAgBrlH,GACZ,GAAIA,EAAKU,aAAa,QAAS,CAC3B,GAAIwvG,GAAqBpsH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,QAClE,IAAmB,IAAfmvG,EAAI9hH,OACJ,MAAO,IAAIs1H,QAAOmC,KAAK3V,EAAI,GAAIA,EAAI,GAAIA,EAAI,GACxC,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOmC,KAAK3V,EAAI,GAAIA,EAAI,GAChC,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOmC,KAAK3V,EAAI,IAWnC,MAAO,OAWHE,cAAAptH,UAAAmiI,UAAR,SAAkBnlH,GACd,GAAIA,EAAKU,aAAa,UAAW,CAC7B,GAAIwvG,GAAqBpsH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,UAClE,IAAmB,IAAfmvG,EAAI9hH,OACJ,MAAO,IAAIs1H,QAAOoC,OAAO5V,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAC1C,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOoC,OAAO5V,EAAI,GAAIA,EAAI,GAClC,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOoC,OAAO5V,EAAI,IAWrC,MAAO,OAWHE,cAAAptH,UAAAsiI,QAAR,SAAgBtlH,GACZ,GAAIA,EAAKU,aAAa,QAAS,CAC3B,GAAIwvG,GAAqBpsH,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,QAClE,IAAmB,IAAfmvG,EAAI9hH,OACJ,MAAO,IAAIs1H,QAAOqC,KAAK7V,EAAI,GAAIA,EAAI,GAAIA,EAAI,GACxC,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOqC,KAAK7V,EAAI,GAAIA,EAAI,GAChC,IAAmB,IAAfA,EAAI9hH,OACX,MAAO,IAAIs1H,QAAOqC,KAAK7V,EAAI,IAWnC,MAAO,OAaHE,cAAAptH,UAAAuiI,YAAR,SAAoBvlH,GAChB,GAAIgmH,GAAgBhmH,EAAKyL,iBACzB,OAAY,OAARu6G,EACO,GAAItC,QAAOuC,SAAS/jI,KAAKgkI,QAAQF,IAMrC,MAWH5V,cAAAptH,UAAAyiI,YAAR,SAAoBzlH,GAChB,GAAImmH,GACAC,EACAnwG,CAsBJ,IApBIjW,EAAKe,aAAa,UAClBolH,EAAOriI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,UAOhDf,EAAKe,aAAa,YAClBqlH,EAAStiI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,YAOlDf,EAAKe,aAAa,UAClBkV,EAAOjW,EAAKe,aAAa,SAGjB,MAARolH,GAA0B,MAAVC,EAAgB,CAChC,GAAIC,EAEAA,GADgB,IAAhBF,EAAK/3H,OACM,GAAIs1H,QAAOM,KAAKmC,EAAK,GAAIA,EAAK,IAE9BA,EAAK,EAGpB,IAAIG,EAMJ,OAJIA,GADkB,IAAlBF,EAAOh4H,OACM,GAAIs1H,QAAOM,KAAKoC,EAAO,GAAIA,EAAO,IAElCA,EAAO,GAEZ,MAARnwG,EACO,GAAIytG,QAAO6C,SAASF,EAAUC,EAAYrwG,GAE1C,GAAIytG,QAAO6C,SAASF,EAAUC,GAQ7C,MAAO,OASHlW,cAAAptH,UAAAkjI,QAAR,SAAgBlmH,GACZ,OAAQA,EAAKI,UACT,IAAK,WACD,GAAIomH,GACAC,EACAC,EACAC,CAkCJ,IAhCI3mH,EAAKU,aAAa,OAClB8lH,EAAYpuH,SAAS4H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,OAClB+lH,EAAYruH,SAAS4H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,WAClBgmH,EAAgBtuH,SAAS4H,EAAKe,aAAa,WAO3Cf,EAAKU,aAAa,YAClBimH,EAAiBvuH,SAAS4H,EAAKe,aAAa,YAO/B,MAAbylH,GAAkC,MAAbC,GAAsC,MAAjBC,GAA2C,MAAlBC,EACnE,MAAO,IAAIjD,QAAOkD,SAASJ,EAAWC,EAAWC,EAAeC,EAMpE,MACJ,KAAK,WACD,GAAIE,GACAC,EACAC,EACAC,EACAC,CAsCJ,IApCIjnH,EAAKU,aAAa,OAClBmmH,EAAYzuH,SAAS4H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,OAClBomH,EAAY1uH,SAAS4H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,WAClBqmH,EAAgB3uH,SAAS4H,EAAKe,aAAa,WAO3Cf,EAAKU,aAAa,YAClBsmH,EAAiB5uH,SAAS4H,EAAKe,aAAa,YAO5Cf,EAAKU,aAAa,eAClBumH,EAAoBjnH,EAAKe,aAAa,cAGzB,MAAb8lH,GAAkC,MAAbC,GAAsC,MAAjBC,GAA2C,MAAlBC,EACnE,MAAyB,OAArBC,EACO,GAAIvD,QAAOwD,SACdL,EACAC,EACAC,EACAC,EACAC,GAGG,GAAIvD,QAAOwD,SAASL,EAAWC,EAAWC,EAAeC,EAQxE,MACJ,KAAK,aACD,GAAIG,GACAC,EACAC,CA0BJ,IAxBIrnH,EAAKU,aAAa,OAClBymH,EAAc/uH,SAAS4H,EAAKe,aAAa,OAOzCf,EAAKU,aAAa,OAClB0mH,EAAchvH,SAAS4H,EAAKe,aAAa,OAOzCf,EAAKU,aAAa,YAClB2mH,EAAmBjvH,SAAS4H,EAAKe,aAAa,YAO/B,MAAfomH,GAAsC,MAAfC,GAA2C,MAApBC,EAC9C,MAAO,IAAI3D,QAAO4D,WAAWH,EAAaC,EAAaC,GAYnE,MAAO,OAWHjX,cAAAptH,UAAAkhI,iBAAR,SAAyBlkH,EAAeyjH,GAEpC,IADA,GAAIj4G,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAK,YACGoL,EAAK9K,aAAa,OAClB+iH,EAAQpL,aAAan2H,KAAKohI,UAAUxiH,WAAW0K,EAAKzK,aAAa,UAEjE0iH,EAAQpL,aAAan2H,KAAKohI,UAAU,GAExC,MACJ,KAAK,YACDG,EAAQpL,aAAan2H,KAAKqhI,YAC1B,MACJ,KAAK,QACD,GAAIljH,GAAsBne,KAAKqlI,SAAS/7G,EAC3B,OAATnL,GACAojH,EAAQpL,aAAah4G,EAMzB,MACJ,KAAK,QACD,GAAI1M,GAAsBzR,KAAKslI,SAASh8G,EAC3B,OAAT7X,GACA8vH,EAAQpL,aAAa1kH,EAMzB,MACJ,KAAK,SACD,GAAI8zH,GAAwBvlI,KAAKwlI,UAAUl8G,EAC7B,OAAVi8G,GACAhE,EAAQpL,aAAaoP,EAMzB,MACJ,KAAK,QACD,GAAI7+H,GAAsB1G,KAAKylI,SAASn8G,EAC3B,OAAT5iB,GACA66H,EAAQpL,aAAazvH,EAMzB,MACJ,KAAK,YACD,GAAIg/H,GAA8B1lI,KAAK2lI,aAAar8G,EACnC,OAAbo8G,GACAnE,EAAQpL,aAAauP,EAMzB,MACJ,KAAK,cACD,GAAIE,GAAkC5lI,KAAK6lI,eAAev8G,EACvC,OAAfs8G,GACArE,EAAQpL,aAAayP,EAMzB,MACJ,KAAK,UACD,GAAIE,GAA0B9lI,KAAK+lI,WAAWz8G,EAC/B,OAAXw8G,GACAvE,EAAQpL,aAAa2P,GAYjCx8G,EAAOA,EAAKG,qBAYpBykG,cAAAptH,UAAAsgI,UAAA,SAAU4E,GACN,GAAI9tH,GAAYlY,IAChB,QACI8D,WAAY,SAAUgyH,KACtBmQ,eAAgB,SAAUnQ,GAClBA,EAASkQ,KAAOA,IAChBlQ,EAAoB,UAAU,OAAI,EAClCA,EAAoB,UAAU,OAAI,GAGlCA,EAASkQ,KAAOlQ,EAAS2C,OACF,MAAnB3C,EAASwM,SACa,MAAlBpqH,EAAKqqH,WAAqBrqH,EAAKqqH,UAAUr2H,OAAS,EAClDgiH,cAAcsU,KAAKtqH,EAAKwoH,gBAAgB1tH,KAAK8iH,EAASwM,QAEtDpU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,IAAIzvH,KAAK8iH,EAASwM;AAEzEpqH,EAAKoB,OAAOmN,YAAYqvG,EAASwM,SAErCxM,EAASwM,OAAS,KAClBxM,EAAS6M,MAAO,EAChB7M,EAAW,SAa3B5H,cAAAptH,UAAAugI,UAAA,WACI,GAAInpH,GAAYlY,IAChB,QACI8D,WAAY,SAAUgyH,GAClBA,EAASrkH,MAAQ,GAErBw0H,eAAgB,SAAUnQ,GAClBA,EAASoQ,QAAU,EAAI,EACvBpQ,EAASrkH,MAAgC,GAAvB,EAAIqkH,EAASoQ,QACxBpQ,EAASoQ,QAAU,EAAI,IAC9BpQ,EAASrkH,MAA0B,EAAlBqkH,EAASoQ,QAE1BpQ,EAASrkH,MAAQ,IACM,MAAnBqkH,EAASwM,SACa,MAAlBtiI,KAAKuiI,WAAqBviI,KAAKuiI,UAAUr2H,OAAS,EAClDgiH,cAAcsU,KAAKxiI,KAAK0gI,gBAAgB1tH,KAAK8iH,EAASwM,QAEtDpU,cAAcsU,KAAK1M,EAAS/qH,OAAO03H,gBAAgB,IAAIzvH,KAAK8iH,EAASwM,QAEzEpqH,EAAKoB,OAAOmN,YAAYqvG,EAASwM,SAErCxM,EAASwM,OAAS,KAClBxM,EAAS6M,MAAO,EAChB7M,EAAW,SAcnB5H,cAAAptH,UAAAukI,SAAR,SAAiBvnH,GACb,GAAInI,GACAsoB,EACAw6F,CAsBJ,OApBI36G,GAAKU,aAAa,WAClB7I,EAAQiJ,WAAWd,EAAKe,aAAa,WAOrCf,EAAKU,aAAa,SAClByf,EAAMrf,WAAWd,EAAKe,aAAa,SAOnCf,EAAKU,aAAa,UAClBi6G,EAAO,GAAI+I,QAAOqC,KAAKjlH,WAAWd,EAAKe,aAAa,WAG3C,MAATlJ,GAAwB,MAAPsoB,EACL,MAARw6F,EACO,GAAI+I,QAAO2E,MAAMxwH,EAAOsoB,EAAKw6F,GAE7B,GAAI+I,QAAO2E,MAAMxwH,EAAOsoB,GAQhC,MAWHiwF,cAAAptH,UAAAwkI,SAAR,SAAiBxnH,GACb,GAAInI,GACAsoB,EACAw6F,CAkBJ,IAhBI36G,EAAKU,aAAa,WAClB7I,EAAQ/T,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WAOjDf,EAAKU,aAAa,SAClByf,EAAMr8B,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,SAG/Cf,EAAKU,aAAa,UAClBi6G,EAAO,GAAI+I,QAAOqC,KAAKjlH,WAAWd,EAAKe,aAAa,WAG3C,MAATlJ,EAAe,CACf,GAAIywH,EAEAA,GADiB,IAAjBzwH,EAAMzJ,OACM,GAAIs1H,QAAOM,KAAKnsH,EAAM,GAAIA,EAAM,IAEhCA,EAAM,EAGtB,IAAI0wH,EASJ,OARW,OAAPpoG,IAEIooG,EADe,IAAfpoG,EAAI/xB,OACM,GAAIs1H,QAAOM,KAAK7jG,EAAI,GAAIA,EAAI,IAE5BA,EAAI,IAIL,MAAbmoG,GAAgC,MAAXC,GAA2B,MAAR5N,EACjC,GAAI+I,QAAO8E,MAAMF,EAAWC,EAAS5N,GACxB,MAAb2N,GAAgC,MAAXC,EACrB,GAAI7E,QAAO8E,MAAMF,EAAWC,GAE5B,GAAI7E,QAAO8E,MAAMF,GAQhC,MAAO,OAWHlY,cAAAptH,UAAA0kI,UAAR,SAAkB1nH,GACd,GAAInI,GACAsoB,EACApsB,CA0BJ,IAxBIiM,EAAKU,aAAa,WAClB7I,EAAQ/T,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WAOjDf,EAAKU,aAAa,SAClByf,EAAMr8B,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,SAO/Cf,EAAKU,aAAa,WAClB3M,EAAQiM,EAAKe,aAAa,UAOjB,MAATlJ,GAAwB,MAAPsoB,GAAwB,MAATpsB,EAAe,CAC/C,GAAIu0H,EAEAA,GADiB,IAAjBzwH,EAAMzJ,OACM,GAAIs1H,QAAOM,KAAKnsH,EAAM,GAAIA,EAAM,IAEhCA,EAAM,EAGtB,IAAI0wH,EAOJ,OALIA,GADe,IAAfpoG,EAAI/xB,OACM,GAAIs1H,QAAOM,KAAK7jG,EAAI,GAAIA,EAAI,IAE5BtoB,EAAM,GAGb,GAAI6rH,QAAO+E,OAAOH,EAAWC,EAASx0H,GAOjD,MAAO,OAWHq8G,cAAAptH,UAAA+kI,eAAR,SAAuB/nH,GACnB,GAAI0oH,GACAC,EACAl5G,CA0BJ,OAxBIzP,GAAKU,aAAa,YAClBgoH,EAAS5nH,WAAWd,EAAKe,aAAa,YAOtCf,EAAKU,aAAa,YAClBioH,EAAS7nH,WAAWd,EAAKe,aAAa,YAOtCf,EAAKU,aAAa,WAClB+O,EAAQ3O,WAAWd,EAAKe,aAAa,WAO3B,MAAV2nH,GAA4B,MAAVC,GAA2B,MAATl5G,EAC7B,GAAIi0G,QAAOkF,YAAYF,EAAQC,EAAQl5G,GAO3C,MAWH2gG,cAAAptH,UAAAilI,WAAR,SAAmBjoH,GACf,GAAIgoH,EAUJ,OARIhoH,GAAKU,aAAa,aAClBsnH,EAAUlnH,WAAWd,EAAKe,aAAa,aAO5B,MAAXinH,EACO,GAAItE,QAAOmF,QAAQb,GAOvB,MAWH5X,cAAAptH,UAAA2kI,SAAR,SAAiB3nH,GACb,GAAI/d,GACAiuH,EACA4Y,EACAlgI,KACAmgI,IAEJ,IAAI/oH,EAAKU,aAAa,SAElB,IADAwvG,EAAMlwG,EAAKe,aAAa,SAASmH,MAAM,KAClCjmB,EAAI,EAAGA,EAAIiuH,EAAI9hH,OAAQnM,IACxB2G,EAAMsM,KAAKpR,EAAA4I,YAAYs8H,SAAS9Y,EAAIjuH,IAQ5C,IAAI+d,EAAKU,aAAa,YAElB,IADAooH,EAAS9oH,EAAKe,aAAa,YAAYmH,MAAM,KACxCjmB,EAAI,EAAGA,EAAI6mI,EAAO16H,OAAQnM,IAC3B8mI,EAAS7zH,KAAKpR,EAAA4I,YAAYs8H,SAASF,EAAO7mI,IAIlD,OAAI2G,GAAMwF,OAAS,EACX26H,EAAS36H,OAAS,EACX,GAAIs1H,QAAOptB,MAAM1tG,EAAOmgI,GAExB,GAAIrF,QAAOptB,MAAM1tG,GAQzB,MAaHwnH,cAAAptH,UAAA6kI,aAAR,SAAqB7nH,GACjB,GAAIgmH,GACA/vG,CAcJ,OAZ8B,OAA1BjW,EAAKyL,oBACLu6G,EAAO9jI,KAAKgkI,QAAQlmH,EAAKyL,oBAOzBzL,EAAKU,aAAa,UAClBuV,EAAOjW,EAAKe,aAAa,SAGjB,MAARilH,EACY,MAAR/vG,EACO,GAAIytG,QAAOuF,UAAUjD,EAAM/vG,GAE3B,GAAIytG,QAAOuF,UAAUjD,GAQ7B,MASD5V,cAAAptH,UAAAsX,IAAV,SAAcC,KAOd61G,cAAAptH,UAAAwc,MAAA,WACI,GAAIjU,GAAyB,GAAI6kH,cAEjC7kH,GAAQiQ,OAAOiG,SAASL,EAAIlf,KAAKsZ,OAAOiG,SAASL,EACjD7V,EAAQiQ,OAAOiG,SAASH,EAAIpf,KAAKsZ,OAAOiG,SAASH,EACjD/V,EAAQiQ,OAAOqG,MAAMT,EAAIlf,KAAKsZ,OAAOqG,MAAMT,EAC3C7V,EAAQiQ,OAAOqG,MAAMP,EAAIpf,KAAKsZ,OAAOqG,MAAMP,EAC3C/V,EAAQiQ,OAAO7H,MAAMyN,EAAIlf,KAAKsZ,OAAO7H,MAAMyN,EAC3C7V,EAAQiQ,OAAO7H,MAAM2N,EAAIpf,KAAKsZ,OAAO7H,MAAM2N,EAC3C/V,EAAQiQ,OAAOwG,QAAU9f,KAAKsZ,OAAOwG,OACrC,IAAIhC,GAAgB3U,SAASkX,cAAc,WAK3C,OAJAvC,GAAKxR,aAAa,SAAUtM,KAAKm1H,YAEjC9rH,EAAQ1H,OAAOmc,GACfzU,EAAQiQ,OAAOuE,gBACRxU,GAn6CJ6kH,cAAAsU,QAFXtU,cAAAtyG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBnGqy7BxBsnG,gBmGpy7B2B51G,EAAAgD,0BAAtBjb,GAAA6tH,cAAaA,GnG4y7BpB,SAAS5tH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoGn07BjEna,EAAAzB,EAAyD,GACzDic,EAAAjc,EAA+B,IAC/B0sB,EAAA1sB,EAA6B,IAC7Bqb,EAAArb,EAA4B,IAC5B+B,EAAA/B,EAAgC,GAEhC6mB,EAAA7mB,EAA6B,IAC7Bkc,EAAAlc,EAAuB,IACvBgvH,EAAAhvH,EAA4B,IAG5BguH,EAAA,SAAAhrH,GAAiC5B,EAAA4sH,YAAAhrH,EA4B7B,SAAAgrH,eACIhrH,EAAA1C,KAAAT,MAHIA,KAAAgP,UAAoB,EAKxBhP,KAAKgnI,MAAQ,KACbhnI,KAAKinI,aAAe,IACpBjnI,KAAKknI,iBACLlnI,KAAKmnI,eACLnnI,KAAKonI,qBACLpnI,KAAKw0H,WAAa,EAClBx0H,KAAKqnI,gBAAkB,KACvBrnI,KAAKsnI,OAAS,EACdtnI,KAAKshI,MAAQ,KACbthI,KAAKunI,WAAa,EAClBvnI,KAAKuxH,WAAY,EACjBvxH,KAAKwnI,YAAa,EAClBxnI,KAAK4vH,mBAAoB,EACzB5vH,KAAKyyB,SAKLzyB,KAAK2Z,MAAQ,EACb3Z,KAAKynI,YAAc,EACnBznI,KAAK0nI,WAAa,EAClB1nI,KAAK2nI,UACL3nI,KAAK4nI,aACL5nI,KAAK6nI,WAEL7nI,KAAKy0H,UAAW,EAEZvyH,EAAAsD,gBAAgBoJ,mBAAoBzE,MAAK6G,iBACzChR,KAAKgP,UAAW,GAuf5B,MAnfWm/G,aAAArtH,UAAAid,aAAP,SAAoBD,GAChB,IAAK9d,KAAKy0H,SAAU,CAoChB,GAnCAtxH,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAaspH,EAAsBC,gBACxC/nI,KAAKinI,aAAe/wH,SAAS4H,EAAKe,aAAaipH,EAAsBC,gBAGrEjqH,EAAKU,aAAaspH,EAAsB5S,cACxCl1H,KAAKw0H,WAAarF,EAAAyB,YAAYC,aAC1B36G,SAAS4H,EAAKe,aAAaipH,EAAsB5S,eAIrDp3G,EAAKU,aAAaspH,EAAsBE,aACxChoI,KAAKunI,WAAa3oH,WAAWd,EAAKe,aAAaipH,EAAsBE,aAGrElqH,EAAKU,aAAaspH,EAAsB/W,sBACxC/wH,KAAK4vH,kBAAoBhuH,EAAA4I,YAAY8D,aACjCwP,EAAKe,aAAaipH,EAAsB/W,sBAI5CjzG,EAAKU,aAAaspH,EAAsBG,QACxCjoI,KAAK4vH,mBAAoB,EACzB5vH,KAAKyyB,MAAQ7T,WAAWd,EAAKe,aAAaipH,EAAsBG,QAGhEnqH,EAAKU,aAAaspH,EAAsB9W,QACc,MAAlDlzG,EAAKe,aAAaipH,EAAsB9W,MACxChxH,KAAKshI,MAAQ,KAEbthI,KAAKshI,MAAQprH,SAAS4H,EAAKe,aAAaipH,EAAsB9W,MAAO,KAIzElzG,EAAKU,aAAaspH,EAAsBI,QAAS,CACjD,GAAIC,GAAanoI,KAAKooI,aAAatqH,EAAKe,aAAaipH,EAAsBI,SACvEG,EAAax7G,EAAAqX,aAAazB,cAAc0lG,EAE5CnoI,MAAKknI,cAAgBlnI,KAAKsoI,oBAAoBD,EAAYroI,KAAKinI,cAGnE,GAAInpH,EAAKU,aAAaspH,EAAsB3N,OAAQ,CAChD,GAAIoO,GAAczqH,EAAKe,aAAaipH,EAAsB3N,MAS1D,IARoC,IAAhCoO,EAAYp9G,QAAQ,UACpBnrB,KAAKqnI,gBAAkCrgH,EAAAM,aAAaC,OAAOghH,GAC/B,MAAxBvoI,KAAKqnI,kBACLkB,EAAcvoI,KAAKqnI,gBAAgBzb,UAAY,SAIvD5rH,KAAKwoI,SAAWtmI,EAAAsD,gBAAgByJ,uBAAuBs5H,GAClC,MAAjBvoI,KAAKwoI,SAAkB,CACvB,GAAiC,GAA7BxoI,KAAKknI,cAAch7H,OACnB,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKinI,aAAclnI,IAC3CC,KAAKknI,cAAcl0H,KACf,GAAI7I,MAAK8e,MAAMlK,KAAK+0B,MAAM9zC,KAAKwoI,SAAS7hI,OAAS3G,KAAKinI,aAAe,IAAMlnI,EAAG,GAK1FC,MAAKgnI,MAAQ,GAAI78H,MAAKs+H,KAAKC,KAAK1oI,KAAKwoI,SAAUxoI,KAAKknI,eAChDlnI,KAAKgP,WACLhP,KAAKgnI,MAAM2B,cAAgB,GAE/B3oI,KAAKgnI,MAAMr9G,UAAYwlG,EAAAyB,YAAYC,aAAa7wH,KAAKw0H,YAEnC,MAAdx0H,KAAKshI,QACLthI,KAAKgnI,MAAMt9G,KAAO1pB,KAAKshI,OAG3BthI,KAAKiS,SAASjS,KAAKgnI,QAI3BhnI,KAAKy0H,UAAW,IAQjBtG,YAAArtH,UAAA8nI,UAAP,SAAiB7/G,GACb/oB,KAAKonI,kBAAoBpnI,KAAKonI,kBAAkB9lI,OAAOynB,IAMpDolG,YAAArtH,UAAA+nI,UAAP,WACI,MAAO7oI,MAAKmnI,aAOThZ,YAAArtH,UAAAkd,aAAP,SAAoBF,GAChB,GAAI9d,KAAKy0H,SAAU,CAGf,GAFAtxH,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAaspH,EAAsBI,QAAS,CACjD,GAAIY,GAAmC9oI,KAAKooI,aACxCtqH,EAAKe,aAAaipH,EAAsBI,QAE5CloI,MAAKmnI,eAGDrpH,EAAKU,aAAaspH,EAAsBiB,iBACxCnnI,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaipH,EAAsBiB,iBAEjE/oI,KAAKmnI,YAAc2B,EAAcxnI,OAAOtB,KAAKonI,mBAAmBvwG,UAEhE72B,KAAKmnI,YAAcnnI,KAAKonI,kBAAkB9lI,OAAOwnI,GAErD9oI,KAAKonI,qBAoBT,GAhBItpH,EAAKU,aAAaspH,EAAsBkB,iBACxChpI,KAAKmnI,YAAcnnI,KAAKooI,aAAatqH,EAAKe,aAAaipH,EAAsBI,SAAS,GACtFloI,KAAKipI,aAAajpI,KAAKmnI,cAGvBrpH,EAAKU,aAAaspH,EAAsB9W,OACtB,MAAdhxH,KAAKgnI,QACiD,MAAlDlpH,EAAKe,aAAaipH,EAAsB9W,MACxChxH,KAAKshI,MAAQ,KAEbthI,KAAKshI,MAAQprH,SAAS4H,EAAKe,aAAaipH,EAAsB9W,MAAO,IAEzEhxH,KAAKgnI,MAAMt9G,KAAO1pB,KAAKshI,OAI3BxjH,EAAKU,aAAaspH,EAAsB3N,OAAQ,CAChD,GAAIoO,GAAczqH,EAAKe,aAAaipH,EAAsB3N,MACtB,KAAhCoO,EAAYp9G,QAAQ,UACpBnrB,KAAKqnI,gBAAkCrgH,EAAAM,aAAaC,OAAOghH,GAC/B,MAAxBvoI,KAAKqnI,kBACLkB,EAAcvoI,KAAKqnI,gBAAgBzb,UAAY,SAIvD5rH,KAAKwoI,SAAWtmI,EAAAsD,gBAAgByJ,uBAAuBs5H,GAClC,MAAjBvoI,KAAKwoI,UACa,MAAdxoI,KAAKgnI,QACLhnI,KAAKgnI,MAAMj4H,QAAU/O,KAAKwoI,UAyBtC,GApBI1qH,EAAKU,aAAaspH,EAAsBoB,eACxClpI,KAAKynI,YAAcvxH,SAAS4H,EAAKe,aAAaipH,EAAsBoB,eAOpEprH,EAAKU,aAAaspH,EAAsBqB,aACxCnpI,KAAK0nI,WAAa9oH,WAAWd,EAAKe,aAAaipH,EAAsBqB,aAOrErrH,EAAKU,aAAaspH,EAAsBsB,SACxCppI,KAAK2nI,OAAS/lI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaipH,EAAsBsB,SAG7EtrH,EAAKU,aAAaspH,EAAsBuB,UAExC,IAAK,GADDn6G,GAAWttB,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaipH,EAAsBuB,WACrEtpI,EAAI,EAAGA,EAAIC,KAAK2nI,OAAOz7H,OAAQnM,IACb,GAAnBmvB,EAAShjB,OACTlM,KAAK4nI,UAAU50H,MAAMkc,EAAS,GAAIA,EAAS,KAE3ClvB,KAAK4nI,UAAU50H,MAAMkc,EAAa,EAAJnvB,GAAQmvB,EAAa,EAAJnvB,EAAQ,IAKnE,IAAI+d,EAAKU,aAAaspH,EAAsBzlH,QAExC,IAAK,GADDinH,GAAS1nI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaipH,EAAsBzlH,SACnEtiB,EAAI,EAAGA,EAAIC,KAAK2nI,OAAOz7H,OAAQnM,IACf,GAAjBupI,EAAOp9H,OACPlM,KAAK6nI,QAAQ70H,MAAMs2H,EAAO,GAAIA,EAAO,KAErCtpI,KAAK6nI,QAAQ70H,MAAMs2H,EAAW,EAAJvpI,GAAQupI,EAAW,EAAJvpI,EAAQ,IAMzD+d,GAAKU,aAAaspH,EAAsBxW,WACxC1vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaipH,EAAsBxW,aAEjEtxH,KAAKuxH,WAAY,GAIjBzzG,EAAKU,aAAaspH,EAAsBrW,OACxC7vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaipH,EAAsBrW,QAEjEzxH,KAAKq8B,OAILve,EAAKU,aAAaspH,EAAsBnW,OACxC/vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaipH,EAAsBnW,QAEjE3xH,KAAK0V,SAQTy4G,YAAArtH,UAAAu7B,KAAR,WACI,GAA4B,MAAxBr8B,KAAKqnI,iBACL,IAAKrnI,KAAKuxH,YAAcvxH,KAAKwnI,WAAY,CACrCnrH,EAAAe,OAAOC,aAAard,KAAM,UAC1BA,KAAK2Z,MAAQ,CAEb,IAAI8I,GAAgB,GAAKziB,KAAKqnI,gBAAgB1W,MAC1Ch4F,EAAKtc,EAAAe,OAAOyI,YAAY7lB,MACxBulB,MAAO,SACPhB,aAAc,EAAGvkB,KAAKqnI,gBAAgBnX,UACtCztG,eAAgBA,GAChBF,WAAY,UACZM,UAAW7iB,KAAKqnI,gBAAgBx5C,KAChCjgE,aAAc,WACdD,iBAAkB3tB,KAAK8O,cACvBif,cAAe/tB,KACf8tB,gBAAiB,WAErB6K,GAAG3e,QAECha,KAAK4vH,mBACLj3F,EAAGlF,KAAK1U,KAAKE,UAAYwD,EAAgB,KAGzCziB,KAAKyyB,MAAQ,GACbkG,EAAGlF,KAAKzzB,KAAKyyB,OAGjBkG,EAAG0D,OACHr8B,KAAKwnI,YAAa,OAGtBnrH,GAAAe,OAAOC,aAAard,KAAM,QAE1Bqc,EAAAe,OAAOyI,YAAY7lB,MACfulB,MAAO,OACPhB,aAAc,EAAG,GACjB9B,eAAgB,KAChBF,WAAY,UACZM,WAAW,EACX+K,aAAc,WACdD,iBAAkB3tB,KAAK8O,cACvBif,cAAe/tB,KACf8tB,gBAAiB,YAGrB9tB,KAAKwnI,YAAa,GAOnBrZ,YAAArtH,UAAA4U,KAAP,WACI2G,EAAAe,OAAOC,aAAard,KAAM,QAC1BA,KAAKwnI,YAAa,EAClBxnI,KAAK2Z,MAAQ,GAOTw0G,YAAArtH,UAAAgO,cAAR,SAAsBoJ,GAClB,GAAkB,MAAdlY,KAAKgnI,MAAe,CACpBhnI,KAAK2Z,OAAS3Z,KAAK0nI,UACnB,KAAK,GAAI3nI,GAAY,EAAGA,EAAIC,KAAKinI,aAAclnI,IAC3C,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK2nI,OAAOz7H,OAAQy2B,IAChC5iC,EAAIC,KAAK2nI,OAAOhlG,KAChB3iC,KAAKgnI,MAAMj+G,OAAOhpB,GAAGqf,EAAIL,KAAKq7B,IAAIr6C,EAAIC,KAAK6nI,QAAQllG,GAAG,GAAK3iC,KAAK2Z,OAAS3Z,KAAK4nI,UAAUjlG,GAAG,GAC3F3iC,KAAKgnI,MAAMj+G,OAAOhpB,GAAGmf,EACjBnf,EAAIC,KAAKynI,YAAc1oH,KAAKo7B,IAAIp6C,EAAIC,KAAK6nI,QAAQllG,GAAG,GAAK3iC,KAAK2Z,OAAS3Z,KAAK4nI,UAAUjlG,GAAG,IAM7G,GAA4B,MAAxB3iC,KAAKqnI,gBAAyB,CAC9B,GAAIkC,GAAuBxqH,KAAK+0B,MAAM9zC,KAAKsnI,SAEvCiC,EAAerxH,EAAKolD,eAAiC,GAAhBisE,KACrCvpI,KAAKgnI,MAAMj4H,QAAU7M,EAAAsD,gBAAgByJ,uBACjCjP,KAAKqnI,gBAAgBzb,UAAY5rH,KAAK+iE,SAASwmE,EAAc,KAGrErxH,EAAKolD,cAAgBisE,IASrBpb,YAAArtH,UAAAiiE,SAAR,SAAiB1W,EAAa5lD,GAE1B,IADA,GAAI4R,GAAIg0C,EAAM,GACPh0C,EAAEnM,OAASzF,GAAM4R,EAAI,IAAMA,CAClC,OAAOA,IAOH81G,YAAArtH,UAAA0oI,iBAAR,SAAyBzgH,GACrB,GAAkB,MAAd/oB,KAAKgnI,MACL,IAAK,GAAIjnI,GAAY,EAAGA,EAAIC,KAAKinI,aAAclnI,IAC3CC,KAAKgnI,MAAMj+G,OAAOhpB,GAAGmf,EAAI6J,EAAOhpB,GAAGmf,EACnClf,KAAKgnI,MAAMj+G,OAAOhpB,GAAGqf,EAAI2J,EAAOhpB,GAAGqf,GASxC+uG,YAAArtH,UAAAmoI,aAAP,SAAoBlgH,GAChB,GAAIs/G,GAAax7G,EAAAqX,aAAazB,cAAc1Z,EAAQ/oB,KAAKunI,WACzDvnI,MAAKknI,cAAgBlnI,KAAKsoI,oBAAoBD,EAAYroI,KAAKinI,cAE/DjnI,KAAKwpI,iBAAiBxpI,KAAKknI,gBASvB/Y,YAAArtH,UAAAsnI,aAAR,SAAqBr/G,EAAgB0gH,GAAA,SAAAA,OAAA,EAKjC,KAAK,GAJDtiI,MACAuiI,EAAQ,aACRp9G,EAAOvD,EAAO1b,MAAMq8H,GAEf3pI,EAAY,EAAGA,EAAIusB,EAAKpgB,OAAQnM,IAAK,CAC1C,GAAI4pI,GAAar9G,EAAKvsB,GAAG0L,UAAU,EAAG6gB,EAAKvsB,GAAGmM,OAAS,GAAG8Z,MAAM,IAEhE,IAAyB,GAArB2jH,EAAWz9H,OAAa,CACxB,GAAIgT,GAAIlf,KAAK4pI,YAAYD,EAAW,GAAI,IAAKF,GACzCrqH,EAAIpf,KAAK4pI,YAAYD,EAAW,GAAI,IAAKF,EAE7CtiI,GAAO6L,KAAK,GAAI7I,MAAK8e,MAAM/J,EAAGE,KAItC,MAAOjY,IAUHgnH,YAAArtH,UAAA8oI,YAAR,SAAoB78H,EAAexM,EAAYkpI,GAAA,SAAAA,OAAA,EAC3C,IAAItiI,EAWJ,OATIA,GADS,KAAT4F,EACS/M,KAAKO,GAEVkpI,EACSzpI,KAAKO,IAAO2V,SAASnJ,GAAS/M,KAAKkmB,oBAAoB3lB,IAEvD2V,SAASnJ,IAatBohH,YAAArtH,UAAAwnI,oBAAR,SAA4Bh8G,EAAWpgB,GACnC,GAAI29H,GAAgB39H,EAASogB,EAAKpN,EAAEhT,OAChC49H,KACAC,IAEJ,IAAIz9G,EAAKpN,EAAEhT,OAAS,EAAG,CACnB29H,EAAgB9qH,KAAK+0B,MAAM+1F,EAE3B,KAAK,GADDG,GAAM,EACDjqI,EAAY,EAAGA,EAAIusB,EAAKpN,EAAEhT,OAAS,EAAGnM,IAC3C+pI,EAAgB92H,KAAK62H,GACrBG,GAAOH,CAEXC,GAAgB92H,KAAK9G,EAAS89H,OAE9BF,IAAmBD,EAIvB,KAAK,GADDp2G,GAAO,EACF1zB,EAAY,EAAGA,EAAIusB,EAAKpN,EAAEhT,OAAQnM,IACvC,IAAK,GAAI4iC,GAAY,EAAGA,EAAImnG,EAAgB/pI,GAAI4iC,IAExClP,EADA1zB,EAAI,EAAIusB,EAAKpN,EAAEhT,OACRy2B,EAAImnG,EAAgB/pI,GAEpB4iC,GAAKmnG,EAAgB/pI,GAAK,GAErCgqI,EAAiB/2H,KAAKhT,KAAKquB,OAAOoF,EAAMnH,EAAKpN,EAAEnf,GAAIusB,EAAKlN,EAAErf,IAIlE,OAAOgqI,IAUH5b,YAAArtH,UAAAutB,OAAR,SAAeoH,EAAWw0G,EAAoBC,GAC1C,GAAIC,GAAK,EAAIF,EAAM1pG,GACf6pG,EAAK,GAAKH,EAAMtpI,EAAIspI,EAAM7oI,GAAK+oI,EAC/BE,EAAKJ,EAAM5pG,GAAK8pG,EAAKC,EAErBE,EAAK,EAAIJ,EAAM3pG,GACfgqG,EAAK,GAAKL,EAAMvpI,EAAIupI,EAAM9oI,GAAKkpI,EAC/BE,EAAKN,EAAM7pG,GAAKiqG,EAAKC,EAErBrrH,EAAImrH,EAAKtrH,KAAKiV,IAAIyB,EAAG,GAAK20G,EAAKrrH,KAAKiV,IAAIyB,EAAG,GAAK00G,EAAK10G,EAAIw0G,EAAMnqI,EAC/Dsf,EAAIorH,EAAKzrH,KAAKiV,IAAIyB,EAAG,GAAK80G,EAAKxrH,KAAKiV,IAAIyB,EAAG,GAAK60G,EAAK70G,EAAIy0G,EAAMpqI,CAEnE,OAAO,IAAIqK,MAAK8e,MAAM/J,EAAGE,IAO7B+uG,YAAArtH,UAAAwc,MAAA,WACI,GAAIjU,GAAuB,GAAI8kH,YAE/B9kH,GAAQorH,SAAWz0H,KAAKy0H,SACxBprH,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SAExBrV,EAAQ49H,aAAejnI,KAAKinI,aAC5B59H,EAAQm/H,SAAWxoI,KAAKwoI,SACxBn/H,EAAQmrH,WAAax0H,KAAKw0H,WAC1BnrH,EAAQg+H,gBAAkBrnI,KAAKqnI,gBAC/Bh+H,EAAQi+H,OAAStnI,KAAKsnI,OACtBj+H,EAAQi4H,MAAQthI,KAAKshI,MACrBj4H,EAAQumH,kBAAoB5vH,KAAK4vH,kBACjCvmH,EAAQq+H,WAAa1nI,KAAK0nI,WAC1Br+H,EAAQs+H,OAAS3nI,KAAK2nI,OACtBt+H,EAAQw+H,QAAU7nI,KAAK6nI,QACvBx+H,EAAQu+H,UAAY5nI,KAAK4nI,UACzBv+H,EAAQo+H,YAAcznI,KAAKynI,YAE3Bp+H,EAAQ69H,gBACR,KAAK,GAAInnI,GAAI,EAAGA,EAAIC,KAAKknI,cAAch7H,OAAQnM,IAC3CsJ,EAAQ69H,cAAcl0H,KAAK,GAAI7I,MAAK8e,MAAMjpB,KAAKknI,cAAcnnI,GAAGmf,EAAGlf,KAAKknI,cAAcnnI,GAAGqf,GAU7F,OAPA/V,GAAQ29H,MAAQ,GAAI78H,MAAKs+H,KAAKC,KAAKr/H,EAAQm/H,SAAUn/H,EAAQ69H,eAC7D79H,EAAQ29H,MAAM2B,cAAgB3oI,KAAKgnI,MAAM2B,cACzCt/H,EAAQ29H,MAAMr9G,UAAYtgB,EAAQmrH,WAElCnrH,EAAQ4I,SAAS5I,EAAQ29H,OAEzB39H,EAAQuU,eACDvU,GAjjBf8kH,YAAAvyG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBpGgs8BxBunG,coG/r8ByB3yG,EAAAG,YAApBtb,GAAA8tH,YAAWA,CA8jBxB,IAAM2Z,IAMF5S,WAAY,YAKZ8S,UAAW,YAKXjX,mBAAoB,mBAKpBkX,KAAM,OAMNe,cAAe,eACfE,YAAa,aACbC,UAAW,YACXC,MAAO,QACPC,SAAU,WACVhnH,OAAQ,SAMR83G,MAAO,QAMP1I,KAAM,OAMNH,SAAU,WAMV4W,OAAQ,SAMRH,aAAc,cAIdgB,eAAgB,gBAMhBpX,KAAM,OAMNX,KAAM,SpG+k7BJ,SAAS1wH,EAAQD,EAASF,GAE/B,YqGxu8BD,IAMAkrH,IANAlrH,EAAuB,GAMvB,mBAAAkrH,wBA0GA,MAjGWA,qBAAAof,6BAAP,SAAoCC,GAChC,GAAI7kI,KAEJ,QAAQ6kI,GACJ,IAAK,MACD7kI,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,EAC9B,MACJ,SAII,OAGR7F,KAAK2qI,0BAA0BD,GAAkB7kI,GAU9CwlH,oBAAAC,0BAAP,SAAiCC,EAAmBmf,GAChD,MAAsC,OAAlC1qI,KAAK2qI,2BACiD,MAAlD3qI,KAAK2qI,0BAA0BD,IACkC,MAA7D1qI,KAAK2qI,0BAA0BD,GAAgBnf,GACxCvrH,KAAK2qI,0BAA0BD,GAAgBnf,GAgB3D,MASIF,oBAAAjzG,IAAf,SAAmBC,KApGJgzG,oBAAAsf,6BAyGnBtf,uBA1GahrH,GAAAgrH,oBAAmBA,GrGk08B1B,SAAS/qH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsGp18BjEna,EAAAzB,EAAgC,GAChCosH,EAAApsH,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAC/Bmc,EAAAnc,EAA2B,IAC3Bs5F,EAAAt5F,EAA+C,IAC/CiC,EAAAjC,EAA0B,IAC1ByqI,EAAAzqI,EAAiC,KACjCsO,EAAAtO,EAA8B,IAU9BqnH,EAAA,SAAArkH,GAA4B5B,EAAAimH,OAAArkH,EA+BxB,SAAAqkH,UACIrkH,EAAA1C,KAAAT,MAVJA,KAAA6gD,OAAiB,EAMjB7gD,KAAAu9B,OAAiB,EAObv9B,KAAK6pH,QAAU,EACf7pH,KAAK8pH,QAAU,EAEf9pH,KAAKmtH,QAAS,EAEdntH,KAAK02H,YAAa,EAClB12H,KAAKO,MAELP,KAAK6qI,aAAc,EA8L3B,MArLIrjB,QAAA1mH,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEnB9d,KAAK6pH,QAAUvtG,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyqI,iBAAiBC,SAAU/qI,KAAK6pH,SACrF7pH,KAAK8pH,QAAUxtG,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyqI,iBAAiBE,SAAUhrI,KAAK8pH,SAEjFhsG,EAAKU,aAAane,EAAAyqI,iBAAiBG,UACnCjrI,KAAK6pH,QAAUjrG,WAAWd,EAAKe,aAAaxe,EAAAyqI,iBAAiBG,SAC7DjrI,KAAK8pH,QAAUlrG,WAAWd,EAAKe,aAAaxe,EAAAyqI,iBAAiBG,UAGjEjrI,KAAK6gD,OAASvkC,EAAA8B,WAAWC,qBAAqBP,EAAMzd,EAAAyqI,iBAAiBre,QAASzsH,KAAK6gD,QACnF7gD,KAAK+zB,KAAOzX,EAAA8B,WAAW0D,sBAAsBhE,EAAMzd,EAAAyqI,iBAAiBI,KAAMlrI,KAAK+zB,MAE/E/zB,KAAK6qI,YAAcvuH,EAAA8B,WAAW2B,uBAAuBjC,EAAM,cAAe9d,KAAK6qI,aAE3E/sH,EAAKU,aAAane,EAAAyqI,iBAAiBK,MACnCnrI,KAAKO,GAAK2V,SAAS4H,EAAKe,aAAaxe,EAAAyqI,iBAAiBK,OAU9D3jB,OAAA1mH,UAAAsqI,YAAA,SAAYttH,GACJA,EAAKU,aAAai7E,EAAA4C,+BAA+BI,gBACjDz8F,KAAK4lH,YAAc1vG,SAAS4H,EAAKe,aAAa46E,EAAA4C,+BAA+BI,gBAG7E3+E,EAAKU,aAAai7E,EAAA4C,+BAA+BK,iBACjD18F,KAAK6lH,aAAe3vG,SAAS4H,EAAKe,aAAa46E,EAAA4C,+BAA+BK,kBAItF8qB,OAAA1mH,UAAAkpH,YAAA,SAAY9hB,GACRloG,KAAKkoG,QAAUA,GAGnBsf,OAAA1mH,UAAAopH,oBAAA,WACyB,MAAjBlqH,KAAKyyD,UAAmD,MAA/BzyD,KAAKyyD,SAASm3C,OAAY,KACnD5pG,KAAKyyD,SAASm3C,OAAY,IAAEqa,SAAS,WAI7CuD,OAAA1mH,UAAAuqI,iBAAA,SAAiBC,GACQ,MAAjBtrI,KAAKyyD,UAAmD,MAA/BzyD,KAAKyyD,SAASm3C,OAAY,KACnD5pG,KAAKyyD,SAASm3C,OAAY,IAAEqa,SAAS,OAASqnB,IAItD9jB,OAAA1mH,UAAAyqI,qBAAA,WACyB,MAAjBvrI,KAAKyyD,UAAqD,MAAjCzyD,KAAKyyD,SAASm3C,OAAc,OACrD5pG,KAAKyyD,SAASm3C,OAAc,MAAEqa,SAAS,UAEtB,MAAjBjkH,KAAKyyD,UAAsD,MAAlCzyD,KAAKyyD,SAASm3C,OAAe,QACtD5pG,KAAKyyD,SAASm3C,OAAe,OAAEqa,SAAS,UAEvB,MAAjBjkH,KAAKyyD,UAA0D,MAAtCzyD,KAAKyyD,SAASm3C,OAAmB,YAC1D5pG,KAAKyyD,SAASm3C,OAAmB,WAAEqa,SAAS,WAIpDuD,OAAA1mH,UAAAmpH,kBAAA,SAAkBqhB,GACO,MAAjBtrI,KAAKyyD,UAAqD,MAAjCzyD,KAAKyyD,SAASm3C,OAAc,OACrD5pG,KAAKyyD,SAASm3C,OAAc,MAAEqa,SAAS,OAASqnB,GAE/B,MAAjBtrI,KAAKyyD,UAAsD,MAAlCzyD,KAAKyyD,SAASm3C,OAAe,QACtD5pG,KAAKyyD,SAASm3C,OAAe,OAAEqa,SAAS,OAASqnB,GAEhC,MAAjBtrI,KAAKyyD,UAA0D,MAAtCzyD,KAAKyyD,SAASm3C,OAAmB,YAC1D5pG,KAAKyyD,SAASm3C,OAAmB,WAAEqa,SAAS,OAASqnB,IAI7D9jB,OAAA1mH,UAAAmjH,SAAA,SAAS5rG,EAAWw1G,GAChB,MADgB,UAAAA,OAAA,GACN,WAANx1G,GACoB,MAAhBrY,KAAKkoG,YACLloG,MAAKkoG,QAAQmiB,aAAarqH,MAIlB,KAAZA,KAAKO,IAAakO,EAAAyB,cAAc8nE,oBAC5Bh4E,eAAcwnH,OAAOgkB,WAAanzH,IAAMmvG,OAAOK,SAAWxvG,IAAMmvG,OAAOC,UAD/E,OAKID,OAAOikB,MAAc,qBAANpzH,MACflV,GAAArC,UAAMmjH,SAAQxjH,KAAAT,KAACwnH,OAAOgkB,UAAW3d,SAIrB,IAAZ7tH,KAAKO,IAA0B,SAAdP,cACbqY,IAAMmvG,OAAOwB,YAAc3wG,IAAMmvG,OAAOC,WAAapvG,IAAMmvG,OAAOiB,YAK1EtlH,EAAArC,UAAMmjH,SAAQxjH,KAAAT,KAACqY,EAAGw1G,KAQtBrG,OAAA1mH,UAAAwc,MAAA,WACI,GAAIjU,GAAkB,GAAIm+G,OAoB1B,OAlBAn+G,GAAQopD,SAAWzyD,KAAKyyD,SAASn1C,QACjCjU,EAAQ4I,SAAS5I,EAAQopD,UAEzBppD,EAAQ4U,KAAOje,KAAKie,KACpB5U,EAAQ9I,GAAKP,KAAKO,GAClB8I,EAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQwgH,QAAU7pH,KAAK6pH,QACvBxgH,EAAQygH,QAAU9pH,KAAK8pH,QACvBzgH,EAAQu8G,YAAc5lH,KAAK4lH,YAC3Bv8G,EAAQw8G,aAAe7lH,KAAK6lH,aAC5Bx8G,EAAQyW,QAAU9f,KAAK8f,QACvBzW,UAAerJ,aACfqJ,EAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQw3C,OAAS7gD,KAAK6gD,OACtBx3C,EAAQ0qB,KAAO/zB,KAAK+zB,KACpB1qB,EAAQwhI,YAAc7qI,KAAK6qI,YAE3BxhI,EAAQuU,eACDvU,GAGXm+G,OAAA1mH,UAAA4qI,cAAA,SAAcx3H,GAAA,SAAAA,OAAA,GAEW,MAAjBlU,KAAKyyD,UACmB,MAAxBzyD,KAAKyyD,SAASm3C,QACoB,MAAlC5pG,KAAKyyD,SAASm3C,OAAe,QACU,MAAvC5pG,KAAKyyD,SAASm3C,OAAoB,cAKlC11F,GACAlU,KAAKyyD,SAASm3C,OAAe,OAAEzrF,MAAQ,EACvCne,KAAKyyD,SAASm3C,OAAoB,YAAEzrF,MAAQ,IAE5Cne,KAAKyyD,SAASm3C,OAAe,OAAEzrF,MAAQ,EACvCne,KAAKyyD,SAASm3C,OAAoB,YAAEzrF,MAAQ,KAI7CqpG,OAAA1mH,UAAA6qI,UAAP,SAAiB5+H,EAAe6+H,GAC5B,GAAIC,GAAiB7rI,KAAK8rI,kBAAkBF,EAC5C5rI,MAAKu9B,OAASxwB,CAEd,KAAK,GAAIhN,GAAI,EAAGA,EAAI8rI,EAAe3/H,OAAQnM,IACvC8rI,EAAe9rI,GAAGgsI,WAAW7qE,KAAO9+D,EAAAsH,UAAUg3D,WAAWt+D,EAAAsH,UAAUi3D,YAAa5zD,EAAMmB,YACtF29H,EAAe9rI,GAAGisI,WAInBxkB,OAAA1mH,UAAAmrI,YAAP,SAAmBL,GAGf,IAAK,GAFDC,GAAiB7rI,KAAK8rI,kBAAkBF,GAEnC7rI,EAAI,EAAGA,EAAI8rI,EAAe3/H,OAAQnM,IACvC8rI,EAAe9rI,GAAGgsI,WAAW7qE,KAAO,IAIpCsmD,OAAA1mH,UAAAgrI,kBAAR,SAA0BF,GAAA,SAAAA,MAAA,SACtB,IAAIzkI,KACJ,IAAqB,MAAjBnH,KAAKyyD,UAA4C,MAAxBzyD,KAAKyyD,SAASm3C,OACvC,IAAK,GAAIvkG,KAAOrF,MAAKyyD,SAASm3C,OACtBvkG,EAAI8lB,QAAQygH,OAAoB5rI,KAAKyyD,SAASm3C,OAAOvkG,YAAgBulI,GAAAsB,kBACrE/kI,EAAO6L,KAAKhT,KAAKyyD,SAASm3C,OAAOvkG,GAK7C,OAAO8B,IAtOJqgH,OAAAikB,MAAgB,EAGhBjkB,OAAA2kB,aAAuB,WACvB3kB,OAAA4kB,SAAmB,OAEnB5kB,OAAAyB,UAAoB,QACpBzB,OAAAwB,WAAqB,SACrBxB,OAAA4E,SAAmB,OACnB5E,OAAAC,UAAoB,QACpBD,OAAAK,QAAkB,MAClBL,OAAAiB,UAAoB,QAEpBjB,OAAA6kB,WAAqB,SACrB7kB,OAAAgkB,UAAoB,QACpBhkB,OAAA8kB,oBAA8B,oBAjBzC9kB,OAAA5rG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBtG0/8BxB4gG,SsGz/8BoB+E,EAAAK,cAAfvsH,GAAAmnH,OAAMA,EA2ONnnH,EAAAyqI,kBACThkH,MAAO,QAIPqkH,GAAI,KAMJJ,SAAU,UAMVC,SAAU,UAMVC,OAAQ,SAMRxe,QAAS,SAITye,KAAM,StG8v8BJ,SAAS5qI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GuGvi9BjEna,EAAAzB,EAAgC,GAChCqb,EAAArb,EAA4B,IAC5Bic,EAAAjc,EAA+B,IAG/B+rI,EAAA,SAAA/oI,GAAsC5B,EAAA2qI,iBAAA/oI,EAmBlC,SAAA+oI,oBACI/oI,EAAA1C,KAAAT,MAEAA,KAAKusI,UAAYlsI,EAAAmsI,2BAA2BrZ,iBAAiBC,KAC7DpzH,KAAKysI,aAAepsI,EAAAmsI,2BAA2BjZ,oBAAoBmZ,IACnE1sI,KAAKkhE,KAAO,GAoGpB,MA7FWgrE,kBAAAprI,UAAAid,aAAP,SAAoBD,GAChB3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEI,MAAnB9d,KAAK+rI,YACDjuH,EAAKU,aAAane,EAAAmsI,2BAA2B7Z,QACzC70G,EAAKU,aAAane,EAAAmsI,2BAA2B3Z,QAC7C7yH,KAAKkhE,KAAOpjD,EAAKe,aAAaxe,EAAAmsI,2BAA2B3Z,OAG7D7yH,KAAK2sI,KAAO7uH,EAAKe,aAAaxe,EAAAmsI,2BAA2B7Z,MAEzD3yH,KAAK+rI,WAAa,GAAI5hI,MAAKooH,OAAOqa,WAAW5sI,KAAKkhE,MAAQyrE,KAAM3sI,KAAK2sI,OAErE3sI,KAAKiS,SAASjS,KAAK+rI,cAKxBG,iBAAAprI,UAAAkd,aAAP,SAAoBF,GAChB3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAmsI,2BAA2B1Z,cAC7C9yH,KAAKusI,UAAYzuH,EAAKe,aAAaxe,EAAAmsI,2BAA2B1Z,YAE9D9yH,KAAKgsI,WAGLluH,EAAKU,aAAane,EAAAmsI,2BAA2B1Z,cAC7C9yH,KAAKysI,aAAe3uH,EAAKe,aAAaxe,EAAAmsI,2BAA2BzZ,eAEjE/yH,KAAKgsI,YAQNE,iBAAAprI,UAAAkrI,QAAP,WACI,OAAQhsI,KAAKusI,WACT,IAAKlsI,GAAAmsI,2BAA2BrZ,iBAAiBG,MAC7CtzH,KAAK+rI,WAAWxsH,SAASL,GAAKlf,KAAK+rI,WAAWplI,KAC9C,MACJ,KAAKtG,GAAAmsI,2BAA2BrZ,iBAAiBE,OAC7CrzH,KAAK+rI,WAAWxsH,SAASL,EAA6B,IAAxBlf,KAAK+rI,WAAWplI,KAC9C,MACJ,SACI3G,KAAK+rI,WAAWxsH,SAASL,EAAI,EAIrC,OAAQlf,KAAKysI,cACT,IAAKpsI,GAAAmsI,2BAA2BjZ,oBAAoBE,OAChDzzH,KAAK+rI,WAAWxsH,SAASH,GAAKpf,KAAK+rI,WAAWnlI,MAC9C,MACJ,KAAKvG,GAAAmsI,2BAA2BjZ,oBAAoBC,OAChDxzH,KAAK+rI,WAAWxsH,SAASH,EAA8B,IAAzBpf,KAAK+rI,WAAWnlI,MAC9C,MACJ,SACI5G,KAAK+rI,WAAWxsH,SAASH,EAAI,IASlC8sH,iBAAAprI,UAAAwc,MAAP,WACI,GAAIjU,GAA4B,GAAI6iI,iBAsBpC,OArBA7iI,GAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SAExBrV,EAAQsjI,KAAO3sI,KAAK2sI,KACpBtjI,EAAQ63D,KAAOlhE,KAAKkhE,KACpB73D,EAAQkjI,UAAYvsI,KAAKusI,UACzBljI,EAAQojI,aAAezsI,KAAKysI,aAE5BpjI,EAAQ0iI,WAAa,GAAI5hI,MAAKooH,OAAOqa,WAAW5sI,KAAKkhE,MAAQyrE,KAAM3sI,KAAK2sI,OACxEtjI,EAAQ4I,SAAS5I,EAAQ0iI,YAEzB1iI,EAAQ2iI,UACR3iI,EAAQuU,eAEDvU,GA3Hf6iI,iBAAAtwH,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBvGun9BxBslH,mBuGtn9B8B1wH,EAAAG,YAAzBtb,GAAA6rI,iBAAgBA,EA8HhB7rI,EAAAmsI,4BAOT3Z,KAAM,OAONF,KAAM,OAQNG,WAAY,YACZK,kBACIC,KAAM,OACNC,OAAQ,SACRC,MAAO,SAQXP,cAAe,eACfQ,qBACImZ,IAAK,MACLlZ,OAAQ,SACRC,OAAQ,YvG0+8BV,SAASnzH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwG/p9BjEna,EAAAzB,EAA6C,GAC7Cqb,EAAArb,EAA4B,IAC5B6mB,EAAA7mB,EAA6B,IAE7B+kH,EAAA/kH,EAAwC,KAExCiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAE/BgiF,EAAAhiF,EAAyB,IACzB0sI,EAAA1sI,EAA+B,KAC/Bkc,EAAAlc,EAAuB,IACvB4sH,EAAA5sH,EAAgC,IAChC2sI,EAAA3sI,EAAqC,KAYrC2rH,EAAA,SAAA3oH,GAAqC5B,EAAAuqH,gBAAA3oH,EAWjC,SAAA2oH,mBACI3oH,EAAA1C,KAAAT,MAEAA,KAAK+sI,cAAgB,EACrB/sI,KAAKgtI,OAAQ,EAEbhtI,KAAK8Z,OAAS1G,EAAAa,iBAAiB,mBAC/BjU,KAAK8Z,OAAO5F,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK6/E,QAAQxrE,KAAKrU,OA6apE,MA1ac8rH,iBAAAhrH,UAAAoc,gBAAV,SAA0BlY,GAGtB,GAFAhF,KAAK8Z,OAAOpE,OAEiB,MAAzB1V,KAAKitI,UAAUrjC,OAAgB,CAC/B,IAAK,GAAIvkG,KAAOrF,MAAKitI,UAAUrjC,OACvB5pG,KAAKitI,UAAUrjC,OAAO7oG,eAAesE,KACjCrF,KAAKitI,UAAUrjC,OAAOvkG,YAAgB8E,MAAKyc,eAC3C5mB,KAAKitI,UAAUrjC,OAAOvkG,GAAK0X,QAAQ/X,GAEvChF,KAAKitI,UAAUrjC,OAAOvkG,GAAO,KAIrCrF,MAAKitI,UAAUrjC,OAAS,OAUzBkiB,gBAAAhrH,UAAAid,aAAP,SAAoBD,GAOhB,GANA3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAA6sI,0BAA0BC,QAC5CntI,KAAKgtI,MAAQprI,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA6sI,0BAA0BC,QAGlFrvH,EAAKU,aAAane,EAAA6sI,0BAA0B7lH,SAC5CrnB,KAAKgwH,OAAwBhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAA6sI,0BAA0B7lH,QAC1E,MAAfrnB,KAAKgwH,QAEwB,MAAzBhwH,KAAKgwH,OAAOx4E,YAER15B,EAAKU,aAAane,EAAA6sI,0BAA0Bzf,QAC5C7rH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA6sI,0BAA0Bzf,QAErEztH,KAAKitI,UAAYjtI,KAAKgwH,OAAOx4E,UAAUl6B,QAEvCtd,KAAKitI,UAAYjtI,KAAKgwH,OAAOx4E,UAEjCx3C,KAAKiS,SAASjS,KAAKitI,WAEO,MAAtBjtI,KAAKgwH,OAAOod,SAAgB,CAC5BptI,KAAKqtI,eAEL,KAAK,GAAIhoI,KAAOrF,MAAKgwH,OAAOod,OACxBptI,KAAKqtI,aAAar6H,KAAKkD,SAAS7Q,MAuBjDymH,gBAAAhrH,UAAAkd,aAAP,SAAoBF,GAGhB,GAFA3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAA6sI,0BAA0Blc,OACtB,MAAlBhxH,KAAKitI,WAAgD,MAA3BjtI,KAAKitI,UAAU9vH,UAAoBnd,KAAKitI,UAAU9vH,SAASjR,OAAS,EAC9F,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKitI,UAAU9vH,SAASjR,OAAQnM,IAAK,CAC7D,GAAI86B,GAAa76B,KAAKitI,UAAU9vH,SAASpd,EACzC,IAAI86B,YAAiB1wB,MAAKyc,eACA,MAAlBiU,EAAM1d,UAAoB0d,EAAM1d,SAASjR,OAAS,EAClD,IAAK,GAAIy2B,GAAY,EAAGA,EAAI9H,EAAM1d,SAASjR,OAAQy2B,IAAK,CACpD,GAAI2qG,GAAoBzyG,EAAM1d,SAASwlB,IAEnC2qG,YAAwBnjI,MAAK6W,QAC7BssH,YAAwBnjI,MAAKooH,OAAOC,kBAEsB,MAAtD10G,EAAKe,aAAaxe,EAAA6sI,0BAA0Blc,MAC5Csc,EAAa5jH,KAAO,SAEpB4jH,EAAa5jH,KAAOxT,SAChB4H,EAAKe,aAAaxe,EAAA6sI,0BAA0Blc,MAC5C,MAYhClzG,EAAKU,aAAane,EAAA6sI,0BAA0Bzb,OAC5C7vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAA6sI,0BAA0Bzb,QAE5C,MAArBzxH,KAAKqtI,cACLrtI,KAAKutI,eAQTzvH,EAAKU,aAAa,cAAgB5c,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,eAC7E7e,KAAKksH,aAUbJ,gBAAAhrH,UAAAu7B,KAAA,SAAKstE,GACe,MAAZA,IACA3pG,KAAKwtI,UAAY7jC,GAGI,MAArB3pG,KAAKqtI,cACLrtI,KAAKutI,gBAObzhB,gBAAAhrH,UAAA4U,KAAA,WACI,GAA6B,MAAzB1V,KAAKitI,UAAUrjC,OACf,IAAK,GAAIvkG,KAAOrF,MAAKitI,UAAUrjC,OACvB5pG,KAAKitI,UAAUrjC,OAAO7oG,eAAesE,KACrCgX,EAAAe,OAAOC,aAAard,KAAKitI,UAAUrjC,OAAOvkG,GAAM,OAChDrF,KAAKitI,UAAUrjC,OAAOvkG,GAAKya,SAAU,EACjC9f,KAAKitI,UAAUrjC,OAAOvkG,YAAgB6/G,GAAAiG,yBACtCnrH,KAAKitI,UAAUrjC,OAAOvkG,GAAKqQ,OAE3B1V,KAAKitI,UAAUrjC,OAAOvkG,YAAgBynI,GAAAW,sBACtCztI,KAAKitI,UAAUrjC,OAAOvkG,GAAKqQ,OAE3B1V,KAAKitI,UAAUrjC,OAAOvkG,YAAgB0nH,GAAAkB,iBACtCjuH,KAAKitI,UAAUrjC,OAAOvkG,GAAKqQ,OAM3C1V,MAAK0tI,eAQT5hB,gBAAAhrH,UAAAorH,UAAA,SAAUviB,GAKN,GAJgB,MAAZA,IACA3pG,KAAKwtI,UAAY7jC,GAErB3pG,KAAK8Z,OAAOpE,OACO,MAAf1V,KAAKgwH,QAAuC,MAArBhwH,KAAKgwH,OAAO/vC,MAAe,CAClD,GAAIniE,GAAgB9d,KAAKgwH,OAAO/vC,KAChC,IAAY,MAARniE,EAAc,CACd,GAAIwL,GAAgBxL,EAAKyL,iBACzB,IAAY,MAARD,EACA,KAAe,MAARA,GAAc,CACjB,GAAIjgB,GAAerJ,KAAKitI,UAAUrjC,OAAOtgF,EAAKpL,SAC/B,OAAX7U,IAEAA,EAAQ2U,aAAasL,GACjBjgB,YAAmB67G,GAAAiG,0BACG,MAAlBnrH,KAAKwtI,UACLnkI,EAAQsM,MAAM,EAAG3V,KAAKwtI,UAAW,GAEjCnkI,EAAQsqB,UAIpBrK,EAAOA,EAAKG,oBAKxB,GAAmB,MAAfzpB,KAAKgwH,QAA6C,MAA3BhwH,KAAKgwH,OAAO2d,YAAqB,CACxD,GAAIC,GAAiB5tI,KAAKgwH,OAAO2d,WACjC,IAAa,MAATC,EAAe,CACf,GAAItkH,GAAgBskH,EAAMrkH,iBAC1B,IAAY,MAARD,EACA,KAAe,MAARA,GACCA,EAAK9K,aAAaquH,EAAAgB,eAAeC,QAC7BxkH,EAAK9K,aAAaquH,EAAAgB,eAAepc,QAC7BnoG,EAAK9K,aAAaquH,EAAAgB,eAAeE,QACjC5rD,EAAAp4D,SAASsS,KACL/S,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeE,UAG9C5rD,EAAAp4D,SAASsS,KAAK/S,EAAKzK,aAAaguH,EAAAgB,eAAeC,QAGnDxkH,EAAK9K,aAAaquH,EAAAgB,eAAeV,QAC7B7jH,EAAK9K,aAAaquH,EAAAgB,eAAeE,QACjC5rD,EAAAp4D,SAAS8jE,KACLvkE,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeE,UAG9C5rD,EAAAp4D,SAAS8jE,KAAKvkE,EAAKzK,aAAaguH,EAAAgB,eAAeC,QAGnDxkH,EAAK9K,aAAaquH,EAAAgB,eAAelc,QAC7BroG,EAAK9K,aAAaquH,EAAAgB,eAAeG,SACjC7rD,EAAAp4D,SAASrU,KACL4T,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeG,WAG9C7rD,EAAAp4D,SAASrU,KAAK4T,EAAKzK,aAAaguH,EAAAgB,eAAeC,SAI3DxkH,EAAOA,EAAKG,uBAa5BqiG,gBAAAhrH,UAAAysI,aAAR,WACIvtI,KAAK8Z,OAAOpE,OACZ1V,KAAK+sI,cAAgB,EAEA,MAAjB/sI,KAAKmd,WACwB,IAAzBnd,KAAKqtI,aAAa,GAClBrtI,KAAK6/E,UAEL7/E,KAAK8Z,OAAOnE,MAAM3V,KAAKqtI,aAAa,MAUxCvhB,gBAAAhrH,UAAAo7D,MAAR,WACIl8D,KAAKutI,gBAQDzhB,gBAAAhrH,UAAA4sI,YAAR,WACI1tI,KAAK8Z,OAAOpE,QAQRo2G,gBAAAhrH,UAAA++E,QAAR,WAC6B,MAArB7/E,KAAKqtI,eACwC,MAAzCrtI,KAAKqtI,aAAartI,KAAK+sI,eACvB/sI,KAAKiuI,UAAUjuI,KAAKqtI,aAAartI,KAAK+sI,iBAEtC/sI,KAAK8Z,OAAOpE,OACR1V,KAAKgtI,OACLhtI,KAAKk8D,UAIjBl8D,KAAK+sI,gBAEwC,MAAzC/sI,KAAKqtI,aAAartI,KAAK+sI,gBACvB/sI,KAAK8Z,OAAOpE,OACZ1V,KAAK8Z,OAAOnE,MAAM3V,KAAKqtI,aAAartI,KAAK+sI,eAAiB/sI,KAAKqtI,aAAartI,KAAK+sI,cAAgB,MAEjG/sI,KAAKyX,KAAKq0G,gBAAgBC,mBAC1B/rH,KAAK8Z,OAAOpE,OACR1V,KAAKgtI,OACLhtI,KAAKk8D,UAWT4vD,gBAAAhrH,UAAAmtI,UAAR,SAAkBr7H,GACd,GAAmB,MAAf5S,KAAKgwH,QAAwC,MAAtBhwH,KAAKgwH,OAAOod,OAAgB,CACnD,GAAItvH,GAAgB9d,KAAKgwH,OAAOod,OAAOx6H,EAAM1E,WAM7C,IAJI4P,EAAKU,aAAa,SAClBxe,KAAKyX,KAAKqG,EAAKe,aAAa,SAGpB,MAARf,GAAgBA,EAAKowH,kBAAoB,EAAG,CAC5C,GAAI5kH,GAAgBxL,EAAKyL,iBACzB,IAAY,MAARD,EACA,KAAe,MAARA,GAAc,CACjB,GAAIjgB,GAAerJ,KAAKitI,UAAUrjC,OAAOtgF,EAAKpL,SAC/B,OAAX7U,IAEAA,EAAQ2U,aAAasL,GACjBjgB,YAAmB67G,GAAAiG,yBAA6C,MAAlBnrH,KAAKwtI,WAC/CnkI,EAAQyW,UACRzW,EAAQsM,MAAM,EAAG3V,KAAKwtI,WACtBxtI,KAAKwtI,UAAY,OAI7BlkH,EAAOA,EAAKG,oBAKxB,GAAmB,MAAfzpB,KAAKgwH,QAA8C,MAA5BhwH,KAAKgwH,OAAOme,aAAsB,CACzD,GAAIP,GAAiB5tI,KAAKgwH,OAAOme,aAAav7H,EAAM1E,WACpD,IAAa,MAAT0/H,EAAe,CACf,GAAItkH,GAAgBskH,EAAMrkH,iBAC1B,IAAY,MAARD,EACA,KAAe,MAARA,GACCA,EAAK9K,aAAaquH,EAAAgB,eAAeC,QAC7BxkH,EAAK9K,aAAaquH,EAAAgB,eAAepc,QAC7BnoG,EAAK9K,aAAaquH,EAAAgB,eAAeE,QACjC5rD,EAAAp4D,SAASsS,KACL/S,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeE,UAG9C5rD,EAAAp4D,SAASsS,KAAK/S,EAAKzK,aAAaguH,EAAAgB,eAAeC,QAGnDxkH,EAAK9K,aAAaquH,EAAAgB,eAAeV,QAC7B7jH,EAAK9K,aAAaquH,EAAAgB,eAAeE,QACjC5rD,EAAAp4D,SAAS8jE,KACLvkE,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeE,UAG9C5rD,EAAAp4D,SAAS8jE,KAAKvkE,EAAKzK,aAAaguH,EAAAgB,eAAeC,QAGnDxkH,EAAK9K,aAAaquH,EAAAgB,eAAelc,QAC7BroG,EAAK9K,aAAaquH,EAAAgB,eAAeG,SACjC7rD,EAAAp4D,SAASrU,KACL4T,EAAKzK,aAAaguH,EAAAgB,eAAeC,MACjC53H,SAASoT,EAAKzK,aAAaguH,EAAAgB,eAAeG,WAG9C7rD,EAAAp4D,SAASrU,KAAK4T,EAAKzK,aAAaguH,EAAAgB,eAAeC,SAI3DxkH,EAAOA,EAAKG,uBAQpCqiG,gBAAAhrH,UAAAic,QAAA,SAAQ/X,GACJhF,KAAK8Z,OAAOpE,OACZvS,EAAArC,UAAMic,QAAOtc,KAAAT,KAACgF,IAQlB8mH,gBAAAhrH,UAAAwc,MAAA,WACI,GAAIjU,GAA2B,GAAIyiH,gBAenC,IAbAziH,EAAQ4jI,UAAYjtI,KAAKitI,UAAU3vH,QACnCjU,EAAQ4I,SAAS5I,EAAQ4jI,WACzB5jI,EAAQ2mH,OAAShwH,KAAKgwH,OACtB3mH,EAAQgkI,aAAertI,KAAKqtI,aAC5BhkI,EAAQ2jI,MAAQhtI,KAAKgtI,MACrB3jI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QAEA,MAAnB9f,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,EAInB,MADA30G,GAAQuU,eACDvU,GA5bJyiH,gBAAAC,kBAA4B,oBAFvCD,gBAAAlwG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBxGq+9BxBklG,kBwGp+9B6BtwG,EAAAG,YAAxBtb,GAAAyrH,gBAAeA,EAicfzrH,EAAA6sI,2BACTzf,MAAO,QACP3mG,MAAO,QACPsnH,KAAM,OAONjB,KAAM,OAMN1b,KAAM,OAONrM,OAAQ,SAQR/9F,MAAO,QAOP2pG,KAAM,SxG+g9BJ,SAAS1wH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GyG3h+BjEna,EAAAzB,EAA0D,GAC1DyqI,EAAAzqI,EAAiC,KACjCic,EAAAjc,EAA+B,IAC/Bkc,EAAAlc,EAAuB,IACvBqC,EAAArC,EAA2B,GAG3BgrH,EAAA,SAAAhoH;AAA6C5B,EAAA4pH,wBAAAhoH,EAuBzC,SAAAgoH,2BACIhoH,EAAA1C,KAAAT,MAEAA,KAAK21B,KAAO,EACZ31B,KAAKytB,GAAK,EACVztB,KAAKuZ,SAAW,EAChBvZ,KAAK8zC,OAAQ,EACb9zC,KAAK+gE,aAAe,EACpB/gE,KAAKquI,WAAa,EAyI1B,MAlIWljB,yBAAArqH,UAAAkd,aAAP,SAAoBF,GAmBhB,GAlBA3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAiuI,kCAAkCC,QACpDvuI,KAAK21B,KAAO/W,WAAWd,EAAKe,aAAaxe,EAAAiuI,kCAAkCC,QAG3EzwH,EAAKU,aAAane,EAAAiuI,kCAAkCE,MACpDxuI,KAAKytB,GAAK7O,WAAWd,EAAKe,aAAaxe,EAAAiuI,kCAAkCE,MAGzE1wH,EAAKU,aAAane,EAAAiuI,kCAAkCG,YACpDzuI,KAAKuZ,SAAWrD,SAAS4H,EAAKe,aAAaxe,EAAAiuI,kCAAkCG,YAG7E3wH,EAAKU,aAAane,EAAAiuI,kCAAkCI,SACpD1uI,KAAK8zC,MAAQlyC,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAiuI,kCAAkCI,SAG1F5wH,EAAKU,aAAane,EAAAiuI,kCAAkCK,QACpD,OAAQ7wH,EAAKe,aAAaxe,EAAAiuI,kCAAkCK,SACxD,IAAKtuI,GAAAiuI,kCAAkCM,aAAarZ,MAChDv1H,KAAK2V,MAAM3V,KAAK21B,KAAM31B,KAAKytB,GAAIztB,KAAKuZ,SACpC,MACJ,KAAKlZ,GAAAiuI,kCAAkCM,aAAajd,KAChD3xH,KAAK0V,MACL,MACJ,KAAKrV,GAAAiuI,kCAAkCM,aAAaC,MAChD7uI,KAAK2zB,UAUdw3F,wBAAArqH,UAAA6U,MAAP,SAAaggB,EAAclI,EAAYlU,GACnC,GAAM/X,GAAgB,MAAZ+X,EAAmBA,EAAWvZ,KAAKuZ,QAEzC/X,IAAK,GAAKm0B,IAASlI,GACnBztB,KAAK+gE,aAAetzC,EACpBztB,KAAKquI,WAAa5gH,EAElBztB,KAAK8uI,cAEL9uI,KAAK+gE,aAAeprC,EACpB31B,KAAKquI,WAAa14G,EAElB31B,KAAK8uI,YAEL9uI,KAAKquI,WAAa5gH,EAElBpR,EAAAe,OAAOyI,YAAY7lB,MACfulB,MAAO,eACPhB,aAAcvkB,KAAK+gE,aAAc/gE,KAAKquI,YACtC5rH,eAAgBjhB,GAChBosB,aAAc,WACdD,iBAAkB3tB,KAAK8uI,UACvB/gH,cAAe/tB,SAKjBmrH,wBAAArqH,UAAAguI,UAAV,WACQ9uI,KAAK+gE,eAAiB/gE,KAAKquI,YAC3BhyH,EAAAe,OAAOC,aAAard,KAAM,gBAG9BA,KAAK+rI,WAAW7qE,KAAOt/D,EAAA4L,YAAYC,cAC/BzN,KAAK+gE,aACL/gE,KAAK8zC,OAASq3E,wBAAwBC,MAAQ,EAAI5oH,EAAAgC,WAAWC,kBAAkBkJ,mBAGnF3N,KAAKgsI,WAOF7gB,wBAAArqH,UAAA4U,KAAP,WACI2G,EAAAe,OAAOC,aAAard,KAAM,iBAOvBmrH,wBAAArqH,UAAA6yB,MAAP,WACI3zB,KAAK+gE,aAAe/gE,KAAKquI,WAEzBruI,KAAK8uI,aAOF3jB,wBAAArqH,UAAAwc,MAAP,WACI,GAAIjU,GAAmC,GAAI8hH,wBA2B3C,OA1BA9hH,GAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SAExBrV,EAAQsjI,KAAO3sI,KAAK2sI,KACpBtjI,EAAQ63D,KAAOlhE,KAAKkhE,KACpB73D,EAAQkjI,UAAYvsI,KAAKusI,UACzBljI,EAAQojI,aAAezsI,KAAKysI,aAE5BpjI,EAAQssB,KAAO31B,KAAK21B,KACpBtsB,EAAQokB,GAAKztB,KAAKytB,GAClBpkB,EAAQkQ,SAAWvZ,KAAKuZ,SACxBlQ,EAAQyqC,MAAQ9zC,KAAK8zC,MAErBzqC,EAAQ0iI,WAAa,GAAI5hI,MAAKooH,OAAOqa,WAAW5sI,KAAKkhE,MAAQyrE,KAAM3sI,KAAK2sI,OACxEtjI,EAAQ4I,SAAS5I,EAAQ0iI,YAEzB1iI,EAAQ2iI,UACR3iI,EAAQuU,eAEDvU,GAjKJ8hH,wBAAAC,OAAiB,EAN5BD,wBAAAvvG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBzGmo+BxBukG,0ByGlo+BqCyf,EAAAsB,iBAAhC7rI,GAAA8qH,wBAAuBA,EA0KvB9qH,EAAAiuI,mCAOTI,MAAO,QAOPD,SAAU,WACVF,KAAM,OACNC,GAAI,KACJG,OAAQ,SACRC,cACIrZ,MAAO,QACP5D,KAAM,OACNkd,MAAO,WzGu99BT,SAASvuI,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G0Gpq+BjEna,EAAAzB,EAAwC,GACxCic,EAAAjc,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAG5B6pB,EAAA,mBAAAA,SAoOA,MAtMWA,MAAAlpB,UAAAa,OAAP,SAAcmc,GACV9d,KAAKO,GAAKud,EAAKI,SACfle,KAAK+uI,MAAQjxH,EAAKU,aAAane,EAAAwtI,eAAemB,OAASlxH,EAAKe,aAAaxe,EAAAwtI,eAAemB,OAAS,KACjGhvI,KAAKsP,SAAW,KAChBtP,KAAKiuF,MAAQnwE,EAAKU,aAAane,EAAAwtI,eAAeoB,OAASnxH,EAAKe,aAAaxe,EAAAwtI,eAAeoB,OAAS,KACjGjvI,KAAK+H,OAAS+V,EAAKU,aAAane,EAAAwtI,eAAeqB,QACzCtwH,WAAWd,EAAKe,aAAaxe,EAAAwtI,eAAeqB,SAC5C,EACNlvI,KAAKmvI,IAAMrxH,EAAKU,aAAane,EAAAwtI,eAAeuB,KAAOxwH,WAAWd,EAAKe,aAAaxe,EAAAwtI,eAAeuB,MAAQ,EACvGpvI,KAAKqvI,KAAO,EACZrvI,KAAKsvI,cAAgB,EACrBtvI,KAAKuvI,YAAc,EAEfzxH,EAAKU,aAAane,EAAAwtI,eAAeC,OAC7B3jI,KAAKC,MAAMymG,OAAO/yF,EAAKe,aAAaxe,EAAAwtI,eAAeC,OACnD9tI,KAAKoK,MAAQD,KAAKC,MAAMw7C,KAAK9nC,EAAKe,aAAaxe,EAAAwtI,eAAeC,OASlE9tI,KAAKoK,MAAQ,MAYd4f,KAAAlpB,UAAAu7B,KAAP,SAAYwxD,EAAeD,EAAgB1xB,IACpB,oBAAfl8D,KAAKiuF,OAAgCzrF,EAAAgC,WAAWsD,QAAQqtE,4BAIzC,OAAfn1E,KAAKoK,QAAmB8xD,GAA2B,OAAlBl8D,KAAKsP,WACtCtP,KAAKoK,MAAMskC,QAAuB,IAAb1uC,KAAKmvI,IAAY,MAAQ,GAAIhlI,MAAKC,MAAMskC,QAAQ8gG,aAAaxvI,KAAKmvI,MAEnFvhD,EAAS,GACT5tF,KAAKqvI,KAAO,EACZrvI,KAAKsvI,eAAgB,GAAIjkI,OAAOwO,UAChC7Z,KAAKuvI,YAAcvvI,KAAKsvI,cAAyB,KAAT1hD,IAExC5tF,KAAKqvI,KAAO,EACZrvI,KAAKsvI,cAAgB,EACrBtvI,KAAKuvI,YAAc,GAGvBvvI,KAAKyvI,aAAa5hD,MAIhB7jE,KAAAlpB,UAAA2uI,aAAV,SAAuB5hD,GAAA,SAAAA,OAAA,GACnB7tF,KAAK0vI,cAEL,IAAI3nI,GAAS/H,KAAK+H,MAEC,qBAAf/H,KAAKiuF,OAAgCrrF,EAAA6F,YAAY6rE,0BAE1Ct0E,KAAKqvI,KAAO,EACnBtnI,EAAS/H,KAAK2vI,kBACP3vI,KAAKqvI,KAAO,IACnBtnI,EAAS/H,KAAK4vI,oBAJd7nI,EAAS,EAOb/H,KAAKsP,SACDtP,KAAKoK,MAAMiyB,KAAoB,OAAfr8B,KAAK+uI,OAAmBzM,OAAQtiI,KAAK+uI,MAAOhnI,OAAQA,IAAaA,OAAQA,IAE7F/H,KAAKsP,SAAS4E,GAAG,MAAO25E,EAAO7tF,KAAKyvI,aAAezvI,KAAK0vI,aAAc1vI,MAEpD,IAAdA,KAAKqvI,MACLrvI,KAAKsP,SAAS4E,GAAG,WAA0B,IAAdlU,KAAKqvI,KAAarvI,KAAK6vI,SAAW7vI,KAAK8vI,UAAW9vI,OAIhFgqB,KAAAlpB,UAAAqZ,UAAP,WACI,QAASna,KAAKsP,UAGR0a,KAAAlpB,UAAA+uI,SAAV,WACI,GAAM9nI,GAAS/H,KAAK2vI,iBAEpB,KACI3vI,KAAKsP,SAASvH,OACK,oBAAf/H,KAAKiuF,OAAgCrrF,EAAA6F,YAAY6rE,0BAAgCvsE,EAAJ,EACnF,MAAOlI,IAELkI,IAAW/H,KAAK+H,QAChB/H,KAAKsP,SAASygI,IAAI,WAAY/vI,KAAK6vI,SAAU7vI,OAI3CgqB,KAAAlpB,UAAA6uI,gBAAV,WACI,GAAMp2H,GAAWvZ,KAAKuvI,YAAcvvI,KAAKsvI,cACnCp2G,GAAW,GAAI7tB,OAAOwO,UAAY7Z,KAAKsvI,aAE7C,OAAOtvI,MAAK+H,OAASgX,KAAK0xB,IAAIvX,EAAW3f,EAAU,IAOhDyQ,KAAAlpB,UAAA4U,KAAP,SAAYo4E,GACa,MAAjB9tF,KAAKsP,WACDw+E,EAAU,GACV9tF,KAAKqvI,QACLrvI,KAAKsvI,eAAgB,GAAIjkI,OAAOwO,UAChC7Z,KAAKuvI,YAAcvvI,KAAKsvI,cAA0B,KAAVxhD,EAExC9tF,KAAKsP,SAASygI,IAAI,WAAY/vI,KAAK6vI,SAAU7vI,MAC7CA,KAAKsP,SAAS4E,GAAG,WAAYlU,KAAK8vI,UAAW9vI,OAE7CA,KAAK0vI,iBAKP1lH,KAAAlpB,UAAA4uI,aAAV,WACyB,MAAjB1vI,KAAKsP,WACLtP,KAAKsP,SAASygI,IAAI,WAAY/vI,KAAK6vI,SAAU7vI,MAC7CA,KAAKsP,SAASygI,IAAI,WAAY/vI,KAAK8vI,UAAW9vI,MAC9CA,KAAKsP,SAASygI,IAAI,MAAO/vI,KAAKyvI,aAAczvI,MAC5CA,KAAKsP,SAASygI,IAAI,MAAO/vI,KAAK0vI,aAAc1vI,MAC5CA,KAAKsP,SAASoG,OACd1V,KAAKsP,SAAW,OAId0a,KAAAlpB,UAAAgvI,UAAV,WACI,GAAM/nI,GAAS/H,KAAK4vI,kBAEpB,KACI5vI,KAAKsP,SAASvH,OACK,oBAAf/H,KAAKiuF,OAAgCrrF,EAAA6F,YAAY6rE,0BAAgCvsE,EAAJ,EACnF,MAAOlI,IAEM,IAAXkI,GACA/H,KAAK0vI,gBAIH1lH,KAAAlpB,UAAA8uI,iBAAV,WACI,GAAMr2H,GAAWvZ,KAAKuvI,YAAcvvI,KAAKsvI,cACnCp2G,GAAW,GAAI7tB,OAAOwO,UAAY7Z,KAAKsvI,aAE7C,OAAOtvI,MAAK+H,OAAS/H,KAAK+H,OAASgX,KAAK0xB,IAAIvX,EAAW3f,EAAU,IAG9DyQ,KAAAlpB,UAAAstF,UAAP,SAAiBrmF,GACc,MAAvB/H,KAAKgwI,iBACLhwI,KAAKgwI,eAAiBhwI,KAAK+H,QAE/B/H,KAAK+H,OAASA,EAEO,MAAjB/H,KAAKsP,WACLtP,KAAKsP,SAASvH,OAASA,IAIxBiiB,KAAAlpB,UAAAutF,cAAP,WAC+B,MAAvBruF,KAAKgwI,iBACLhwI,KAAK+H,OAAS/H,KAAKgwI,eAEE,MAAjBhwI,KAAKsP,WACLtP,KAAKsP,SAASvH,OAAS/H,KAAKgwI,kBASjChmH,KAAAlpB,UAAAqtF,YAAP,SAAmBF,EAAeC,GAC9B,GAD8B,SAAAA,OAAA,GAC1BluF,KAAKiuF,QAAUA,GAA0B,MAAjBjuF,KAAKsP,SAC7B,IACItP,KAAKsP,SAASvH,OAASmmF,EAASluF,KAAK+H,OAAS,EAChD,MAAOlI,MAQPmqB,KAAAlpB,UAAAsX,IAAV,SAAcC,KA/NlB2R,KAAApO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeqD,O1Gy0+BxBA,Q0Gx0+BK3pB,GAAA2pB,KAAIA,EAsOJ3pB,EAAAwtI,gBACTC,KAAM,OACNkB,MAAO,QACPC,MAAO,QACPC,OAAQ,SACRE,IAAK,MACL3d,KAAM,OACN0b,KAAM,OACNxb,KAAM,OACNoc,OAAQ,SACRC,QAAS,Y1G4m+BP,SAAS1tI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G2G92+BjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bi8G,EAAAj8G,EAAiC,IACjC4sH,EAAA5sH,EAA2D,IAC3D8vI,EAAA9vI,EAAyC,KAIzCstI,EAAA,SAAAtqI,GAA0C5B,EAAAksI,qBAAAtqI,EAMtC,SAAAsqI,wBACItqI,EAAA1C,KAAAT,MAEAA,KAAK20H,WAAY,EACjB30H,KAAK60H,WAAa,GAmM1B,MAhMI4Y,sBAAA3sI,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEnB9d,KAAK8f,SAAU,GAGnB2tH,qBAAA3sI,UAAAkd,aAAA,SAAaF,GACT3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAauuG,EAAAgI,0BAA0BC,aAC5Ch1H,KAAK20H,UAAY/yH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BC,aAGtFl3G,EAAKU,aAAauuG,EAAAgI,0BAA0BO,cAC5Ct1H,KAAK60H,WAAa/2G,EAAKe,aAAakuG,EAAAgI,0BAA0BO,aAI9Dx3G,EAAKU,aAAauuG,EAAAgI,0BAA0BQ,QAC5C3zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BQ,UAEjE3zH,EAAA4I,YAAYC,cAAcgjI,qBAAqByC,YAC/ClwI,KAAK2V,MAAM3V,KAAK20H,WAEhB30H,KAAKmwI,cAAcnwI,KAAK20H,UAAW8Y,qBAAqByC,aAK5DpyH,EAAKU,aAAauuG,EAAAgI,0BAA0BS,WAC5C5zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BS,YAErEx1H,KAAKy1H,WAIL33G,EAAKU,aAAauuG,EAAAgI,0BAA0BpD,OAC5C/vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BpD,QAErE3xH,KAAK0V,OAILoI,EAAKU,aAAauuG,EAAAgI,0BAA0BW,QAC5C9zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BW,UAEjE9zH,EAAA4I,YAAYC,cAAcgjI,qBAAqByC,YAC/ClwI,KAAKk8D,QAELl8D,KAAKowI,cAAc3C,qBAAqByC,aAK5CpyH,EAAKU,aAAauuG,EAAAgI,0BAA0BY,QAC5C/zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BY,SAErE31H,KAAKsoB,SAIbmlH,qBAAA3sI,UAAA6U,MAAA,SAAMmkH,GAGF,GAHE,SAAAA,OAAA,GACF95H,KAAK20H,UAAYmF,EACjB95H,KAAK8f,SAAU,EACI,MAAf9f,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,QACb5pG,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAKsQ,MAAM3V,KAAK20H,UAAW30H,KAAK60H,aAM5D4Y,qBAAA3sI,UAAAqvI,cAAA,SAAcrW,EAA2BwW,GACrC,GADU,SAAAxW,OAAA,IACLl4H,EAAA4I,YAAYC,cAAc6lI,KAC3BtwI,KAAK20H,UAAYmF,EACjB95H,KAAK8f,SAAU,EAEI,MAAf9f,KAAK4pG,QACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACbvkG,EAAI8lB,QAAQmlH,QACRtwI,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAKsQ,MAAM3V,KAAK20H,UAAW30H,KAAK60H,aAQpE4Y,qBAAA3sI,UAAA20H,SAAA,WACI,GAAmB,MAAfz1H,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,QACb5pG,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAKowH,YAMjCgY,qBAAA3sI,UAAA4U,KAAA,WAEI,GADA1V,KAAK8f,SAAU,EACI,MAAf9f,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,QACb5pG,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAKqQ,QAMjC+3H,qBAAA3sI,UAAAo7D,MAAA,WACI,GAAmB,MAAfl8D,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,QACb5pG,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAK62D,SAMjCuxE,qBAAA3sI,UAAAsvI,cAAA,SAAcE,GACV,IAAK1uI,EAAA4I,YAAYC,cAAc6lI,IACR,MAAftwI,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACbvkG,EAAI8lB,QAAQmlH,QACRtwI,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAK62D,SAQzCuxE,qBAAA3sI,UAAAwnB,MAAA,WAEI,GADAtoB,KAAK8f,SAAU,EACI,MAAf9f,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,QACb5pG,KAAK4pG,OAAOvkG,YAAgB0nH,GAAAkB,iBAAmBgiB,EAAAI,2BAC/CrwI,KAAK4pG,OAAOvkG,GAAKijB,SAgBjCmlH,qBAAA3sI,UAAAwc,MAAA,WACI,GAAIjU,GAAgC,GAAIokI,qBAExCpkI,GAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ4U,KAAOje,KAAKie,KACpB5U,EAAQsrH,UAAY30H,KAAK20H,UACzBtrH,EAAQwrH,WAAa70H,KAAK60H,WAE1BxrH,EAAQugG,UACRvgG,EAAQqU,gBACR,KAAK,GAAIrY,KAAOrF,MAAK4pG,OACjBvgG,EAAQugG,OAAOvkG,GAAOrF,KAAK4pG,OAAOvkG,GAAKiY,QACvCjU,EAAQ4I,SAAS5I,EAAQugG,OAAOvkG,GAGpC,IAAuB,MAAnBrF,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,EAInB,MADA30G,GAAQuU,eACDvU,GA1MJokI,qBAAAyC,WAAqB,GAHhCzC,qBAAA7xH,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB3Gkh/BxB6mH,uB2Ghh/BkCrxB,EAAA0B,iBAA7Bz9G,GAAAotI,qBAAoBA,G3Gwh/B3B,SAASntI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G4G5i/BjEna,EAAAzB,EAAwE,GACxEic,EAAAjc,EAA+B,IAE/Bqb,EAAArb,EAA4B,IAC5Bkc,EAAAlc,EAAuB,IACvB6mB,EAAA7mB,EAA6B,IAC7Bk0H,EAAAl0H,EAA4C,IAC5CiT,EAAAjT,EAA2E,GAC3E2sH,EAAA3sH,EAAiC,IACjC4sH,EAAA5sH,EAA0C,IAC1CgvH,EAAAhvH,EAA4B,IAM5BkwI,EAAA,SAAAltI,GAA8C5B,EAAA8uI,yBAAAltI,EAiB1C,SAAAktI,4BACIltI,EAAA1C,KAAAT,MAEAA,KAAKs0H,SAELt0H,KAAK8Z,OAAS1G,EAAAa,iBAAiB,iBAC/BjU,KAAK8Z,OAAO5F,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKu0H,aAAalgH,KAAKrU,OAEjEA,KAAKy0H,UAAW,EAChBz0H,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK20H,WAAY,EACjB30H,KAAK60H,WAAa,GAClB70H,KAAK8f,SAAU,EAwXvB,MArXIuwH,0BAAAvvI,UAAAid,aAAA,SAAaD,GACJ9d,KAAKy0H,WACNtxH,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAauuG,EAAAgI,0BAA0BG,cAC5Cl1H,KAAKw0H,WAAat+G,SAAS4H,EAAKe,aAAakuG,EAAAgI,0BAA0BG,eAIvEp3G,EAAKU,aAAauuG,EAAAgI,0BAA0B1tG,QAC5CvJ,EAAKU,aAAauuG,EAAAgI,0BAA0BhF,WAExCjyG,EAAKU,aAAauuG,EAAAgI,0BAA0B1tG,OAC5CrnB,KAAKgwH,OACDhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAakuG,EAAAgI,0BAA0B1tG,QAGpErnB,KAAKgwH,OACDhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAakuG,EAAAgI,0BAA0BhF,SAIxE/vH,KAAKm1H,WAAan1H,KAAKgwH,OAAO/xG,KAE9Bje,KAAKo1H,kBACLp1H,KAAKy0H,UAAW,GAGhB32G,EAAKU,aAAa,UAClBxe,KAAKuwI,SAAS3xH,WAAWd,EAAKe,aAAa,aAK/CwxH,yBAAAvvI,UAAAyvI,SAAR,SAAiB5f,GACb,IAAK,GAAI5wH,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKs0H,MAAMv0H,GAAGsyH,qBAAqB1B,IAI3C0f,yBAAAvvI,UAAAkd,aAAA,SAAaF,GACLA,EAAKU,aAAauuG,EAAAgI,0BAA0BC,aAC5Ch1H,KAAK20H,UAAY/yH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BC,aAGtFl3G,EAAKU,aAAauuG,EAAAgI,0BAA0BO,cAC5Ct1H,KAAK60H,WAAa/2G,EAAKe,aAAakuG,EAAAgI,0BAA0BO,aAI9Dx3G,EAAKU,aAAauuG,EAAAgI,0BAA0BQ,QAC5C3zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BQ,SAErEv1H,KAAK2V,MAAM3V,KAAK20H,UAAW30H,KAAK60H,YAIhC/2G,EAAKU,aAAauuG,EAAAgI,0BAA0BS,WAC5C5zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BS,YAErEx1H,KAAKy1H,WAIL33G,EAAKU,aAAauuG,EAAAgI,0BAA0BpD,OAC5C/vH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BpD,QAErE3xH,KAAK0V,OAILoI,EAAKU,aAAauuG,EAAAgI,0BAA0BW,QAC5C9zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BW,SAErE11H,KAAKk8D,QAILp+C,EAAKU,aAAauuG,EAAAgI,0BAA0BY,QAC5C/zH,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAakuG,EAAAgI,0BAA0BY,SAErE31H,KAAKsoB,SAIb+nH,yBAAAvvI,UAAA6U,MAAA,SAAMmkH,EAA2BC,GAA3B,SAAAD,OAAA,GACF95H,KAAK8f,SAAU,EACf9f,KAAK20H,UAAYmF,EACjB95H,KAAK60H,WAAakF,EAClB/5H,KAAK00H,UAAYoF,EACjB95H,KAAKowH,OAAQ,EACRpwH,KAAK20H,UAMN30H,KAAKu0H,gBALLv0H,KAAK8Z,OAAOnE,MAAM3V,KAAKgwH,OAAOv8F,MACN,QAApBzzB,KAAK60H,YACL70H,KAAKu0H,iBAOjB8b,yBAAAvvI,UAAA20H,SAAA,WACIz1H,KAAK00H,WAAY,GAGrB2b,yBAAAvvI,UAAA4U,KAAA,WACI1V,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK8Z,OAAOpE,OACZ1V,KAAK8f,SAAU,GAGnBuwH,yBAAAvvI,UAAAo7D,MAAA,WACI,IAAK,GAAIn8D,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKk2H,cAAcl2H,KAAKs0H,MAAMv0H,IAC9BC,KAAKs0H,MAAMv0H,GAAG+f,SAAU,EACxB9f,KAAKs0H,MAAMv0H,GAAG2V,QAItB26H,yBAAAvvI,UAAAwnB,MAAA,WACItoB,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK8Z,OAAOpE,OACZ1V,KAAK8f,SAAU,EACf9f,KAAKi6H,qBAGDoW,yBAAAvvI,UAAAs0H,gBAAR,WACI,GAAmB,MAAfp1H,KAAKgwH,QACqB,MAAtBhwH,KAAKgwH,OAAO4F,QAAkB51H,KAAKgwH,OAAO4F,OAAO1pH,OAAS,EAI1D,IAAK,GAHDskI,GAAwBxwI,KAAKgwH,OAAO6F,oBACpC4a,EAAmCzwI,KAAK0wI,iBAAiBF,GAEpDzwI,EAAY,EAAGA,EAAIywI,EAAezwI,IAAK,CAC5C,GAAI+d,GAAgB3U,SAASkX,cAAc,WAC3CvC,GAAKxR,aAAa,SAAUmkI,EAAkB1wI,IAC9C+d,EAAKxR,aAAa,mBAAoB,OACtC,IAAIqkI,GAAiC,GAAI7jB,GAAA6B,gBACzCgiB,GAAahvI,OAAOmc,EACpB,IAAIo6G,GACAn5G,KAAKC,MAAMD,KAAKE,UAAYjf,KAAKgwH,OAAOmI,QAAUn4H,KAAKgwH,OAAOoI,UAAYp4H,KAAKgwH,OAAOoI,OAE1Fp4H,MAAKi2H,cAAc0a,GACnB3wI,KAAKk2H,cAAcya,GAEnB3wI,KAAKq4H,iBAAiBsY,EAAczY,GACpCl4H,KAAKs4H,kBAAkBqY,EAAczY,GACrCl4H,KAAKu4H,qBAAqBoY,EAAczY,GACxCl4H,KAAKw4H,kBAAkBmY,EAAczY,GAErCl4H,KAAKiS,SAAS0+H,GACd3wI,KAAKs0H,MAAMthH,KAAK29H,KAMxBN,yBAAAvvI,UAAA4vI,iBAAR,SAAyB/2H,GAErB,IAAK,GADDuzF,MACKntG,EAAY,EAAGA,EAAI4Z,EAAO5Z,IAC/BmtG,EAAUl6F,KAAKhT,KAAKgwH,OAAO4F,OAAO72G,KAAKC,MAAMD,KAAKE,SAAWjf,KAAKgwH,OAAO4F,OAAO1pH,SAEpF,OAAOghG,IAGHmjC,yBAAAvvI,UAAAm1H,cAAR,SAAsB0a,GAClBA,EAAa7wH,SAAU,EACvB6wH,EAAaja,YAAa,EAEH,MAAnB12H,KAAKw0H,aACLmc,EAAahnH,UAAYwlG,EAAAyB,YAAYC,aAAa7wH,KAAKw0H,cAIvD6b,yBAAAvvI,UAAAo1H,cAAR,SAAsBya,GAIlB,OAHAA,EAAahxH,MAAMT,EAAIyxH,EAAahqI,MAAQ,EAC5CgqI,EAAahxH,MAAMP,EAAIuxH,EAAa/pI,OAAS,EAErC5G,KAAKgwH,OAAO2G,aAAa5iG,MAC7B,IAAKsgG,GAAAuC,cAAcC,cACf8Z,EAAazxH,EAAIhJ,UACZlW,KAAKgwH,OAAO2G,aAAaz3G,EAAIH,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAahwH,OAAOqrF,QAAQ,IAE1F2+C,EAAavxH,EAAIlJ,UACZlW,KAAKgwH,OAAO2G,aAAav3G,EAAIL,KAAKE,SAAWjf,KAAKgwH,OAAO2G,aAAa/vH,QAAQorF,QAAQ,GAE3F,MACJ,KAAKqiC,GAAAuC,cAAcU,SAEf,KAIJ,KAAKjD,GAAAuC,cAAcW,eAMnB8Y,yBAAAvvI,UAAAu3H,iBAAR,SAAyBsY,EAAgClY,GACrD,GAA8B,MAA1Bz4H,KAAKgwH,OAAO4I,WAAoB,CAEhC,IAAK,GADD7vG,MACKhpB,EAAY,EAAGA,EAAIC,KAAKgwH,OAAO4I,WAAW1sH,OAAQnM,IACvD,GACiC,MAA7BC,KAAKgwH,OAAO4I,WAAW74H,IACQ,MAA/BC,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,GACK,MAA/Blf,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,EAC5B,CACE,GAAIy5G,GAAiB74H,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,EAC3C45G,EAAiB94H,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,CACN,OAArCpf,KAAKgwH,OAAO4I,WAAW74H,GAAGg5H,UAC1BF,EACI95G,KAAKC,MACDD,KAAKE,UAAYjf,KAAKgwH,OAAO4I,WAAW74H,GAAGg5H,QAAU/4H,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,IAC/Elf,KAAKgwH,OAAO4I,WAAW74H,GAAGmf,GAEG,MAArClf,KAAKgwH,OAAO4I,WAAW74H,GAAGi5H,UAC1BF,EACI/5G,KAAKC,MACDD,KAAKE,UAAYjf,KAAKgwH,OAAO4I,WAAW74H,GAAGi5H,QAAUh5H,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,IAC/Epf,KAAKgwH,OAAO4I,WAAW74H,GAAGqf,GAEtC2J,EAAO/V,MAAOkM,EAAGyxH,EAAazxH,EAAI25G,EAAQz5G,EAAGuxH,EAAavxH,EAAI05G,IAGlE/vG,EAAO7c,OAAS,EAChBmQ,EAAAe,OAAOwG,cAAc+sH,GACjBtiH,QACIvI,OAAQiD,GAEZzF,QAASqtH,EAAazxH,EAAGyxH,EAAazxH,GACtCqE,QAASotH,EAAavxH,EAAGuxH,EAAavxH,GACtCqD,cAAeg2G,EACf1+G,QAAQ,EACR4T,iBAAkB3tB,KAAKi5H,eACvBnrG,gBAAiB6iH,GACjB5iH,cAAe,OAEM,IAAlBhF,EAAO7c,QACdmQ,EAAAe,OAAOwG,cAAc+sH,GACjBrtH,QAASyF,EAAO,GAAM,EAAGA,EAAO,GAAM,GACtCxF,QAASwF,EAAO,GAAM,EAAGA,EAAO,GAAM,GACtCtG,cAAeg2G,EACf1+G,QAAQ,EACR4T,iBAAkB3tB,KAAKi5H,eACvBnrG,gBAAiB6iH,GACjB5iH,cAAe,SAMvBsiH,yBAAAvvI,UAAAw3H,kBAAR,SAA0BqY,EAAgClY,GACtD,GAA+B,MAA3Bz4H,KAAKgwH,OAAOsJ,YAAqB,CAEjC,IAAK,GADDC,MACKx5H,EAAY,EAAGA,EAAIC,KAAKgwH,OAAOsJ,YAAYptH,OAAQnM,IAAK,CAC7D,GAAIy5H,GAAU,MAEVA,GADAx5H,KAAKgwH,OAAOsJ,YAAYv5H,GAAGmM,OAAS,EACvB0S,YAELG,KAAKE,UAAYjf,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,GAAKC,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,IAC5EC,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,IAC7BiyF,QAAQ,IAGDhyF,KAAKgwH,OAAOsJ,YAAYv5H,GAAG,GAE5Cw5H,EAAYvmH,KAAK,GAAI7I,MAAK8e,MAAMuwG,EAAYA,IAGrB,IAAvBD,EAAYrtH,QACZykI,EAAal/H,MAAMyN,EAAIq6G,EAAY,GAAGr6G,EACtCyxH,EAAal/H,MAAM2N,EAAIm6G,EAAY,GAAGn6G,GAEtC/C,EAAAe,OAAOkH,WAAWqsH,GACdpsH,YAAag1G,EACb92G,cAAeg2G,EACf1+G,QAAQ,MAMhBs2H,yBAAAvvI,UAAAy3H,qBAAR,SAA6BoY,EAAgClY,GACvB,MAA9Bz4H,KAAKgwH,OAAOyJ,gBAA0Bz5H,KAAKgwH,OAAOyJ,eAAevtH,OAAS,GAC1EmQ,EAAAe,OAAO0G,cAAc6sH,GACjB5sH,SAAU/jB,KAAKgwH,OAAOyJ,eAAe,GAAIz5H,KAAKgwH,OAAOyJ,eAAe,IACpEh3G,cAAeg2G,EACf1+G,QAAQ,KAKZs2H,yBAAAvvI,UAAA03H,kBAAR,SAA0BmY,EAAgClY,GACtD,GAA+B,MAA3Bz4H,KAAKgwH,OAAO0J,YAAqB,CAEjC,IAAK,GADDp3G,MACKviB,EAAY,EAAGA,EAAIC,KAAKgwH,OAAO0J,YAAYxtH,OAAQnM,IACxDuiB,EAAOtP,KAAKhT,KAAKgwH,OAAO0J,YAAY35H,GAExCsc,GAAAe,OAAOwE,WAAW+uH,GACdruH,OAAQA,EACRG,cAAeg2G,EACf1+G,QAAQ,MAKZs2H,yBAAAvvI,UAAAyzH,aAAR,WACSv0H,KAAKowH,QACNpwH,KAAK45H,eAEA55H,KAAK00H,WAAa10H,KAAKgwH,OAAOv8F,KAAO,GACtCzzB,KAAK8Z,OAAOnE,MAAM3V,KAAKgwH,OAAOv8F,QAKlC48G,yBAAAvvI,UAAA84H,YAAR,WACI55H,KAAKs0H,MAAMz0F,KAAK,WACZ,MAAO,GAAM9gB,KAAKE,UAItB,KAAK,GADDu3C,GAAkB,EACbz2D,EAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAAK,CAChD,GAAIy2D,IAAYx2D,KAAKgwH,OAAOr2G,MACxB,MAEC3Z,MAAKs0H,MAAMv0H,GAAG22H,aACf12H,KAAKs0H,MAAMv0H,GAAG22H,YAAa,EAC3B12H,KAAKs0H,MAAMv0H,GAAG+f,SAAU,EACxB9f,KAAKs0H,MAAMv0H,GAAGyxH,SACdh7D,IACAn6C,EAAAe,OAAOyN,cAAc7qB,KAAKs0H,MAAMv0H,GAAGyqB,QAKvC6lH,yBAAAvvI,UAAAm4H,eAAR,SAAuB0X,GACnBA,EAAa7wH,SAAU,EACvB6wH,EAAaja,YAAa,EAC1Bia,EAAaj7H,QAGT26H,yBAAAvvI,UAAAm5H,kBAAR,WACI,IAAK,GAAIl6H,GAAY,EAAGA,EAAIC,KAAKs0H,MAAMpoH,OAAQnM,IAC3CC,KAAKs0H,MAAMv0H,GAAG+f,SAAU,EACxB9f,KAAKs0H,MAAMv0H,GAAG22H,YAAa,GAUnC2Z,yBAAAvvI,UAAAwc,MAAA,WACI,GAAIjU,GAAoC,GAAIgnI,yBAC5ChnI,GAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQmrH,WAAax0H,KAAKw0H,UAC1B,IAAI12G,GAAgB3U,SAASkX,cAAc,WAI3C,OAHAvC,GAAKxR,aAAa,SAAUtM,KAAKm1H,YACjC9rH,EAAQ1H,OAAOmc,GACfzU,EAAQwU,gBACDxU,GArZfgnI,yBAAAz0H,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB5Gk2/BxBypH,2B4Gj2/BsC70H,EAAAG,YAAjCtb,GAAAgwI,yBAAwBA,G5Gy2/B/B,SAAS/vI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G6Gr4/BjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAE/BqhH,EAAArhH,EAA8B,KAE9Bi8G,EAAAj8G,EAAiC,IAEjC6mB,EAAA7mB,EAA6B,IAG7B0kH,EAAA,SAAA1hH,GAA4C5B,EAAAsjH,uBAAA1hH,EAexC,SAAA0hH,0BACI1hH,EAAA1C,KAAAT,MAEAwhH,EAAAgB,cAAcouB,iBAAiB5wI,MA6JvC,MAtJI6kH,wBAAA/jH,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAaqyH,EAAiCC,kBACnD9wI,KAAK+wI,cACD/pH,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAagyH,EAAiCC,iBAEjD,MAAtB9wI,KAAK+wI,gBACL/wI,KAAKgxI,sBAAwBhxI,KAAKi0D,aAAaj0D,KAAK+wI,cAAcjzH,KAAKyL,qBAW7D,MAAdvpB,KAAK6R,QACL7R,KAAKixI,cAAgBjxI,KAAKi0D,aAAaj0D,KAAK6R,MAAMiM,KAAKyL,qBAI/Ds7F,uBAAA/jH,UAAAowI,eAAA,SAAev5H,GACPA,EACA3X,KAAKmxI,oBAAoBnxI,KAAKgxI,sBAAuBhxI,KAAKixI,eAE1DjxI,KAAKmxI,oBAAoBnxI,KAAKixI,cAAejxI,KAAKgxI,wBAQlDnsB,uBAAA/jH,UAAAqwI,oBAAR,SAA4BF,EAA+BG,GACvD,GAAqB,MAAjBH,GAAkD,MAAzBG,GACrBH,EAAc/kI,SAAWklI,EAAsBllI,OAC/C,IAAK,GAAInM,GAAI,EAAGA,EAAIkxI,EAAc/kI,OAAQnM,IAAK,CAC3C,GAAIsxI,GAAeJ,EAAclxI,GAC7BuxI,EAAuBF,EAAsBrxI,EAEP,OAAtCC,KAAK4pG,OAAOynC,EAAanzH,WACzBle,KAAK4pG,OAAOynC,EAAanzH,UAAUF,aAC/Bhe,KAAKuxI,oBAAoBF,EAAcC,MAQvDzsB,uBAAA/jH,UAAAmzD,aAAR,SAAqBn2C,EAAes2C,GAChC,MADgC,UAAAA,UAC3Bt2C,GAIDA,EAAK2L,qBACL2qC,EAAWp0D,KAAKi0D,aAAan2C,EAAK2L,mBAAoB2qC,IAGnDA,EAAS9yD,OAAOwc,IAPZs2C,GAUPywD,uBAAA/jH,UAAAywI,oBAAR,SAA4BzzH,EAAe0zH,GAsCvC,OArCK1zH,EAAKU,aAAa,MAAQgzH,EAAahzH,aAAa,MACrDV,EAAKxR,aAAa,IAAK,MAGtBwR,EAAKU,aAAa,MAAQgzH,EAAahzH,aAAa,MACrDV,EAAKxR,aAAa,IAAK,MAGtBwR,EAAKU,aAAa,WAAagzH,EAAahzH,aAAa,WAC1DV,EAAKxR,aAAa,SAAU,MAG3BwR,EAAKU,aAAa,WAAagzH,EAAahzH,aAAa,WAC1DV,EAAKxR,aAAa,SAAU,KAI3BwR,EAAKU,aAAa,UACjBV,EAAKU,aAAa,WAAaV,EAAKU,aAAa,YACnDgzH,EAAahzH,aAAa,UAE1BV,EAAKxR,aAAa,QAAS,MAG1BwR,EAAKU,aAAa,YAAcgzH,EAAahzH,aAAa,YAC3DV,EAAKxR,aAAa,UAAW,QAG5BwR,EAAKU,aAAa,iBACnBV,EAAKxR,aAAa,eAAgB,SAIlCwR,EAAKU,aAAa,SAClBV,EAAKw9B,gBAAgB,QAGlBx9B,GAGX+mG,uBAAA/jH,UAAAwc,MAAA,WACI,GAAMjU,GAAkC,GAAIw7G,uBAE5Cx7G,GAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQ0nI,cAAgB/wI,KAAK+wI,cAC7B1nI,EAAQ4nI,cAAgBjxI,KAAKixI,cAC7B5nI,EAAQ2nI,sBAAwBhxI,KAAKgxI,sBACrC3nI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ4U,KAAOje,KAAKie,KAEpB5U,EAAQugG,UACRvgG,EAAQqU,gBACR,KAAK,GAAIrY,KAAOrF,MAAK4pG,OACjBvgG,EAAQugG,OAAOvkG,GAAOrF,KAAK4pG,OAAOvkG,GAAKiY,QACvCjU,EAAQ4I,SAAS5I,EAAQugG,OAAOvkG,GAGpC,IAAuB,MAAnBrF,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,MACZ,IAAyB,MAArBh+G,KAAKkgB,aAAsB,CAClC,GAAI89F,GAA4Bh+G,KAAKkgB,aAAa5C,OAClD0gG,GAAYz+F,SAASL,EAAIlf,KAAKkgB,aAAaX,SAASL,EACpD8+F,EAAYz+F,SAASH,EAAIpf,KAAKkgB,aAAaX,SAASH,EAEpD/V,EAAQ6W,aAAe89F,EACvB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,EAInB,MADA30G,GAAQuU,eACDvU,GA9Kfw7G,uBAAAjpG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB7GgggCxBi+F,yB6G///BoCzI,EAAA0B,iBAA/Bz9G,GAAAwkH,uBAAsBA,CAiLnC,IAAMgsB,IACFC,eAAgB,kB7Gw1/Bd,SAASxwI,EAAQD,EAASF,GAE/B,Y8GthgCD,IAAAyB,GAAAzB,EAAqD,GACrDs5F,EAAAt5F,EAA8B,IAC9B4C,EAAA5C,EAAwB,GACxB+B,EAAA/B,EAAgC,GAGhCqiH,EAAA,WAqBI,QAAAA,iBACIxiH,KAAKyxI,aAAc,EACnBzxI,KAAK0xI,YAAa,EAClB1xI,KAAK2xI,iBAEL,IAAI3iH,GAAkByqE,EAAAO,cAAcvB,eAA2C,0BACjE,OAAVzpE,IACAhvB,KAAKorI,YAAYp8G,GACjBhvB,KAAK0xI,YAAa,GAGC,MAAnB3uI,EAAAuF,QAAQgM,SACRvR,EAAAuF,QAAQgM,QAAQJ,GAAGnR,EAAAuF,QAAQoP,YAAa1X,KAAKkxI,eAAe78H,KAAKrU,OAoI7E,MAhIkBwiH,eAAAouB,iBAAd,SAA+BgB,GAC3BpvB,cAAcqvB,eAAe7+H,KAAK4+H,IAGxBpvB,cAAAsvB,gBAAd,WACI,MAAOtvB,eAAcuvB,cAGXvvB,cAAAwvB,wBAAd,WACI,MAAOxvB,eAAcyvB,sBAGjBzvB,cAAA1hH,UAAAsqI,YAAR,SAAoBttH,GAkBhB,GAjBA9d,KAAK4T,SACoB,UAArBnQ,OAAgB,QAAgBpD,EAAA6xI,wBAAwBC,OAAS9xI,EAAA6xI,wBAAwBE,QAEzFt0H,EAAKU,aAAane,EAAAgyI,qCAAqCC,gBACvDtyI,KAAKyxI,YAAc7vI,EAAA4I,YAAY8D,aAC3BwP,EAAKe,aAAaxe,EAAAgyI,qCAAqCC,gBAI3Dx0H,EAAKU,aAAane,EAAAgyI,qCAAqCtqH,SACvD/nB,KAAK2G,MAAQ/E,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAgyI,qCAAqCtqH,SAG3FjK,EAAKU,aAAane,EAAAgyI,qCAAqCpqH,UACvDjoB,KAAK4G,OAAShF,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAAgyI,qCAAqCpqH,UAG5FnK,EAAKU,aAAane,EAAAgyI,qCAAqCE,iBAMvD,IAAK,GALDvwC,GAAYpgG,EAAAsgB,WAAWmD,YACvBvH,EAAKe,aAAaxe,EAAAgyI,qCAAqCE,iBACvD,KAGKxyI,EAAI,EAAGA,EAAIiiG,EAAU91F,OAAQnM,IAClCC,KAAK2xI,eAAe3+H,KAAKpR,EAAAsgB,WAAWC,YAAY6/E,EAAUjiG,MAK9DyiH,cAAA1hH,UAAAowI,eAAR,SACIv5H,EACA0a,EACAmgH,EACAC,EACA/7H,EACAE,GAEK5W,KAAK0xI,aAIV/5H,EAAa3X,KAAK0yI,sBAAsB/6H,EAAY0a,GACpD1a,EAAa3X,KAAK2yI,4BAA4Bh7H,EAAY86H,EAAc/7H,GAExE8rG,cAAcuvB,aAAe,GACzB/xI,KAAKyxI,cACLjvB,cAAcuvB,aAAe/xI,KAAK4T,SAAW,KAG7C+D,EACAxO,SAASkI,KAAK/H,UAAUC,IAAIi5G,cAAcowB,oBAE1CzpI,SAASkI,KAAK/H,UAAU6N,OAAOqrG,cAAcowB,oBAGjD5yI,KAAK6yI,iBAAiBl7H,EAAY66H,EAAaC,EAAc/7H,EAAYE,GACzE5W,KAAK8yI,qBAAqBn7H,GAE1B6qG,cAAcyvB,qBAAuBzvB,cAAcuvB,eAG/CvvB,cAAA1hH,UAAA4xI,sBAAR,SAA8B/6H,EAAqB0a,GAC/C,GAAI1a,EAAY,CACZ,IAAK,GAAI5X,GAAI,EAAGA,EAAIC,KAAK2xI,eAAezlI,OAAQnM,IAC5C,GAAIsyB,EAAQryB,KAAK2xI,eAAe5xI,GAAG,IAAMsyB,EAAQryB,KAAK2xI,eAAe5xI,GAAG,GACpE,OAAO,CAGf,QAAO,EAEX,OAAO,GAGHyiH,cAAA1hH,UAAA6xI,4BAAR,SAAoCh7H,EAAqB86H,EAAsB/7H,GAC3E,GAAIiB,EAAY,CACZ,GAAIo7H,GAAS5pI,SAASC,eAAe,UACjCklE,EAASp4D,SAASzS,OAAO0S,iBAAiB48H,GAAQj8H,IACjD3N,UAASkI,KAAK/H,UAAUiO,SAAS,YAClC+2D,MAGJ,IAAM1nE,IAAU6rI,GAAgB,EAAI/7H,GAAc43D,IAAW,KAAO,MAC9D0kE,EAAchzI,KAAK2G,MAAM,GAAKC,CAEpC,OAAO5G,MAAK0yI,sBAAsB/6H,EAAYq7H,GAGlD,MAAOr7H,IAGH6qG,cAAA1hH,UAAA+xI,iBAAR,SACIl7H,EACA66H,EACAC,EACA/7H,EACAE,GAEA,GAAIm0D,GAAS5hE,SAASC,eAAe,SACrC,IAAIuO,EAAY,CACZ,GAAM22D,GAASp4D,SAASzS,OAAO0S,iBAAiB40D,GAAQj0D,KAClDlQ,GAAU6rI,GAAgB,EAAI/7H,GAAc43D,IAAW,KAAO,KACpEpsE,GAAAsD,gBAAgBoJ,SAASq9D,OAAOjsE,KAAK2G,MAAM,GAAIC,OAE/C1E,GAAAsD,gBAAgBoJ,SAASq9D,OAAOjsE,KAAK2G,MAAM,GAAI3G,KAAK4G,OAAO,GAI/D1E,GAAAsD,gBAAgBoJ,SAASyD,OAAOnQ,EAAAsD,gBAAgB+L,QAG5CixG,cAAA1hH,UAAAgyI,qBAAR,SAA6Bn7H,GACzB,IAAK,GAAI5X,GAAI,EAAGA,EAAIyiH,cAAcqvB,eAAe3lI,OAAQnM,IACrDyiH,cAAcqvB,eAAe9xI,GAAGmxI,eAAev5H,IAjK/B6qG,cAAAowB,mBAA6B,iBAEtCpwB,cAAAuvB,aAAe,GAEfvvB,cAAAyvB,qBAAuB,GAEvBzvB,cAAAqvB,kBA8JnBrvB,gBArKaniH,GAAAmiH,cAAaA,EAuKbniH,EAAAgyI,sCACTY,gBAAiB,iBACjBX,aAAc,cACdrqH,OAAQ,SACRF,MAAO,QACPwqH,gBAAiB,kBAGRlyI,EAAA6xI,yBACTgB,SAAU,WACVC,UAAW,YACXf,QAAS,UACTD,OAAQ,W9Gi+/BN,SAAS7xI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G+GtqgCjEna,EAAAzB,EAA4C,GAC5C6B,EAAA7B,EAA8B,GAC9Bqb,EAAArb,EAA4B,IAE5BizI,EAAAjzI,EAAqB,KACrBiT,EAAAjT,EAA2E,GAC3Es5F,EAAAt5F,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAC/BgiF,EAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3BkzI,EAAAlzI,EAAsB,KAEtBsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BsO,EAAAtO,EAA8B,IAC9BmzI,EAAAnzI,EAA6B,KAC7B6kH,EAAA7kH,EAAuB,KACvBwC,EAAAxC,EAA4B,IAC5B2C,EAAA3C,EAAuC,IAInCwzH,EAAU3xH,EAAAkD,cAAcC,KAAKwuH,QASjCvQ,EAAA,SAAAjgH,GAA6B5B,EAAA6hH,QAAAjgH,EAwEzB,SAAAigH,WACIjgH,EAAA1C,KAAAT,MALIA,KAAAuzI,cAAwB,EAExBvzI,KAAAwzI,aAAuB,EAM3BxzI,KAAKyzI,UACLzzI,KAAK0zI,wBACL1zI,KAAK2zI,oBAAqB,EAC1B3zI,KAAK4zI,qBAAsB,EAC3B5zI,KAAK6zI,mBAAoB,EACzB7zI,KAAK8zI,oBAAsB,EAE3B9zI,KAAK+zI,WAAa3gI,EAAAa,iBAAiB,WACnCjU,KAAK+zI,WAAW7/H,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKgkG,SAAS3vF,KAAKrU,OAEjEA,KAAKwkH,qBAELxkH,KAAKg0I,gBAAkB,GAAI7pI,MAAKqH,UAChCxR,KAAKiS,SAASjS,KAAKg0I,iBAorB3B,MA3qBW5wB,SAAAtiH,UAAAa,OAAP,SAAcmc,GAaV,GAZA3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEU,MAAnB9d,KAAK+gB,YAA8C,MAAxB/gB,KAAKg0I,kBAChCh0I,KAAKg0I,gBAAgB/hI,SAASjS,KAAK+gB,YACnC/gB,KAAKg0I,gBAAgBpzH,KAAO5gB,KAAK+gB,YAGZ,MAArB/gB,KAAKkgB,cAAgD,MAAxBlgB,KAAKg0I,kBAClCh0I,KAAKg0I,gBAAgB/hI,SAASjS,KAAKkgB,cACnClgB,KAAKg0I,gBAAgBpzH,KAAO5gB,KAAKkgB,cAGjCpC,EAAKU,aAAane,EAAA4zI,kBAAkB5uB,SAEpC,IAAK,GADDC,GAAyBxnG,EAAKe,aAAaxe,EAAA4zI,kBAAkB5uB,SAASr/F,MAAM,KACvEjmB,EAAY,EAAGA,EAAIulH,EAAQp5G,OAAQnM,IAAK,CAC7C,GAAIivB,GAAkByqE,EAAAO,cAAcvB,eAAe6sB,EAAQvlH,GAC7C,OAAVivB,GACAhvB,KAAKorI,YAAYp8G,KAYzBo0F,QAAAtiH,UAAAsqI,YAAR,SAAoBttH,GAOZA,EAAKU,aAAa,eAClBxe,KAAKk0I,WAAah+H,SAAS4H,EAAKe,aAAa,eAS7Cf,EAAKU,aAAa,WAClBxe,KAAKm0I,OAASvyI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WASvDf,EAAKU,aAAa,WAClBxe,KAAKo0I,OAASxyI,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,WASvDf,EAAKU,aAAa,iBAClBxe,KAAKotH,aAAel3G,SAAS4H,EAAKe,aAAa,iBAS/Cf,EAAKU,aAAa,kBAClBxe,KAAKqtH,cAAgBn3G,SAAS4H,EAAKe,aAAa,kBAShDf,EAAKU,aAAa,wBAClBxe,KAAKq0I,oBAAsBn+H,SAAS4H,EAAKe,aAAa,wBAStDf,EAAKU,aAAa,mBAClBxe,KAAKs0I,iBAAmBp+H,SAAS4H,EAAKe,aAAa,oBAEnD7e,KAAKs0I,iBAAmB,GASxBx2H,EAAKU,aAAa,uBAClBxe,KAAKu0I,qBAAuBr+H,SAAS4H,EAAKe,aAAa,wBAEvD7e,KAAKu0I,qBAAuB,IAS5Bz2H,EAAKU,aAAa,cAClBxe,KAAKw0I,YAAct+H,SAAS4H,EAAKe,aAAa,eAE9C7e,KAAKw0I,YAAc,EASnB12H,EAAKU,aAAa,aAClBxe,KAAKy0I,WAAav+H,SAAS4H,EAAKe,aAAa,cAE7C7e,KAAKy0I,WAAa,GASlB32H,EAAKU,aAAa,uBAClBxe,KAAK00I,mBAAqB52H,EAAKe,aAAa,sBAG5C7e,KAAK4gB,MACL5gB,KAAK20I,gBAULvxB,QAAAtiH,UAAA8zI,YAAR,SAAoB5pE,GAChB,IAAK,GAAIjrE,GAAY,EAAGA,EAAIC,KAAKk0I,WAAYn0I,IAAK,CAC9C,GAAI2kG,GAAc,GAAI2uC,GAAAwB,KACtB,IAA+B,MAA3B70I,KAAK00I,mBAEL,IAAK,GADDpvB,GAAyBtlH,KAAK00I,mBAAmB1uH,MAAM,KAClD2c,EAAY,EAAGA,EAAI2iF,EAAQp5G,OAAQy2B,IACxC+hE,EAAK6gB,UAAU9rB,EAAAO,cAAcvB,eAAe6sB,EAAQ3iF,IAG5D+hE,GAAK5kF,SAAU,EACf4kF,EAAK5gG,WACD/D,EAAI,EAAIC,KAAKyzI,OAAO1zI,EAAI,GAAK,KAC7BA,EAAIC,KAAKk0I,WAAa,EAAIl0I,KAAKyzI,OAAO1zI,EAAI,GAAK,KAC/CA,EACAC,KAAKyiH,SACLz3C,EAAMjrE,GACNC,KAAKm0I,OAAOp0I,GACZC,KAAKo0I,OAAOr0I,GACZC,KAAKq0I,oBACL,EACA,EACAr0I,KAAKotH,aACLptH,KAAKqtH,cACLrtH,KAAKw0I,YAAcz0I,EACnBC,KAAKy0I,WAAa10I,GAGlBC,KAAKwzI,YAEgC,MAAjC7wI,EAAAoG,YAAYmxE,mBAC8B,MAA1Cv3E,EAAAoG,YAAYmxE,kBAAkB1Y,UACuB,MAArD7+D,EAAAoG,YAAYmxE,kBAAkB1Y,SAAS1J,YACqC,MAA5En1D,EAAAoG,YAAYmxE,kBAAkB1Y,SAAS1J,WAAgC,qBACQ,MAA/En1D,EAAAoG,YAAYmxE,kBAAkB1Y,SAAS1J,WAAgC,oBAAE/3D,KAEzE2kG,EAAKowC,YAAcnyI,EAAAoG,YAAYmxE,kBAAkB1Y,SAAS1J,WAAgC,oBAAE/3D,IAIhE,MAA5B4C,EAAAoG,YAAYqhE,cACyB,MAArCznE,EAAAoG,YAAYqhE,aAAa5I,UACuB,MAAhD7+D,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,YACqC,MAAvEn1D,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,WAAgC,qBACQ,MAA1En1D,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,WAAgC,oBAAE/3D,KAEpE2kG,EAAKowC,YAAcnyI,EAAAoG,YAAYqhE,aAAa5I,SAAS1J,WAAgC,oBAAE/3D;AAI/F2kG,EAAKxwF,GAAGk/H,EAAA2B,KAAK1xB,YAAarjH,KAAKsjH,cAAcjvG,KAAKrU,OAClDA,KAAKg0I,gBAAgB/hI,SAASyyF,GAC9B1kG,KAAKyzI,OAAOzgI,KAAK0xF,GAErB1kG,KAAKg0I,gBAAgBl0H,SAAU,GAU5BsjG,QAAAtiH,UAAAgD,WAAP,SACIokG,EACAl9B,EACAgqE,EACAC,EACAC,EACAt+E,EACA0vD,GAEAtmH,KAAKm1I,YAAcv+E,EACnB52D,KAAKo1I,SAAWJ,EAChBh1I,KAAKq1I,YAAcJ,EAEnBj1I,KAAKyiH,SAAWva,EAChBloG,KAAKwzI,YAAc0B,EACnBl1I,KAAK40I,YAAY5pE,IASdo4C,QAAAtiH,UAAAijH,uBAAP,SAA8Bh3G,GAC1B/M,KAAK0zI,qBAAuB3mI,GASzBq2G,QAAAtiH,UAAA8iH,YAAP,SAAmB94C,GAOf,GAFA9qE,KAAKwkH,qBAEc,MAAfxkH,KAAKyzI,OACL,IAAK,GAAI1zI,GAAY,EAAGA,EAAIC,KAAKk0I,WAAYn0I,IACrB,MAAhB+qE,EAAU/qE,IACY,MAAlBC,KAAKyzI,OAAO1zI,KACZC,KAAKyzI,OAAO1zI,GAAG+f,SAAU,EACzB9f,KAAKyzI,OAAO1zI,GAAG4wD,QAAQma,EAAU/qE,IACjCC,KAAKyzI,OAAO1zI,GAAG6jH,gBAyB5BR,QAAAtiH,UAAAwkG,UAAP,SACIgwC,EACAC,EACApvC,GAgCA,GAjCA,SAAAovC,OAAA,GAOAv1I,KAAKw1I,cACLx1I,KAAKuzI,cAAe,EAEC,MAAjBvzI,KAAKo1I,UACLp1I,KAAKo1I,SAASnxB,SAAS,SAEH,MAApBjkH,KAAKq1I,aACLr1I,KAAKq1I,YAAYpxB,SAAS,SAG9Be,EAAAwC,OAAOikB,MAAO,EACd4H,EAAAwB,MAAMY,OAAQ,EACdnC,EAAAoC,aAAaC,OAAQ,EAErB31I,KAAK2zI,oBAAqB,EAC1B3zI,KAAK4zI,qBAAsB,EAC3B5zI,KAAK6zI,mBAAoB,EAEzB7zI,KAAK41I,eAAiBvqI,KAAKs9C,MAE3B3oD,KAAK8f,SAAU,EACf9f,KAAKg0I,gBAAgBl0H,SAAU,EAE/B9f,KAAKwkH,qBACLxkH,KAAK8zI,oBAAsB,EAER,MAAf9zI,KAAKyzI,OAAgB,CACrB,IAAK,GAAI1zI,GAAY,EAAGA,EAAIC,KAAKk0I,WAAYn0I,IACzC,GAAsB,MAAlBC,KAAKyzI,OAAO1zI,IACRC,KAAK0zI,qBAAqBxnI,OAAS,EAAG,CACtClM,KAAKyzI,OAAO1zI,GAAG+f,SAAU,EACzB9f,KAAKyzI,OAAO1zI,GAAG4wD,QAAQ3wD,KAAK0zI,qBAAqB3zI,IAGjDC,KAAKyzI,OAAO1zI,GAAGomG,iBACf,KAAK,GAAIxjE,GAAI,EAAGA,EAAI3iC,KAAKq0I,oBAAqB1xG,IAC1C3iC,KAAKyzI,OAAO1zI,GAAGomG,eAAenzF,KAAKmzF,EAAepmG,GAAG4iC,IACrDwjE,EAAepmG,GAAG4iC,GAAK,IAG3B3iC,MAAKyzI,OAAO1zI,GAAG6jH,YAAY2xB,GAC3Bv1I,KAAKyzI,OAAO1zI,GAAGulG,YAaP,MAAhBgwC,GAAwBA,EACxBt1I,KAAK+zI,WAAWp+H,MAAM3V,KAAKu0I,sBAE3Bv0I,KAAK+zI,WAAWp+H,MAAM3V,KAAKs0I,kBAQ/Bt0I,KAAKwzI,YACLrxD,EAAAp4D,SAASsS,KAAK,uBAEd8lD,EAAAp4D,SAASsS,KAAK,yBAGlB8lD,EAAAp4D,SAAS8jE,KAAK,mBAAoB,GAAG,IAG/Bu1B,QAAAtiH,UAAA+0I,qCAAV,WACI,OACKrzI,EAAAgC,WAAWC,kBAAkBwjE,qBAAuB,GACjDzlE,EAAAgC,WAAWC,kBAAkByjE,iBAAmB,GAC3DplE,EAAAwC,uBAAuB6lE,OAAS3oE,EAAAgC,WAAWC,kBAAkBirE,oBAAsB,KAC3EjhE,EAAAyB,cAAc+nE,mBAahBmrC,QAAAtiH,UAAAkjG,SAAP,SAAgBpvF,EAAY+e,EAAwB6xE,EAA6BswC,GAAjF,GAAAt8H,GAAAxZ,IAwCI,IAxCwB,SAAA2zB,OAAA,GAAwB,SAAA6xE,OAAA,GAA6B,SAAAswC,OAAA,GACzEtwC,GACAxlG,KAAK2zI,oBAAqB,EACE,MAAxB3zI,KAAK+1I,iBACL97H,aAAaja,KAAK+1I,iBAElB/1I,KAAK61I,uCACL71I,KAAK+1I,gBAAkBzgI,WACnB,WAAM,MAAAkE,GAAKwqF,SAAS,MAAM,GAAO,GAAO,IACxChkG,KAAKg2I,iCAGTh2I,KAAK6zI,mBAAoB,GAEtBiC,GACqB,MAAxB91I,KAAK+1I,iBACL97H,aAAaja,KAAK+1I,iBAEtB/1I,KAAK6zI,mBAAoB,IAEzB7zI,KAAK+zI,WAAWr+H,OAChB1V,KAAK4zI,qBAAsB,GAG3BjgH,IACA2/G,EAAAoC,aAAaC,OAAQ,EACrBxzD,EAAAp4D,SAASrU,KAAK,oBAEc,MAAxB1V,KAAK+1I,iBACL97H,aAAaja,KAAK+1I,iBAEtB/1I,KAAK6zI,mBAAoB,EACzB7zI,KAAK+zI,WAAWr+H,OAChB1V,KAAK4zI,qBAAsB,GAO3B5zI,KAAK2zI,oBAAsB3zI,KAAK4zI,qBAAuB5zI,KAAK6zI,oBAC5D7zI,KAAKuzI,aAAevzI,KAAKi2I,kBAGpBxnI,EAAAyB,cAAc+nE,mBACbn1E,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,eAEzD7mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDrhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASu7D,kBAAmB,MAE1DvwC,GAA0B,MAAjB3zB,KAAKo1I,UACdp1I,KAAKo1I,SAASnxB,SAAS,SAEvBtwF,GAA6B,MAApB3zB,KAAKq1I,aACdr1I,KAAKq1I,YAAYpxB,SAAS,SAG9BjkH,KAAKk2I,YAAa,EAClBl2I,KAAKm2I,YAAa,EAClBn2I,KAAKo2I,YAAa,EAClBp2I,KAAKq2I,YAAa1iH,GAAgB3zB,KAAKs2I,aAAa,GAEjC,MAAft2I,KAAKyzI,QACL,IAAK,GAAI1zI,GAAY,EAAGA,EAAIC,KAAKk0I,WAAYn0I,IACnB,MAAlBC,KAAKyzI,OAAO1zI,IAC6B,IAArCC,KAAK0zI,qBAAqBxnI,SAC1BlM,KAAKyzI,OAAO1zI,GAAG4wD,QAAQ3wD,KAAK0zI,qBAAqB3zI,KAG7C4zB,IACE3zB,KAAKk2I,YAAel2I,KAAKm2I,YAAen2I,KAAKo2I,YAAep2I,KAAKq2I,YAI/Dr2I,KAAKk2I,YAAcl2I,KAAKm2I,YAAcn2I,KAAKo2I,YAAcp2I,KAAKq2I,WACpD,IAANt2I,GACAC,KAAKyzI,OAAO1zI,GAAGikG,SAASrwE,GAErB3zB,KAAKm2I,YAAcn2I,KAAKo2I,YAAcp2I,KAAKq2I,WACxC,IAANt2I,GAAiB,IAANA,GACXC,KAAKyzI,OAAO1zI,GAAGikG,SAASrwE,GAErB3zB,KAAKo2I,YAAcp2I,KAAKq2I,WACrB,IAANt2I,GAAiB,IAANA,GAAiB,IAANA,GACtBC,KAAKyzI,OAAO1zI,GAAGikG,SAASrwE,GAErB3zB,KAAKq2I,aACF,IAANt2I,GAAiB,IAANA,GAAiB,IAANA,GAAiB,IAANA,GACjCC,KAAKyzI,OAAO1zI,GAAGikG,SAASrwE,IAhBhC3zB,KAAKyzI,OAAO1zI,GAAGikG,SAASrwE,KA4C1CyvF,QAAAtiH,UAAAk1I,8BAAV,WACI,GAAIz8H,GAAW,CAmBf,OAjBI/W,GAAAgC,WAAWC,kBAAkByjE,iBAAmB,IAChD3uD,EAAWvZ,KAAKu2I,+BAA+B/zI,EAAAgC,WAAWC,kBAAkByjE,mBAG5E1lE,EAAAgC,WAAWC,kBAAkBwjE,qBAAuB,IACpD1uD,EAAW/W,EAAAgC,WAAWC,kBAAkBwjE,sBAGxCzlE,EAAAgC,WAAWC,kBAAkBirE,oBAAsB,GAAK5sE,EAAAwC,uBAAuB6lE,QAC/E5xD,EAAWvZ,KAAKu2I,+BACZx3H,KAAKmf,IACD17B,EAAAgC,WAAWC,kBAAkByjE,iBAC7B1lE,EAAAgC,WAAWC,kBAAkBirE,uBAKlCn2D,GASD6pG,QAAAtiH,UAAAy1I,+BAAV,SAAyCC,GACrC,GAAM7tF,GAAMt9C,KAAKs9C,MACX7zC,EAAO6zC,EAAM3oD,KAAK41I,eAClBa,EAAmBz2I,KAAK02I,qBAC9B,OAAO33H,MAAKmf,IAAIs4G,EAAU1hI,EAAO2hI,EAAkB,IAG7CrzB,QAAAtiH,UAAA41I,oBAAV,WACI,MAAQ12I,MAAKyzI,OAAOzzI,KAAKk0I,WAAa,GAAGyC,kBAAoB,GAAM,KAG/DvzB,QAAAtiH,UAAAw1I,aAAR,SAAqB5vB,GACjB,GAAqB,MAAjB1mH,KAAKo1I,SACL,OAAO,CAKX,KAAK,GAFDz7H,GAAQ,EAEH5Z,EAAI,EAAGA,EAAI2mH,EAAW3mH,IAC3B,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK0zI,qBAAqB3zI,GAAGmoG,QAAQh8F,OAAQy2B,IACb,KAA5C3iC,KAAK0zI,qBAAqB3zI,GAAGmoG,QAAQvlE,IACrChpB,GAKZ,OAAOA,IAAS,GASbypG,QAAAtiH,UAAAwiH,cAAP,SAAqBoD,GAYjB,GAXqB,MAAjB1mH,KAAKo1I,UACLp1I,KAAK42I,MAAMlwB,GAGfvkC,EAAAp4D,SAASsS,KAAK,sBAAwBqqF,GAEtC1mH,KAAK8zI,sBACL9zI,KAAKwkH,kBAAoBkC,EACzB1mH,KAAKyzI,OAAO/sB,GAAW5mG,SAAU,EACjC9f,KAAKyX,KAAK2rG,QAAQC,aAEdrjH,KAAK8zI,sBAAwB9zI,KAAKk0I,WAAY,CAC9Cl0I,KAAK20I,eACLxyD,EAAAp4D,SAASrU,KAAK,mBAAoB,IAClCysE,EAAAp4D,SAASrU,KAAK,oBACVsvG,EAAAwC,OAAOikB,OACP6H,EAAAoC,aAAajK,MAAO,EACC,MAAjBzrI,KAAKo1I,UAAuD,UAAnCp1I,KAAKo1I,SAASjpB,kBACvCnsH,KAAKo1I,SAASnxB,SAAS,YAEH,MAApBjkH,KAAKq1I,aAA6D,UAAtCr1I,KAAKq1I,YAAYlpB,kBAC7CnsH,KAAKq1I,YAAYpxB,SAAS,YAEzBjkH,KAAKwzI,aAAgB/kI,EAAAyB,cAAc8nE,oBACpCmK,EAAAp4D,SAASsS,KAAK,wBAEdr8B,KAAKwzI,cAAgBxzI,KAAK62I,aAC1B10D,EAAAp4D,SAASsS,KAAK,yBAGM,MAAxBr8B,KAAK+1I,iBACL97H,aAAaja,KAAK+1I,iBAEtB/1I,KAAK+zI,WAAWr+H,MAahBsvG,GAAAwC,OAAOikB,MAAO,EACdzrI,KAAKyX,KAAK2rG,QAAQhE,gBAClBp/G,KAAKg0I,gBAAgBl0H,SAAU,IAI/BsjG,QAAAtiH,UAAA+1I,UAAR,WACI,GAAIC,IAAwB,CAE5B,IAA0C,MAAtCn0I,EAAAoG,YAAYmxE,kBAAkBiqC,MAAgBxhH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAS,EAC1F,IAAK,GAAInM,GAAY,EAAGA,EAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAQnM,IAC/D4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAGg0B,OAAS4/F,EAAQojB,YACvDD,GAAe,EAK3B,OAAOA,IAGH1zB,QAAAtiH,UAAAm1I,gBAAR,WACI,OAAO,GAGH7yB,QAAAtiH,UAAA81I,MAAR,SAAclwB,GACV,OAAQA,GACJ,IAAK,GACG1mH,KAAKq2I,aACLrxB,EAAAwC,OAAOikB,MAAO,EACd4H,EAAAwB,MAAMY,OAAQ,EACdz1I,KAAKyzI,OAAO,GAAGuD,WAAW,IAAK,KACV,MAAjBh3I,KAAKo1I,UAAuD,UAAnCp1I,KAAKo1I,SAASjpB,mBACvChqC,EAAAp4D,SAASsS,KAAK,oBACdr8B,KAAKo1I,SAASnxB,SAAS,UACC,MAApBjkH,KAAKm1I,aACLn1I,KAAKm1I,YAAYlxB,SAAS,YAGV,MAApBjkH,KAAKq1I,aAA6D,UAAtCr1I,KAAKq1I,YAAYlpB,kBAC7CnsH,KAAKq1I,YAAYpxB,SAAS,aAOtCb,QAAAtiH,UAAA6zI,aAAR,WACQ30I,KAAK4gB,OACL5gB,KAAKi3I,WAAaj3I,KAAK4gB,KACvB5gB,KAAK4gB,KAAKd,SAAU,EACpB9f,KAAK4gB,KAAO,OAIZwiG,QAAAtiH,UAAA00I,YAAR,WACQx1I,KAAKi3I,YAA4B,OAAdj3I,KAAK4gB,OACxB5gB,KAAK4gB,KAAO5gB,KAAKi3I,WACjBj3I,KAAK4gB,KAAKd,SAAU,IAxwBrBsjG,QAAAhE,eAAyB,iBACzBgE,QAAAC,YAAsB,gBAJjCD,QAAAxnG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB/GoohCxBw8F,U+GnohCqB5nG,EAAAG,YAAhBtb,GAAA+iH,QAAOA,EAkxBP/iH,EAAA4zI,mBAOT5uB,QAAS,Y/Gq3/BP,SAAS/kH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GgHzrhCjEna,EAAAzB,EAAgC,GAEhC6kH,EAAA7kH,EAAuB,KAEvBic,EAAAjc,EAA+B,IAC/Bkc,EAAAlc,EAAuB,IACvBqb,EAAArb,EAA4B,IAC5BiT,EAAAjT,EAA2E,GAC3Es5F,EAAAt5F,EAA4C,IAQ5C40I,EAAA,SAAA5xI,GAA0B5B,EAAAwzI,KAAA5xI,EAA1B,SAAA4xI,QAA0B5xI,EAAA9B,MAAArB,KAAAoD,WAsZ1B,MAnUW2xI,MAAAj0I,UAAAykH,UAAP,SAAiBznG,GACb9d,KAAKk3I,QAAUp5H,EAAKU,aAAai7E,EAAAuD,4BAA4BG,UACvDjnF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BG,WACvD,IACNn9F,KAAKm3I,aAAer5H,EAAKU,aAAai7E,EAAAuD,4BAA4BI,gBAC5DlnF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BI,iBACvD,GACNp9F,KAAKo3I,SAAWt5H,EAAKU,aAAai7E,EAAAuD,4BAA4BK,WACxDnnF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BK,YACvD,IACNr9F,KAAKq3I,cAAgBv5H,EAAKU,aAAai7E,EAAAuD,4BAA4BM,iBAC7DpnF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BM,kBACvD,EACNt9F,KAAK2wH,MAAQ7yG,EAAKU,aAAai7E,EAAAuD,4BAA4BO,OACrDrnF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BO,QACvD,EACNv9F,KAAKs3I,WAAax5H,EAAKU,aAAai7E,EAAAuD,4BAA4BC,aAC1D/mF,SAAS4H,EAAKe,aAAa46E,EAAAuD,4BAA4BC,cACvD,GAOH83C,KAAAj0I,UAAAgD,WAAP,SACIyzI,EACAC,EACA7zG,EACAukE,EACAuvC,EACAC,EACAC,EACAhyB,EACAiyB,EACAC,EACAjyB,EACAC,EACAiyB,EACAC,GAEA/3I,KAAKu3I,aAAeA,EACpBv3I,KAAKw3I,SAAWA,EAChBx3I,KAAK2jC,MAAQA,EACb3jC,KAAKkoG,QAAUA,EACfloG,KAAKy3I,MAAQA,EACbz3I,KAAK03I,UAAYA,EACjB13I,KAAK23I,UAAYA,EACjB33I,KAAK2lH,YAAcA,EACnB3lH,KAAK43I,eAAiBA,EACtB53I,KAAK63I,kBAAoBA,EACzB73I,KAAK4lH,YAAcA,EACnB5lH,KAAK6lH,aAAeA,EACpB7lH,KAAK83I,WAAaA,EAClB93I,KAAK+3I,UAAYA,EAEjB/3I,KAAK+jG,UAAY3wF,EAAAa,iBAAiB,QAClCjU,KAAK+jG,UAAU7vF,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKg4I,oBAAoB3jI,KAAKrU,OAE3EA,KAAKmmG,mBAOF4uC,KAAAj0I,UAAA6vD,QAAP,SAAerkC,GACXtsB,KAAKssB,KAAOA,GAOTyoH,KAAAj0I,UAAA8iH,YAAP,WAUI,IATA5jH,KAAKi4I,kBAAmB,EACxBj4I,KAAK2lG,YAAa,EAClB3lG,KAAKk4I,gBAAkB,EACvBl4I,KAAKm4I,WAAY,EACjBn4I,KAAKo4I,kBAELp4I,KAAKkf,EAAIlf,KAAK03I,UACd13I,KAAKof,EAAIpf,KAAK23I,UAEP33I,KAAKmmG,eAAej6F,OAAS,GAChClM,KAAKqqH,aAAarqH,KAAKmmG,eAAe/kD,MAG1C,KAAK,GAAIrhD,GAAI,EAAGA,EAAIC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAK43I,eAAgB73I,IAAK,CACtF,GAAIwnG,GAAQ,OACR8wC,EAAU,MAEVt4I,GAAIC,KAAK63I,mBACTtwC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvBmsI,EAAat4I,IAAMC,KAAK63I,kBAAoB,EAAI7yB,EAAAwC,OAAO2kB,aAAennB,EAAAwC,OAAO4kB,UACtErsI,EAAIC,KAAK63I,kBAAoB73I,KAAK2lH,aACzCpe,EAAWvnG,KAAKssB,KAAK47E,QAAQloG,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,GAC7Es4I,EAAarzB,EAAAwC,OAAO2kB,eAEpB5kC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvBmsI,EAAat4I,IAAMC,KAAK63I,kBAAoB73I,KAAK2lH,YAAcX,EAAAwC,OAAO2kB,aAAennB,EAAAwC,OAAO4kB,UAGhGpsI,KAAKmmG,eAAenjE,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,IAEzDr4I,KAAKiS,SAASjS,KAAKmmG,eAAe,IAGtC,IAAK,GAAIpmG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACnC2nG,GAAOxoF,GAAKwoF,EAAOmiB,QACnBniB,EAAOtoF,EAAIpf,KAAK6lH,cAAgB9lH,EAAIC,KAAK43I,gBAAkBlwC,EAAOoiB,UAQnEirB,KAAAj0I,UAAAwkG,UAAP,WACItlG,KAAKi4I,kBAAmB,EACxBj4I,KAAK2lG,YAAa,EAClB3lG,KAAKk4I,gBAAkB,EACvBl4I,KAAKm4I,WAAY,EACjBn4I,KAAKo4I,kBACLp4I,KAAKs4I,UAAYt4I,KAAK2wH,MACtB3wH,KAAKmnG,YAAcnnG,KAAKssB,KAAKqX,MAAQ3jC,KAAK43I,eAAiB53I,KAAKy3I,MAAMvrI,QAAUlM,KAAKy3I,MAAMvrI,OAE3FlM,KAAK0oG,eAOFqsC,KAAAj0I,UAAAkjG,SAAP,SAAgBrwE,EAAwB4kH,GAAxB,SAAA5kH,OAAA,GAAwB,SAAA4kH,MAAA,GACpCv4I,KAAK+jG,UAAUruF,OAEXie,GACA3zB,KAAKi4I,kBAAmB,EACxBj4I,KAAKs4I,UAAYt4I,KAAKs3I,YAEtBt3I,KAAK+jG,UAAUpuF,MAAsB,IAAhB4iI,EAAoBA,EAAcv4I,KAAK+3I,YAI1DhD,KAAAj0I,UAAAk3I,oBAAV,WACIh4I,KAAKi4I,kBAAmB,EACxBj4I,KAAK2lG,YAAa,GAGfovC,KAAAj0I,UAAA61I,gBAAP,WACI,GAAM6B,GAAkBx4I,KAAK43I,eAAiB53I,KAAK2lH,YAAc3lH,KAAK63I,kBAAoB,CAC1F,OAAO73I,MAAK+3I,UAAYS,EAAkBx4I,KAAK2wH,MAA6B,EAArB3wH,KAAKq3I,eAOzDtC,KAAAj0I,UAAAk2I,UAAP,SAAiB9uC,EAAwBqwC,GAAA,SAAAA,MAAA,GACrCv4I,KAAKi4I,kBAAmB,EACxBj4I,KAAK2lG,YAAa,EAClB3lG,KAAKk4I,gBAAkB,EACvBl4I,KAAKm4I,WAAY,EACjBn4I,KAAKo4I,eAAiBlwC,EAEtBloG,KAAK+jG,UAAUruF,OACf1V,KAAK+jG,UAAUpuF,MAAsB,IAAhB4iI,EAAoBA,EAAcv4I,KAAK+3I,YAOtDhD,KAAAj0I,UAAA4nG,YAAV,WACIrsF,EAAAe,OAAOC,aAAard,KAAM,YAC1Bqc,EAAAe,OAAOwG,cAAc5jB,MACjBsjB,QAAStjB,KAAK03I,UAAW13I,KAAK03I,UAAW13I,KAAK03I,WAC9Cn0H,QAASvjB,KAAK23I,UAAW33I,KAAK23I,UAAY33I,KAAKk3I,QAASl3I,KAAK23I,WAC7Dl1H,cAAmC,EAApBziB,KAAKm3I,aACpBx0H,WAAY3iB,KAAK83I,WACjBnqH,iBAAkB3tB,KAAKgoG,SACvBj6E,cAAe/tB,QAQb+0I,KAAAj0I,UAAAknG,SAAV,WACI3rF,EAAAe,OAAOC,aAAard,KAAM,YAC1Bqc,EAAAe,OAAOwG,cAAc5jB,MACjBsjB,QAAStjB,KAAK03I,UAAW13I,KAAK03I,WAC9Bn0H,QAASvjB,KAAK23I,UAAW33I,KAAK23I,UAAY33I,KAAK6lH,cAC/CpjG,cAAeziB,KAAKs4I,UACpB3qH,iBAAkB3tB,KAAKy4I,WACvB1qH,cAAe/tB,QAIb+0I,KAAAj0I,UAAA23I,WAAV,WACIz4I,KAAKqqH,aAAarqH,KAAKmmG,eAAe/kD,OAElCphD,KAAKi4I,mBAAqBj4I,KAAK2lG,aACL,OAAtB3lG,KAAKu3I,aACLv3I,KAAK2lG,YAAa,EACX3lG,KAAKu3I,aAAa5xC,aACzB3lG,KAAK2lG,YAAa,IAI1B3lG,KAAKmnG,YAAcnnG,KAAKmnG,WAAa,EAAInnG,KAAKy3I,MAAMvrI,QAAUlM,KAAKy3I,MAAMvrI,MAEzE,IAAIq7F,GAAWvnG,KAAKy3I,MAAMz3I,KAAKmnG,YAC3BkxC,EAAarzB,EAAAwC,OAAO4kB,QAEpBpsI,MAAK2lG,aACD3lG,KAAKk4I,gBAAkBl4I,KAAK63I,mBAC5BtwC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvBmsI,EACIr4I,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB,EAAI7yB,EAAAwC,OAAO2kB,aAAennB,EAAAwC,OAAO4kB,UAChFpsI,KAAKk4I,gBAAkBl4I,KAAK63I,kBAAoB73I,KAAK2lH,aAC5Dpe,EAAWvnG,KAAKssB,KAAK47E,QAAQloG,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAKk4I,gBAAkB,GAChGG,EAAarzB,EAAAwC,OAAO2kB,eAEpB5kC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvBmsI,EACIr4I,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB73I,KAAK2lH,YACjDX,EAAAwC,OAAO2kB,aACPnnB,EAAAwC,OAAO4kB,UAGrBpsI,KAAKk4I,mBAGTl4I,KAAKmmG,eAAenjE,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,IAEzDr4I,KAAKiS,SAASjS,KAAKmmG,eAAe,GAElC,KAAK,GAAIpmG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACnC2nG,GAAOxoF,GAAKwoF,EAAOmiB,QACnBniB,EAAOtoF,EAAIpf,KAAK6lH,cAAgB9lH,EAAIC,KAAK43I,gBAAkBlwC,EAAOoiB,QAIlE9pH,KAAK2lG,YACL3lG,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAK43I,eAE1E53I,KAAKsoG,eAELtoG,KAAKgoG,YAQH+sC,KAAAj0I,UAAAwnG,aAAV,WACIjsF,EAAAe,OAAOC,aAAard,KAAM,YAC1Bqc,EAAAe,OAAOwG,cAAc5jB,MACjBsjB,QAAStjB,KAAK03I,UAAW13I,KAAK03I,UAAW13I,KAAK03I,WAC9Cn0H,QAASvjB,KAAK23I,UAAW33I,KAAK23I,UAAY33I,KAAKo3I,SAAUp3I,KAAK23I,WAC9Dl1H,cAAoC,EAArBziB,KAAKq3I,cACpB1pH,iBAAkB3tB,KAAKkpG,aACvBn7E,cAAe/tB,QAQb+0I,KAAAj0I,UAAAooG,aAAV,WAGI,IAFA7sF,EAAAe,OAAOC,aAAard,KAAM,YAEnBA,KAAKmmG,eAAej6F,OAAS,GAChClM,KAAKqqH,aAAarqH,KAAKmmG,eAAe/kD,MAG1CphD,MAAKyX,KAAKs9H,KAAK1xB,YAAarjH,KAAK2jC,QAO3BoxG,KAAAj0I,UAAA8oH,UAAV,SAAoBriB,EAAkB8wC,GAClC,MAAOr4I,MAAKkoG,QAAQ0hB,UAAUriB,EAAU8wC,IAGlCtD,KAAAj0I,UAAAupH,aAAV,SAAuB3iB,GACnB1nG,KAAKkoG,QAAQmiB,aAAa3iB,IA/YPqtC,KAAA1xB,YAAsB,cANjD0xB,KAAAn5H,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBhH65hCxBmuH,OgH55hCkBv5H,EAAAG,YAAbtb,GAAA00I,KAAIA,GhHo6hCX,SAASz0I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GiHh8hCjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/BizI,EAAAjzI,EAAqB,KACrB6kH,EAAA7kH,EAAuB,KACvBomE,EAAApmE,EAA2B,IAE3BiT,EAAAjT,EAA2E,GAC3EgiF,EAAAhiF,EAAyB,IAQzB00I,EAAA,SAAA1xI,GAA2B5B,EAAAszI,MAAA1xI,EAA3B,SAAA0xI,SAA2B1xI,EAAA9B,MAAArB,KAAAoD,WAGhBpD,KAAA80I,eAuUX,MA/TWD,OAAA/zI,UAAAgD,WAAP,SACIyzI,EACAC,EACA7zG,EACAukE,EACAuvC,EACAC,EACAC,EACAhyB,EACAiyB,EACAC,EACAjyB,EACAC,EACAiyB,EACAC,GAEA50I,EAAArC,UAAMgD,WAAUrD,KAAAT,KACZu3I,EACAC,EACA7zG,EACAukE,EACAuvC,EACAC,EACAC,EACAhyB,EACAiyB,EACAC,EACAjyB,EACAC,EACAiyB,EACAC,GAGJ/3I,KAAK04I,qBAAuBtlI,EAAAa,iBAAiB,uBAC7CjU,KAAK04I,qBAAqBxkI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK24I,oBAAoBtkI,KAAKrU,QAGnF60I,MAAA/zI,UAAA8iH,YAAP,SAAmB2xB,GAUf,GAVe,SAAAA,OAAA,GACfv1I,KAAKi4I,kBAAmB,EACxBj4I,KAAK2lG,YAAa,EAClB3lG,KAAKk4I,gBAAkB,EACvBl4I,KAAKm4I,WAAY,EACjBn4I,KAAKo4I,kBAELp4I,KAAKkf,EAAIlf,KAAK03I,UACd13I,KAAKof,EAAIpf,KAAK23I,WAETpC,EACD,KAAOv1I,KAAKmmG,eAAej6F,OAAS,GAChClM,KAAKqqH,aAAarqH,KAAKmmG,eAAe/kD,MAO9C,KAAK,GAHDw3F,MACAC,KAEK94I,EAAI,EAAGA,EAAIC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAK43I,eAAgB73I,IAAK,CACtF,GAAIwnG,GAAQ,OACR8wC,EAAU,OACVS,EAAsB,EACtBC,GAAyB,CAEzBh5I,GAAIC,KAAK63I,mBACTtwC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvB4sI,EACI94I,KAAK80I,aACA90I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvBmsI,EAAarzB,EAAAwC,OAAO2kB,cACbpsI,EAAIC,KAAK63I,kBAAoB73I,KAAK2lH,aACzCpe,EAAWvnG,KAAKssB,KAAK47E,QAAQloG,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,GACzEC,KAAKssB,KAAKwrC,aACVghF,EAAc94I,KAAKssB,KAAKwrC,WAAW93D,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,IAEvFs4I,EAAarzB,EAAAwC,OAAO2kB,aACpB4M,GAAgB,IAEhBxxC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvB4sI,EACI94I,KAAK80I,aACA90I,KAAKssB,KAAKqX,MAAQ3jC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc5lH,EAAI,EAAIC,KAAKy3I,MAAMvrI,QAC9ElM,KAAKy3I,MAAMvrI,QAEvBmsI,EAAat4I,IAAMC,KAAK63I,kBAAoB73I,KAAK2lH,YAAcX,EAAAwC,OAAO2kB,aAAennB,EAAAwC,OAAO4kB,UAG3FmJ,EAKGx1I,EAAIC,KAAK63I,kBACTe,EAAc51G,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,EAAYS,EAAaC,IACrEh5I,EAAIC,KAAK63I,kBAAoB73I,KAAK2lH,YAAc,GACvDkzB,EAAW71G,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,EAAYS,EAAaC,IAN7E/4I,KAAKmmG,eAAenjE,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,EAAYS,EAAaC,IAW1F,GAAIxD,EAAc,CACd,KAAOqD,EAAc1sI,OAAS,GAAG,CAC7B,GAAMw7F,GAASkxC,EAAcrtH,OACX,MAAdm8E,EAAOnnG,IACPmnG,EAAOuc,SAAS,mBAEpBjkH,KAAKmmG,eAAenzF,KAAK00F,GAG7B,KAAOmxC,EAAW3sI,OAAS,GACvBlM,KAAKmmG,eAAenjE,QAAQ61G,EAAWttH,SAI/C,IAAK,GAAIxrB,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjDC,KAAKiS,SAASjS,KAAKmmG,eAAepmG,GAElC,IAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACnC2nG,GAAOxoF,GAAKwoF,EAAOmiB,QACnBniB,EAAOtoF,EAAIpf,KAAK6lH,cAAgB9lH,EAAIC,KAAK43I,gBAAkBlwC,EAAOoiB,QAGtE9pH,KAAKg5I,aAGCnE,MAAA/zI,UAAA23I,WAAV,WACIz4I,KAAKqqH,aAAarqH,KAAKmmG,eAAe/kD,OAElCphD,KAAKi4I,mBAAqBj4I,KAAK2lG,aACL,OAAtB3lG,KAAKu3I,aACLv3I,KAAK2lG,YAAa,EACX3lG,KAAKu3I,aAAa5xC,aACzB3lG,KAAK2lG,YAAa,IAI1B3lG,KAAKmnG,YAAcnnG,KAAKmnG,WAAa,EAAInnG,KAAKy3I,MAAMvrI,QAAUlM,KAAKy3I,MAAMvrI,MAEzE,IAAIq7F,GAAWvnG,KAAKy3I,MAAMz3I,KAAKmnG,YAC3BkxC,EAAarzB,EAAAwC,OAAO4kB,SACpB0M,EAAsB94I,KAAK80I,YAAY90I,KAAKmnG,YAC5C4xC,GAAyB,CAEzB/4I,MAAK2lG,aACD3lG,KAAKk4I,gBAAkBl4I,KAAK63I,mBAC5BtwC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvB4sI,EACI94I,KAAK80I,aACA90I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvBmsI,EACIr4I,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB,EAAI7yB,EAAAwC,OAAO2kB,aAAennB,EAAAwC,OAAO4kB,UAChFpsI,KAAKk4I,gBAAkBl4I,KAAK63I,kBAAoB73I,KAAK2lH,aAC5Dpe,EAAWvnG,KAAKssB,KAAK47E,QAAQloG,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAKk4I,gBAAkB,GAC5Fl4I,KAAKssB,KAAKwrC,aACVghF,EACI94I,KAAKssB,KAAKwrC,WAAW93D,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAKk4I,gBAAkB,IAEhGG,EAAarzB,EAAAwC,OAAO2kB,aACpB4M,GAAgB,IAEhBxxC,EACIvnG,KAAKy3I,OACAz3I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvB4sI,EACI94I,KAAK80I,aACA90I,KAAKssB,KAAKqX,MACP3jC,KAAK63I,kBACL73I,KAAK2lH,YACL3lH,KAAKk4I,gBACL,EACAl4I,KAAKy3I,MAAMvrI,QACXlM,KAAKy3I,MAAMvrI,QAEvBmsI,EACIr4I,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB73I,KAAK2lH,YACjDX,EAAAwC,OAAO2kB,aACPnnB,EAAAwC,OAAO4kB,UAGrBpsI,KAAKk4I,mBAGHl4I,KAAK2lG,YAAc3lG,KAAKk4I,gBAAkBl4I,KAAK63I,kBAAoB73I,KAAK2lH,aACzD,KAAbpe,GACAvnG,KAAK04I,qBAAqB/iI,MAAM,GAIxC3V,KAAKmmG,eAAenjE,QAAQhjC,KAAK4pH,UAAUriB,EAAW,EAAG8wC,EAAYS,EAAaC,IAElF/4I,KAAKiS,SAASjS,KAAKmmG,eAAe,GAElC,KAAK,GAAIpmG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACnC2nG,GAAOxoF,GAAKwoF,EAAOmiB,QACnBniB,EAAOtoF,EAAIpf,KAAK6lH,cAAgB9lH,EAAIC,KAAK43I,gBAAkBlwC,EAAOoiB,QAGtE,GACI9pH,KAAK2lG,YACL3lG,KAAKk4I,kBAAoBl4I,KAAK63I,kBAAoB73I,KAAK2lH,YAAc3lH,KAAK43I,eAC5E,CACE53I,KAAKsoG,cACL,KAAK,GAAIvoG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EAClB,KAAb2nG,EAAOnnG,IACPmnG,EAAOuc,SAAS,kBAIxBjkH,MAAKgoG,UAGThoG,MAAKg5I,aAGDnE,MAAA/zI,UAAA63I,oBAAR,WACI34I,KAAK04I,qBAAqBhjI,OAC1BysE,EAAAp4D,SAASsS,KAAK,wBAA0Br8B,KAAK2jC,QAGzCkxG,MAAA/zI,UAAAk4I,UAAR,WAEI,IAAK,GAAIj5I,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACpB,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAEZ,OAAXA,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACpB,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EACpB,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAAK,CACjD,GAAM2nG,GAAS1nG,KAAKmmG,eAAepmG,EAEpB,QAAX2nG,GAAiC,KAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,KASzBmtC,MAAA/zI,UAAA8oH,UAAV,SACIriB,EACA8wC,EACA96G,EACAw7G,GADA,SAAAx7G,MAAA,GACA,SAAAw7G,OAAA,GAEIV,IAAerzB,EAAAwC,OAAO2kB,cAA6B,KAAb5kC,IACtC8wC,EAAarzB,EAAAwC,OAAOwB,WAGxB,IAAMthB,GAASvkG,EAAArC,UAAM8oH,UAASnpH,KAAAT,KAACunG,EAAU8wC,EAgBzC,OAfI96G,GAAS,IACLw7G,EACArxC,EAAOikC,UAAU/sH,WAAWhd,EAAA4L,YAAYgvE,SAASj/C,EAAQgpC,EAAAsD,WAAWK,OAEpEw9B,EAAOikC,UAAUpuG,IAIrBs3G,MAAMY,OACY,KAAd/tC,EAAOnnG,KACPmnG,EAAOuc,SAASe,EAAAwC,OAAOC,WACvB/f,EAAOvpF,MAAQ,IAIhBupF,GAvUGmtC,MAAAY,OAAiB,EAFnCZ,MAAAj5H,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBjHgriCxBiuH,QiH/qiCmBzB,EAAA2B,KAAd10I,GAAAw0I,MAAKA,GjHuriCZ,SAASv0I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GkHltiCjEna,EAAAzB,EAA6C,GAC7C6B,EAAA7B,EAA8B,GAC9Bic,EAAAjc,EAA+B,IAC/B6kH,EAAA7kH,EAAuB,KACvBkhH,EAAAlhH,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBomE,EAAApmE,EAA2B,IAC3B2kH,EAAA3kH,EAAwB,IACxBsO,EAAAtO,EAA8B,IAC9B4kH,EAAA5kH,EAAoC,KACpCiT,EAAAjT,EAA2E,GAQ3E8gH,EAAA9gH,EAAyB,IACzBohH,EAAAphH,EAA8B,KAG9Bu1I,EAAA,SAAAvyI,GAAkC5B,EAAAm0I,aAAAvyI,EAAlC,SAAAuyI,gBAAkCvyI,EAAA9B,MAAArB,KAAAoD,WAQtBpD,KAAAi5I,kBAA4B,EAC5Bj5I,KAAAk5I,qBAA+B,EAc/Bl5I,KAAAm5I,cAAwB,EACxBn5I,KAAAo5I,wBAAkC,EA2jC9C,MAzjCW1D,cAAA50I,UAAAgjH,uBAAP,SACI/6E,EACAjyB,EACAgyB,EACAuwG,EACA9qB,GAEAvuH,KAAKs5I,yBAA2BvwG,EAChC/oC,KAAKu5I,sBAAwBziI,EAC7B9W,KAAKw5I,qBAAuB1wG,EAC5B9oC,KAAKy5I,kBAAoBlrB,EACzBvuH,KAAK05I,sBAAwBL,GAGjC3D,aAAA50I,UAAAgD,WAAA,SACIokG,EACA8d,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAqzB,EACApzB,GAEApjH,EAAArC,UAAMgD,WAAUrD,KAAAT,KACZkoG,EACA8d,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAGAozB,IACA35I,KAAK45I,uBAAyBD,GAGlC35I,KAAK65I,SAAW,KAAM,KAAM,KAAM,KAAM,OAGlCnE,aAAA50I,UAAA0lH,YAAV,WACIrjH,EAAArC,UAAM0lH,YAAW/lH,KAAAT,MACjBA,KAAK85I,cAAgB1mI,EAAAa,iBAAiB,iBACtCjU,KAAK85I,cAAc5lI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK+5I,eAAe1lI,KAAKrU,OAC1EA,KAAKg6I,eAAiB5mI,EAAAa,iBAAiB,kBACvCjU,KAAKg6I,eAAe9lI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKi6I,gBAAgB5lI,KAAKrU,QAGzE01I,aAAA50I,UAAAwiH,cAAP,SAAqBx4C,EAA4C47C,GAC7DvjH,EAAArC,UAAMwiH,cAAa7iH,KAAAT,KAAC8qE,EAAW47C,EAG/B,KAAK,GADDwzB,IAAoB,EACfn6I,EAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAC5B,MAAd2nG,EAAOnnG,IAA+C,MAAlCP,KAAK0pH,YAAYhD,GAAW3mH,KAChDC,KAAK0pH,YAAYhD,GAAW3mH,GAAGoe,MAAQ,IAEzB,IAAdupF,EAAOnnG,IAA8C,MAAlCP,KAAK0pH,YAAYhD,GAAW3mH,KAC/Cm6I,GAAoB,EACpBxyC,EAAOuc,SAAS,cACZx1G,EAAAyB,cAAc+nE,kBACdj4E,KAAK0pH,YAAYhD,GAAW3mH,GAAGkkH,SAAS,cAExCjkH,KAAK0pH,YAAYhD,GAAW3mH,GAAGkkH,SAAS,YAWpD,GANIi2B,GACA/3D,EAAAp4D,SAASsS,KAAK,mBAGlBr8B,KAAKm6I,eAAezzB,GAEhB1B,EAAAwC,OAAOikB,KACP,IAAK,GAAI1rI,GAAY,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IACpD,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IACtB,MAA7B3iC,KAAKmmG,eAAepmG,GAAG4iC,IAAc3iC,KAAKmmG,eAAepmG,GAAG4iC,GAAGpiC,GAAK,IACpEP,KAAKmmG,eAAepmG,GAAG4iC,GAAGshF,SAASe,EAAAwC,OAAOC,UAO1D,KAAK,GADD2yB,GAAuB,EAClBr6I,EAAY,EAAGA,GAAK2mH,EAAW3mH,IACpC,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IACtB,MAA7B3iC,KAAKmmG,eAAepmG,GAAG4iC,IAA+C,KAAjC3iC,KAAKmmG,eAAepmG,GAAG4iC,GAAGpiC,IAC/D65I,GAKZ,QAAQ1zB,GACJ,IAAK,GACD,IAAK,GAAI3mH,GAAY,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IACtB,MAArCC,KAAKmmG,eAAeugB,GAAW3mH,IAAuD,KAAzCC,KAAKmmG,eAAeugB,GAAW3mH,GAAGQ,IAC/EP,KAAKmmG,eAAeugB,GAAW3mH,GAAGkkH,SAASe,EAAAwC,OAAO6kB,WAIrC,KAAjB+N,GACAj4D,EAAAp4D,SAASsS,KAAK,oBAGlB,MACJ,KAAK,GACD,GAAI+9G,EAAe,EAAG,CAClB,IAAK,GAAIr6I,GAAY,EAAGA,EAAIC,KAAKmmG,eAAe,GAAGj6F,OAAQnM,IACtB,MAA7BC,KAAKmmG,eAAe,GAAGpmG,IAA+C,KAAjCC,KAAKmmG,eAAe,GAAGpmG,GAAGQ,IAC/DP,KAAKmmG,eAAe,GAAGpmG,GAAGkkH,SAASe,EAAAwC,OAAOgkB,UAGlD,KAAK,GAAIzrI,GAAY,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IACtB,MAArCC,KAAKmmG,eAAeugB,GAAW3mH,IAAuD,KAAzCC,KAAKmmG,eAAeugB,GAAW3mH,GAAGQ,IAC/EP,KAAKmmG,eAAeugB,GAAW3mH,GAAGkkH,SAASe,EAAAwC,OAAO8kB,oBAI1DnqD,GAAAp4D,SAASsS,KAAK,qBAElB,KACJ,KAAK,GACD,GAAI+9G,EAAe,EAAG,CAClB,IAAK,GAAIr6I,GAAY,EAAGA,EAAIC,KAAKmmG,eAAe,GAAGj6F,OAAQnM,IACtB,MAA7BC,KAAKmmG,eAAe,GAAGpmG,IAA+C,KAAjCC,KAAKmmG,eAAe,GAAGpmG,GAAGQ,IAC/DP,KAAK45I,uBAAuB3nI,SAASjS,KAAKmmG,eAAe,GAAGpmG,GAIpE,KAAK,GAAIA,GAAY,EAAGA,EAAIC,KAAKmmG,eAAe,GAAGj6F,OAAQnM,IACtB,MAA7BC,KAAKmmG,eAAe,GAAGpmG,IAA+C,KAAjCC,KAAKmmG,eAAe,GAAGpmG,GAAGQ,IAC/DP,KAAK45I,uBAAuB3nI,SAASjS,KAAKmmG,eAAe,GAAGpmG,GAIpEC,MAAKq6I,cAAc,WAEvB,KACJ,KAAK,GACD,GAAID,EAAe,EAAG,CAClB,IAAK,GAAIr6I,GAAY,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IACtB,MAArCC,KAAKmmG,eAAeugB,GAAW3mH,IAAuD,KAAzCC,KAAKmmG,eAAeugB,GAAW3mH,GAAGQ,IAC/EP,KAAKmmG,eAAeugB,GAAW3mH,GAAGkkH,SAASe,EAAAwC,OAAO8kB,oBAG1DnqD,GAAAp4D,SAASsS,KAAK,wBAMtBq5G,aAAA50I,UAAAu5I,cAAR,SAAsBhC,GAClB,IAAK,GAAIt4I,GAAI,EAAGA,EAAIC,KAAKsmH,aAAanpG,SAASjR,OAAQnM,IACnCC,KAAKsmH,aAAanpG,SAASpd,GAAIkkH,SAASo0B,IAIzD3C,aAAA50I,UAAA8iH,YAAP,SAAmB94C,GAEf,GAAsC,MAAlC9qE,KAAKoqH,0BACL,IAAK,GAAIrqH,GAAI,EAAGA,EAAIC,KAAKoqH,0BAA0Bl+G,OAAQnM,IACvDC,KAAKkoG,QAAQmiB,aAAarqH,KAAKoqH,0BAA0BrqH,GAGjEC,MAAKoqH,6BAELjnH,EAAArC,UAAM8iH,YAAWnjH,KAAAT,KAAC8qE,EAElB,KAAK,GAAI/qE,GAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChCC,KAAKm6I,eAAep6I,IAIlB21I,aAAA50I,UAAAmnH,gBAAV,WACI,MAAIjoH,MAAKs6I,oBACLt6I,MAAKu6I,kBAITv6I,KAAKyX,KAAK4pG,EAAAkC,YAAYG,wBAElB1jH,KAAK+mH,aAAe/mH,KAAK+mH,YAAY76G,OAAS,IAC9ClM,KAAK+jG,YACL/jG,KAAKkoH,aAAe,EACpBloH,KAAKmoH,WAAU,OAIfutB,aAAA50I,UAAAw5I,cAAR,WACI,GAAwB,MAApBt6I,KAAK+mH,YACL,IAAK,GAAIhnH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IAAK,CAC9C,GAAIuyE,GAAMtyE,KAAK+mH,YAAYhnH,EAC3B,IACIuyE,EAAIv+C,OAAS/xB,EAAAkD,cAAcC,KAAKwuH,QAAQojB,WACxCzkE,EAAIq4C,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,QAE9C,OAAO,EAKnB,OAAO,GAGH4qB,aAAA50I,UAAAy5I,eAAR,WACI,GAAwB,MAApBv6I,KAAK+mH,YAAqB,CAC1B5kC,EAAAp4D,SAASsS,KAAK,mBACd,KAAK,GAAIt8B,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IAAK,CAC9C,GAAIuyE,GAAMtyE,KAAK+mH,YAAYhnH,EAEvBuyE,GAAIv+C,OAAS/xB,EAAAkD,cAAcC,KAAKwuH,QAAQojB,WACxCzkE,EAAIq4C,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,UAE9C9qH,KAAK+qH,4BAA4BhrH,EAAGilH,EAAAwC,OAAOK,SAAS,GAEpD7nH,KAAK+jG,YACL/jG,KAAKonH,WAAWsuB,aAAa8E,qBAAsB9E,aAAa+E,4BAMzE/E,aAAA50I,UAAAojH,aAAP,SAAoBC,EAAsC7xC,GACtDtyE,KAAK+mH,YAAc5C,EACnBnkH,KAAK+zF,WAAazhB,EAElBtyE,KAAKgnH,iBACL,KAAK,GAAIjnH,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5CC,KAAKm6I,eAAep6I,EAGZ,OAARokH,GAAgBA,EAAKj4G,OAAS,GAC9BlM,KAAKqoH,oBACLroH,KAAKsoH,uBAELtoH,KAAKonH,WAAW/F,EAAAkC,YAAY8D,KAAMrnH,KAAKsnH,wBAIxCouB,aAAA50I,UAAA0hE,SAAP,SAAgB2hD,EAAsC7xC,GAWlD,GAVAtyE,KAAK+mH,YAAc5C,EACnBnkH,KAAK+zF,WAAazhB,EAElBtyE,KAAKi5I,kBAAoB,EACzBj5I,KAAKk5I,qBAAuB,EACF,MAAtBl5I,KAAK85I,eAAuB95I,KAAK85I,cAAcpkI,OACxB,MAAvB1V,KAAKg6I,gBAAwBh6I,KAAKg6I,eAAetkI,OAErD1V,KAAKgnH,kBAEO,MAAR7C,GAAgBA,EAAKj4G,OAAS,EAAG,CACjClM,KAAKinH,uBAAyB,CAE9B,KAAK,GAAIlnH,GAAI,EAAGA,EAAIC,KAAK8lH,YAAY55G,OAAQnM,IACrCC,KAAK+zF,WAAaxtB,EAAAsD,WAAWK,IAAMlqE,KAAK8lH,YAAY/lH,KACpDC,KAAKinH,uBAAyBlnH,EAMtC,OAFAC,MAAKmnH,gBAEEnnH,KAAKinH,wBAA0B,EAItC,MAFAjnH,MAAKunH,mBAAmBvC,EAAAwC,OAAOwB,YAAY,GAAO,GAClDhpH,KAAKonH,WAAW/F,EAAAkC,YAAY8D,KAAMrnH,KAAKsnH,wBAChC,GAILouB,aAAA50I,UAAAqmH,cAAV,WACInnH,KAAKopH,sBAAwBppH,KAAKisH,oBAClCjsH,KAAKqpH,0BAA2B,EAEhCrpH,KAAKu5I,sBAAsBtnI,SAASjS,KAAKgmH,SAEzC,KAAK,GAAIjmH,GAAI,EAAGA,EAAIC,KAAK65I,QAAQ3tI,OAAQnM,IACd,MAAnBC,KAAK65I,QAAQ95I,IACbC,KAAK65I,QAAQ95I,GAAGkkH,SAASe,EAAAwC,OAAOC,UAGxCznH,MAAKq6I,cAAcr1B,EAAAwC,OAAOC,WAE1BznH,KAAKunH,mBAAmBvC,EAAAwC,OAAOC,WAAW,GAC1CznH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQF,UAEjC,KAAK,GAAI1nH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACzCC,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOwB,YAAY,EAAOhE,EAAAwC,OAAOC,WAC5DznH,KAAK8nH,mBAAmB/nH,EAAG+kH,EAAA6C,QAAQqB,WAGvChpH,MAAK06I,uBAGChF,aAAA50I,UAAA65I,qBAAV,WAEI,IAAK,GADDpzC,GAAW,EACNxnG,EAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACrCC,KAAK+mH,YAAYhnH,GAAG66I,SAAWrzC,IAC/BA,EAAWvnG,KAAK+mH,YAAYhnH,GAAG66I,UAGnC56I,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOK,SAAS,EAAO7C,EAAAwC,OAAOC,WACzDznH,KAAK8nH,mBAAmB/nH,EAAG,MAG3BwnG,IAAY,GACZplB,EAAAp4D,SAASsS,KAAK,kBAAoBkrE,GAGtCvnG,KAAKgoH,kBAGC0tB,aAAA50I,UAAAknH,eAAV,WACI7kH,EAAArC,UAAMknH,eAAcvnH,KAAAT,MAEhBA,KAAKinH,wBAA0B,IAC/B9kC,EAAAp4D,SAASrU,KAAK,gBACdysE,EAAAp4D,SAASrU,KAAK,cACO,MAAjBurG,EAAAC,SAAS4B,MAAc7B,EAAAC,SAAS4B,KAAKmB,SAAS,aACxB,MAAtB1C,EAAAgD,cAAczB,MAAcvB,EAAAgD,cAAczB,KAAKmB,SAAS,eAI1DyxB,aAAA50I,UAAAunH,kBAAV,WACIroH,KAAKq6I,cAAcr1B,EAAAwC,OAAOC,WAC1BznH,KAAKunH,mBAAmBvC,EAAAwC,OAAOC,WAAW,GAC1CznH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQF,UAEjC,KAAK,GAAI1nH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACrCC,KAAK+mH,YAAYhnH,GAAG4qH,SAAW3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,QAC7D9qH,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOK,SAAS,GAE3C7nH,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOK,SAAS,GAG/C7nH,KAAK8nH,mBAAmB/nH,EAAG+kH,EAAA6C,QAAQI,eAIjC2tB,aAAA50I,UAAAwnH,oBAAV,WACI,GAAItoH,KAAK+mH,YAAY76G,OAAS,EAC1B,GAAIlM,KAAK+mH,YAAY76G,OAAS,EAAG,CAE7B,GACIlM,KAAK+mH,YAAY,GAAG4D,SAAW3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,SAClC,GAA3B9qH,KAAK+mH,YAAY76G,OASjB,MAPAlM,MAAK4nH,mBAAmB,EAAG5C,EAAAwC,OAAOK,SAAS,GAC3C1lC,EAAAp4D,SAASsS,KAAK,6BAET5tB,EAAAyB,cAAc8nE,oBAAuBvpE,EAAAyB,cAAc+nE,mBACpDkK,EAAAp4D,SAAS8jE,KAAK,qBAMtB7tF,MAAK+jG,YACL/jG,KAAKkoH,aAAe,EACpBloH,KAAKmoH,WAAU,OAEfnoH,MAAK4nH,mBAAmB,EAAG5C,EAAAwC,OAAOK,SAAS,GAC3C1lC,EAAAp4D,SAASsS,KAAK,wBAET5tB,EAAAyB,cAAc8nE,oBAAuBvpE,EAAAyB,cAAc+nE,mBACpDkK,EAAAp4D,SAAS8jE,KAAK,sBAMpB6nD,aAAA50I,UAAAqnH,UAAV,SAAoBI,GAChB,GADgB,SAAAA,OAAA,GACQ,MAApBvoH,KAAK+mH,YAAT,CAKA,GAAI/mH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcn0F,OAAS/xB,EAAAkD,cAAcC,KAAKwuH,QAAQojB,UAAW,CACnF,GAAgC,IAA5B/2I,KAAK+mH,YAAY76G,OACjB,MAMJ,OAHAlM,MAAKkoH,cAAgBloH,KAAKkoH,aAAe,GAAKloH,KAAK+mH,YAAY76G,WAC/DlM,MAAKmoH,UAAUI,GAanB,GAR2B,MAAvBvoH,KAAKqmH,iBACgD,MAAjDrmH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,UACpCvrH,KAAKqmH,eAAepC,SAAS,SAAWjkH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,WAE5EvrH,KAAKqmH,eAAepC,SAAS,WAIJ,MAA7BjkH,KAAKw5I,qBACL,GAAqD,MAAjDx5I,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,UACpC,GAAI98G,EAAAyB,cAAc+nE,mBAAqBj4E,KAAK+mH,YAAY/mH,KAAKkoH,cAAc2yB,iBAAkB,CACzF,GAAItsB,GAAqBvuH,KAAK+mH,YAAY/mH,KAAKkoH,cAAc2yB,iBAAiB3sI,UAC9ElO,MAAKw5I,qBAAqBv1B,SAAS,cAAgBsK,OAEnDvuH,MAAKw5I,qBAAqBv1B,SAAS,SAAWjkH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,eAGtFvrH,MAAKw5I,qBAAqBv1B,SAAS,SAI3C,IAA8B,MAA1BjkH,KAAKy5I,kBACL,GAAqD,MAAjDz5I,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,UACpC,GAAI98G,EAAAyB,cAAc+nE,mBAAqBj4E,KAAK+mH,YAAY/mH,KAAKkoH,cAAc2yB,iBAAkB,CACzF,GAAItsB,GAAqBvuH,KAAK+mH,YAAY/mH,KAAKkoH,cAAc2yB,iBAAiB3sI,UAC9ElO,MAAKy5I,kBAAkBx1B,SAAS,cAAgBsK,OAEhDvuH,MAAKy5I,kBAAkBx1B,SAAS,cAGpCjkH,MAAKy5I,kBAAkBx1B,SAAS,SAIN,OAA9BjkH,KAAK05I,wBACgD,MAAjD15I,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,UAChC98G,EAAAyB,cAAc+nE,mBAAqBj4E,KAAK+mH,YAAY/mH,KAAKkoH,cAAc2yB,iBACvE76I,KAAK05I,sBAAsBz1B,SAAS,YAAcjkH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,WAEtFvrH,KAAK05I,sBAAsBz1B,SAAS,SAAWjkH,KAAK+mH,YAAY/mH,KAAKkoH,cAAcqD,WAGvFvrH,KAAK05I,sBAAsBz1B,SAAS,UAI5C,KAAK,GAAIlkH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACzCC,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOwB,YAAY,EAGlD7mC,GAAAp4D,SAASsS,KAAK,oBACd,KAAK,GAAIt8B,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACrCA,GAAKC,KAAKkoH,aACVloH,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOwB,YAAY,GAE9ChpH,KAAK4nH,mBAAmB7nH,EAAGilH,EAAAwC,OAAOwB,YAAY,EAItD,KAAK,GAAIjpH,GAAI,EAAGA,EAAIC,KAAK+mH,YAAY76G,OAAQnM,IACzC,GAAIC,KAAK+mH,YAAYhnH,GAAGg0B,OAAS/xB,EAAAkD,cAAcC,KAAKwuH,QAAQojB,WACnC,MAAjB/2I,KAAKgmH,SAML,IAAK,GALCngH,GAAak/G,EAAAsG,oBAAoBC,0BACnCtrH,KAAK+mH,YAAYhnH,GAAGwrH,UACpBvrH,KAAKgmH,SAASwF,mBAGT3yD,EAAI,EAAGA,EAAIhzD,EAAWqG,OAAQ2sD,IAAK,CACxC,GAAM6uC,GAAS1nG,KAAKmmG,eAAettC,GAAGhzD,EAAWgzD,GACjD74D,MAAKomH,eAAen0G,SAASy1F,GAM7C,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5CC,KAAKm6I,eAAep6I,EAExBoD,GAAArC,UAAMqnH,UAAS1nH,KAAAT,KAACuoH,KAGVmtB,aAAA50I,UAAA8mH,mBAAV,SACI6C,EACAH,EACAI,EACAowB,GAeA,GAZI96I,KAAK+mH,YAAY0D,GAAUE,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,SACrE9qH,KAAK+mH,YAAY76G,OAAS,EAEtB4uI,EACA33I,EAAArC,UAAM8mH,mBAAkBnnH,KAAAT,KAACyqH,EAAUqwB,GAAiB,GAEpD33I,EAAArC,UAAM8mH,mBAAkBnnH,KAAAT,KAACyqH,EAAUH,GAAU,GAGjDnnH,EAAArC,UAAM8mH,mBAAkBnnH,KAAAT,KAACyqH,EAAUH,EAAUI,IAG5CA,EACD,IAAK,GAAI3qH,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5CC,KAAKm6I,eAAep6I,IAKtB21I,aAAA50I,UAAA+pH,4BAAV,SAAsCJ,EAAkBH,GACpD,GAAMh4C,GAAMtyE,KAAK+mH,YAAY0D,GACvBviB,IAEN,IAAqB,MAAjBloG,KAAKgmH,SAML,IAAK,GALCngH,GAAak/G,EAAAsG,oBAAoBC,0BACnCh5C,EAAIi5C,UACJvrH,KAAKgmH,SAASwF,mBAGTzrH,EAAI,EAAGA,EAAI8F,EAAWqG,OAAQnM,IACnC,GAAoB,IAAhBuyE,EAAI1xD,KAAK7gB,IAAYC,KAAKwqH,oBAAoBzqH,EAAG8F,EAAW9F,GAAIuqH,GAAW;AAC3E,GAAM5iB,GAAS1nG,KAAKmmG,eAAepmG,GAAG8F,EAAW9F,IAE7Cg7I,EAAyB/1B,EAAAwC,OAAOK,QAAU,IAAM9nH,CAEhB,KAAhCC,KAAKinH,yBACL8zB,EAAiB/1B,EAAAwC,OAAOK,SAGxByC,IAAatF,EAAAwC,OAAOiB,YACpBsyB,EAAiB/1B,EAAAwC,OAAOiB,UAAY,IAAM1oH,IAG1CuqH,IAAatF,EAAAwC,OAAOK,SAAWyC,IAAatF,EAAAwC,OAAOiB,YAC/C/gB,EAAOimB,QAAQotB,IACfrzC,EAAOuc,SAAS82B,GACM,MAAlB/6I,KAAK2pH,WAAyD,MAApC3pH,KAAK2pH,UAAU5pH,GAAG8F,EAAW9F,KACvDC,KAAK2pH,UAAU5pH,GAAG8F,EAAW9F,IAAIkkH,SAAS82B,KAOlDrzC,EAAOuc,SAASqG,GACM,MAAlBtqH,KAAK2pH,WAAyD,MAApC3pH,KAAK2pH,UAAU5pH,GAAG8F,EAAW9F,KACvDC,KAAK2pH,UAAU5pH,GAAG8F,EAAW9F,IAAIkkH,SAASqG,IAGlDtqH,KAAKkmH,iBAAiBj0G,SAASy1F,GAE/BQ,EAAQl1F,KAAK00F,GAKzB,MAAOQ,IAGDwtC,aAAA50I,UAAAymH,mBAAV,SAA6B+C,EAAkBC,EAAgBywB,GAAA,SAAAA,OAAA,EAC3D,KAAK,GAAIj7I,GAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5C,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IAAK,CACpD,GAAM+kE,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EAEvB,QAAX+kE,GAAmB1nG,KAAKwqH,oBAAoBzqH,EAAG4iC,EAAG2nF,KAC5B,MAAlBtqH,KAAK2pH,WAA6C,MAAxB3pH,KAAK2pH,UAAU5pH,GAAG4iC,IAAY3iC,KAAK2pH,UAAU5pH,GAAG4iC,GAAGshF,SAASqG,GACtFA,IAAatF,EAAAwC,OAAOwB,YAActhB,EAAOykB,mBAAqBnH,EAAAwC,OAAO4E,WAErE1kB,EAAOuc,SAASqG,GACX0wB,IACGzwB,EACAvqH,KAAKimH,sBAAsBh0G,SAASy1F,GAEpC1nG,KAAKkmH,iBAAiBj0G,SAASy1F,QASjDguC,aAAA50I,UAAA+lH,iBAAV,SAA2BH,EAAmBqD,GAC1C,GAAoD,OAAhD/pH,KAAKmmG,eAAeugB,GAAWqD,GAAuB,CACtD,GAAMxpH,GAAKP,KAAK2mH,aAAaD,GAAWxe,QAAQ6hB,GAC5Ch9G,EAAQ,CACmC,OAA3C/M,KAAK2mH,aAAaD,GAAW5uD,aAC7B/qD,EAAQ/M,KAAK2mH,aAAaD,GAAW5uD,WAAWiyD,GAGpD,IAAMriB,GAAS1nG,KAAKkoG,QAAQ0hB,UAAUrpH,EAAK,EAAGykH,EAAAwC,OAAOwB,WACjDhE,GAAAwC,OAAOikB,MAAQ/jC,EAAOnnG,GAAK,GAC3BmnG,EAAOuc,SAASe,EAAAwC,OAAOC,WAE3B/f,EAAOnoF,SAASL,EAAIlf,KAAKylH,MAAMiB,GAAahf,EAAOmiB,QACnDniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAMgB,GAAa1mH,KAAK6lH,aAAekE,EAAcriB,EAAOoiB,QAErF9pH,KAAKkmH,iBAAiBj0G,SAASy1F,GAC/B1nG,KAAKmmG,eAAeugB,GAAWqD,GAAeriB,IAI5CguC,aAAA50I,UAAAiqH,4BAAV,SACIN,EACAH,EACA2wB,GAKA,IAAK,GARTzhI,GAAAxZ,KAKUsyE,EAAMtyE,KAAK+mH,YAAY0D,GACvBviB,KAEGnoG,EAAI,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IAChC,IAAK,GAAI4iC,GAAI,EAAGA,EAAI3iC,KAAK2lH,YAAahjF,IAClC,GAAiC,KAA5B2vC,EAAI1xD,KAAK7gB,GAAM,GAAK4iC,IAAa3iC,KAAKwqH,oBAAoBzqH,EAAG4iC,EAAG2nF,GAAW,CAC5E,GAAI5iB,GAAS1nG,KAAKmmG,eAAepmG,GAAG4iC,EAEpC,IAAiB,GAAb+kE,EAAOnnG,IAAW06I,GAGdj7I,KAAKoqH,0BAA0Bl+G,OAAS,EAAG,CAC3C,GAAIgvI,GAAaxzC,CACjBA,GAAS1nG,KAAKoqH,0BAA0B7+F,QACxCvrB,KAAKoqH,0BAA0Bp3G,KAAKkoI,GACpCl7I,KAAKmmG,eAAepmG,GAAG4iC,GAAK+kE,EAC5BwzC,EAAWj3B,SAAS,iBAIV,IAAdvc,EAAOnnG,KACPmnG,EAAOuc,SAASqG,GACZA,IAAatF,EAAAwC,OAAOC,UACpBznH,KAAKimH,sBAAsBh0G,SAASy1F,GAEpC1nG,KAAKkmH,iBAAiBj0G,SAASy1F,GAEnCQ,EAAQl1F,KAAK00F,IAa7B,MAPA1nG,MAAKoqH,0BAA0B58F,QAAQ,SAACk6E,GAChC4iB,IAAatF,EAAAwC,OAAOC,YACpB/f,EAAOuc,SAASe,EAAAwC,OAAOC,WACvBjuG,EAAKysG,sBAAsBh0G,SAASy1F,MAIrCQ,GAGJwtC,aAAA50I,UAAAq6I,eAAP,aAEUzF,aAAA50I,UAAA0oH,gBAAV,WAGI,OAFAxpH,KAAKygH,MAAM/qG,OAEH1V,KAAKupH,aACT,IAAKmsB,cAAa8E,qBACdx6I,KAAKyX,KAAK4pG,EAAAkC,YAAYG,kBACtB,MACJ,SACIvgH,EAAArC,UAAM0oH,gBAAe/oH,KAAAT,QAI1B01I,aAAA50I,UAAAo7D,MAAP,SAAa6sD,GACT2sB,aAAajK,MAAO,EACpBzrI,KAAKi5I,kBAAoB,EACzBj5I,KAAKk5I,qBAAuB,EACF,MAAtBl5I,KAAK85I,eAAuB95I,KAAK85I,cAAcpkI,OACxB,MAAvB1V,KAAKg6I,gBAAwBh6I,KAAKg6I,eAAetkI,OAE1B,MAAvB1V,KAAKqmH,gBACLrmH,KAAKqmH,eAAepC,SAAS,UAEA,MAA7BjkH,KAAKw5I,sBACLx5I,KAAKw5I,qBAAqBv1B,SAAS,UAET,MAA1BjkH,KAAKy5I,mBACLz5I,KAAKy5I,kBAAkBx1B,SAAS,UAEF,MAA9BjkH,KAAK05I,uBACL15I,KAAK05I,sBAAsBz1B,SAAS,SAIxC,KAAK,GADDm3B,GAAej4I,EAAArC,UAAMo7D,MAAKz7D,KAAAT,KAAC+oH,GACtBhpH,EAAI,EAAGA,EAAIC,KAAKmmG,eAAej6F,OAAQnM,IAC5CC,KAAKm6I,eAAep6I,GACpBC,KAAKq7I,mBAAmBt7I,EAE5B,OAAOq7I,IAGD1F,aAAA50I,UAAAw6I,yBAAV,SAAmC7wB,EAAkBH,GACjD,GAAqB,MAAjBtqH,KAAKgmH,SAAkB,CACvB,GAAM1zC,GAAMtyE,KAAK+mH,YAAY0D,EAEzBn4C,GAAIq4C,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWjD,UAC9C3nH,KAAKk5I,uBACsB,MAAvBl5I,KAAKqmH,gBACLrmH,KAAKqmH,eAAepC,SAAS,OAASjkH,KAAKk5I,sBAEd,MAA7Bl5I,KAAKw5I,sBACLx5I,KAAKw5I,qBAAqBv1B,SAAS,OAASjkH,KAAKk5I,sBAEnB,MAA9Bl5I,KAAK05I,uBACL15I,KAAK05I,sBAAsBz1B,SAAS,OAASjkH,KAAKk5I,sBAGlD5uB,IAAaxF,EAAA6C,QAAQE,SAAuC,IAA5B7nH,KAAK+mH,YAAY76G,OACjDlM,KAAKgmH,SAAS/B,SAASa,EAAA6C,QAAQ8D,cAAen5C,EAAIi5C,WAElDvrH,KAAKgmH,SAAS/B,SAASqG,EAAUh4C,EAAIi5C,cAM7CmqB,aAAA50I,UAAA45I,oBAAR,WACI16I,KAAKs7I,yBAAyBt7I,KAAKi5I,kBAAmBn0B,EAAA6C,QAAQI,eAE1D/nH,KAAK+mH,YAAY76G,OAAS,GAAKlM,KAAK+mH,YAAY,GAAG4D,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,UAC7F3oC,EAAAp4D,SAASsS,KAAK,mBAAqBr8B,KAAKm5I,cAAgB,IAAMp6H,KAAKC,MAAsB,EAAhBD,KAAKE,WAElFjf,KAAKm5I,gBACDn5I,KAAKm5I,cAAgB,IACrBn5I,KAAKm5I,cAAgB,GAEzBn5I,KAAK85I,cAAcnkI,MAAM,IAGrB+/H,aAAA50I,UAAAi5I,eAAR,WACQ/5I,KAAKi5I,kBAAoBj5I,KAAK+mH,YAAY76G,OAAS,GACnDlM,KAAKi5I,oBACLj5I,KAAK06I,uBAG2B,IAA5B16I,KAAK+mH,YAAY76G,QACjBlM,KAAK+mH,YAAY,GAAG4D,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,QAE9D9qH,KAAKi6I,kBAELj6I,KAAKg6I,eAAerkI,MAAM,KAK9B+/H,aAAA50I,UAAAm5I,gBAAR,WACIj6I,KAAKs5I,yBAAyBrnI,SAASjS,KAAKgmH,UACZ,IAA5BhmH,KAAK+mH,YAAY76G,QAAgBlM,KAAK+mH,YAAY,GAAG4D,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,QAC/F9qH,KAAKgoH,iBAELhoH,KAAK26I,wBAINjF,aAAA50I,UAAAu+G,eAAP,SAAsBr0C,GAClBhrE,KAAKq6I,cAAc,gBAEnB,KAAK,GAAIt6I,GAAY,EAAGA,EAAIC,KAAKwlH,UAAWzlH,IACxC,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAKmmG,eAAepmG,GAAGmM,OAAQy2B,IACtB,MAA7B3iC,KAAKmmG,eAAepmG,GAAG4iC,IAA+C,KAAjC3iC,KAAKmmG,eAAepmG,GAAG4iC,GAAGpiC,IAC/DP,KAAKkmH,iBAAiBj0G,SAASjS,KAAKmmG,eAAepmG,GAAG4iC,GAKlE,KAAK,GAAI5iC,GAAI,EAAGA,EAAIC,KAAK65I,QAAQ3tI,OAAQnM,IACd,MAAnBC,KAAK65I,QAAQ95I,IACbC,KAAKimH,sBAAsBh0G,SAASjS,KAAK65I,QAAQ95I,GAMzD,KAAK,GAFDw7I,IAAiB,EACjBrB,GAAoB,EACfn6I,EAAY,EAAGA,EAAIC,KAAK0pH,YAAYx9G,OAAQnM,IACjD,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAK0pH,YAAY3pH,GAAGmM,OAAS,EAAGy2B,IACzB,OAA3B3iC,KAAK0pH,YAAY3pH,GAAG4iC,KACc,OAA9B3iC,KAAKmmG,eAAepmG,GAAG4iC,IAAgD,IAAjC3iC,KAAKmmG,eAAepmG,GAAG4iC,GAAGpiC,IAChEP,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,iBAChCi2B,GAAoB,IAEpBl6I,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,aAChCs3B,GAAiB,GAErBv7I,KAAK0pH,YAAY3pH,GAAG4iC,GAAGxkB,MAAQ,EAK3Cne,MAAKoqH,4BAEL,KAAK,GADDpzG,IAAqB,EAChBjX,EAAY,EAAGA,EAAIirE,EAAM9+D,OAAQnM,IACtC,GAA0B,MAAtBirE,EAAMjrE,GAAGiX,UAAmB,CAC5B,IAAK,GAAI2rB,GAAY,EAAGA,EAAIqoC,EAAMjrE,GAAGiX,UAAU9K,OAAQy2B,IAAK,CACxD,GAAMpiC,GAAKyqE,EAAMjrE,GAAGiX,UAAU2rB,EAC9B,IAAIpiC,EAAK,EAAG,CACR,GAAMi7I,GAAUx7I,KAAKmmG,eAAepmG,GAAG4iC,EACvC64G,GAAQxxB,YAAYhqH,KAAKkoG,SAEP,IAAdszC,EAAQj7I,IAAYkO,EAAAyB,cAAc8nE,mBAClCh4E,KAAKoqH,0BAA0Bp3G,KAAKwoI,GAEpCA,EAAQv3B,SAAS,QAGrBs3B,GAAiB,EAEjBv7I,KAAKmmG,eAAepmG,GAAG4iC,GAAK,IAE5B,IAAM84G,GAAUz7I,KAAKkoG,QAAQ0hB,UAAU,EAAG,YAC1C6xB,GAAQl8H,SAASL,EAAIlf,KAAKylH,MAAM1lH,GAAK07I,EAAQ5xB,QAC7C4xB,EAAQl8H,SAASH,EAAIpf,KAAK0lH,MAAM3lH,GAAKC,KAAK6lH,aAAeljF,EAAI84G,EAAQ3xB,QACrE2xB,EAAQzxB,YAAYhqH,KAAKkoG,SACrBz5F,EAAAyB,cAAc+nE,kBAEa,MAAvBjN,EAAMjrE,GAAG+3D,YACgC,MAAzCkT,EAAMjrE,GAAG+3D,WAA2B,gBACQ,MAA5CkT,EAAMjrE,GAAG+3D,WAA2B,eAAEn1B,IAEtC84G,EAAQxxB,kBAAkBj/C,EAAMjrE,GAAG+3D,WAA2B,eAAEn1B,IAGpE84G,EAAQlQ,uBAEZvrI,KAAKmmG,eAAepmG,GAAG4iC,GAAK84G,EAC5Bz7I,KAAKkmH,iBAAiBj0G,SAASwpI,GAC/BzkI,GAAY,GAGpBhX,KAAKm6I,eAAep6I,GACpBC,KAAKq7I,mBAAmBt7I,GAYhC,MARIw7I,IACAp5D,EAAAp4D,SAASsS,KAAK,uBAGd69G,GACA/3D,EAAAp4D,SAASsS,KAAK,0BAGXrlB,GAGJ0+H,aAAA50I,UAAA2jH,YAAP,SAAmBz5C,GACfhrE,KAAKunH,mBAAmBvC,EAAAwC,OAAOwB,YAAY,GAC3ChpH,KAAK0nH,oBAAoB5C,EAAA6C,QAAQqB,WAGjC,KAAK,GADDvE,IAAc,EACT1kH,EAAY,EAAGA,EAAIC,KAAK0pH,YAAYx9G,OAAQnM,IACjD,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAK0pH,YAAY3pH,GAAGmM,OAAS,EAAGy2B,IACzB,OAA3B3iC,KAAK0pH,YAAY3pH,GAAG4iC,IACc,OAA9B3iC,KAAKmmG,eAAepmG,GAAG4iC,IAAgD,IAAjC3iC,KAAKmmG,eAAepmG,GAAG4iC,GAAGpiC,KAChEkkH,GAAc,EACVh2G,EAAAyB,cAAc+nE,kBACdj4E,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,qBAEhCjkH,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,kBAWpD,OAJIQ,IACAtiC,EAAAp4D,SAASsS,KAAK,oBAGXooF,GAGJixB,aAAA50I,UAAAwyF,KAAP,SAAYtoB,GACR,IAAK,GAAIjrE,GAAI,EAAGA,EAAIC,KAAK65I,QAAQ3tI,OAAQnM,IACd,MAAnBC,KAAK65I,QAAQ95I,KACbC,KAAKsmH,aAAar0G,SAASjS,KAAK65I,QAAQ95I,IACxCC,KAAK65I,QAAQ95I,GAAGmf,EAAIlf,KAAKylH,MAAM1lH,GAAKC,KAAK65I,QAAQ95I,GAAG8pH,QACpD7pH,KAAK65I,QAAQ95I,GAAGqf,EAAIpf,KAAK0lH,MAAM3lH,GAAKC,KAAK6lH,aAAe7lH,KAAK65I,QAAQ95I,GAAG+pH,QACxE9pH,KAAK65I,QAAQ95I,GAAGkkH,SAAS,cACzBjkH,KAAK65I,QAAQ95I,GAAK,KAK1B,KAAK,GADD27I,IAAe,EACV37I,EAAY,EAAGA,EAAIC,KAAK0pH,YAAYx9G,OAAQnM,IACjD,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAK0pH,YAAY3pH,GAAGmM,OAAQy2B,IACpD,GAA+B,OAA3B3iC,KAAK0pH,YAAY3pH,GAAG4iC,GAAa,CACjC,GAAMg5G,GAAM37I,KAAK0pH,YAAY3pH,GAAG4iC,EAChCg5G,GAAIp8H,SAASL,EAAIlf,KAAKylH,MAAM1lH,GAAKC,KAAK0pH,YAAY3pH,GAAG4iC,GAAGknF,QACxD8xB,EAAIp8H,SAASH,EAAIpf,KAAK0lH,MAAM3lH,GAAKC,KAAK6lH,aAAeljF,EAAI3iC,KAAK0pH,YAAY3pH,GAAG4iC,GAAGmnF,QAChF4xB,GAAe,EACL,IAAN/4G,GAEAg5G,EAAI13B,SAAS,UACbjkH,KAAK0pH,YAAY3pH,GAAG4iC,GAAK,KACzB3iC,KAAK65I,QAAQ95I,GAAK47I,GACL,IAANh5G,EACPg5G,EAAI13B,SAAS,oBAEb03B,EAAI13B,SAAS,UAEjB03B,EAAIx9H,MAAQ,EACZw9H,EAAIzxB,sBAUhB,GALIwxB,GACAv5D,EAAAp4D,SAASsS,KAAK,qBAIoB,MAAlCr8B,KAAKoqH,0BAAmC,CACxC,IAAK,GAAIrqH,GAAI,EAAGA,EAAIC,KAAKoqH,0BAA0Bl+G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKoqH,0BAA0BrqH,EAE/B,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOuc,SAAS,QAIxBjkH,KAAKoqH,+BAINsrB,aAAA50I,UAAA2yF,aAAP,SAAoBzoB,GAEhB,IAAK,GADD4wE,IAAc,EACT77I,EAAY,EAAGA,EAAIirE,EAAM9+D,OAAQnM,IAAK,CAC3C,GAAwB,MAApBirE,EAAMjrE,GAAG87I,QAAiB,CAC1B77I,KAAK0pH,YAAY3pH,GAAGwrB,OACpB,KAAK,GAAIoX,GAAY,EAAGA,EAAIqoC,EAAMjrE,GAAG87I,QAAQ3vI,OAAQy2B,IAAK,CACtD,GAAMpiC,GAAKyqE,EAAMjrE,GAAG87I,QAAQl5G,EAC5B,IAAIA,IAAMqoC,EAAMjrE,GAAG87I,QAAQ3vI,OAAS,EAChC,GAAI3L,EAAK,EAAG,CACR,GAAMmnG,GAAS1nG,KAAKkoG,QAAQ0hB,UAAU,GAAI,sBAC1CgyB,IAAc,EACdl0C,EAAOnoF,SAASL,EAAIlf,KAAKylH,MAAM1lH,GAAK2nG,EAAOmiB,QAC3CniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAM3lH,GAAyB,EAApBC,KAAK6lH,aAAmBne,EAAOoiB,QACnEpiB,EAAOsiB,YAAYhqH,KAAKkoG,SACxBR,EAAOwiB,sBACPlqH,KAAK0pH,YAAY3pH,GAAGiT,KAAK00F,GACzB1nG,KAAKsmH,aAAar0G,SAASy1F,OAE3B1nG,MAAK0pH,YAAY3pH,GAAGiT,KAAK,OAWrC4oI,GACAz5D,EAAAp4D,SAASsS,KAAK,sBAKtB,IAAK,GADDy/G,IAAW,EACN/7I,EAAY,EAAGA,EAAIirE,EAAM9+D,OAAQnM,IACtC,GAAwB,MAApBirE,EAAMjrE,GAAG87I,QACT,IAAK,GAAIl5G,GAAY,EAAGA,EAAIqoC,EAAMjrE,GAAG87I,QAAQ3vI,OAAQy2B,IAClB,OAA3B3iC,KAAK0pH,YAAY3pH,GAAG4iC,KAChBl0B,EAAAyB,cAAc+nE,kBAEa,MAAvBjN,EAAMjrE,GAAG+3D,YACoC,MAA7CkT,EAAMjrE,GAAG+3D,WAA+B,oBACQ,MAAhDkT,EAAMjrE,GAAG+3D,WAA+B,mBAAEn1B,KAE1C3iC,KAAK0pH,YAAY3pH,GAAG4iC,GAAG0oG,iBAAiBrgE,EAAMjrE,GAAG+3D,WAA+B,mBAAEn1B,IAClF3iC,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,WAChC63B,GAAW,GAGf97I,KAAK0pH,YAAY3pH,GAAG4iC,GAAGunF,sBAOvC4xB,KACA35D,EAAAp4D,SAASsS,KAAK,mBAAqBr8B,KAAKo5I,yBACxCp5I,KAAKo5I,0BACDp5I,KAAKo5I,wBAA0B,IAC/Bp5I,KAAKo5I,wBAA0B,KAKpC1D,aAAA50I,UAAA+iH,WAAP,SAAkB74C,GACd,IAAK,GAAIjrE,GAAY,EAAGA,EAAIC,KAAK0pH,YAAYx9G,OAAQnM,IACjD,IAAK,GAAI4iC,GAAY,EAAGA,EAAI3iC,KAAK0pH,YAAY3pH,GAAGmM,OAAQy2B,IACrB,OAA3B3iC,KAAK0pH,YAAY3pH,GAAG4iC,KACpB3iC,KAAK0pH,YAAY3pH,GAAG4iC,GAAGshF,SAAS,SAChCjkH,KAAK0pH,YAAY3pH,GAAG4iC,GAAGunF,sBACvBlqH,KAAK0pH,YAAY3pH,GAAG4iC,GAAK,KAKrC,KAAK,GAAI5iC,GAAY,EAAGA,EAAIirE,EAAM9+D,OAAQnM,IACtC,GAAwB,MAApBirE,EAAMjrE,GAAG87I,QACT,IAAK,GAAIl5G,GAAY,EAAGA,EAAIqoC,EAAMjrE,GAAG87I,QAAQ3vI,OAAQy2B,IAAK,CACtD,GAAMpiC,GAAKyqE,EAAMjrE,GAAG87I,QAAQl5G,EAC5B,IAAIpiC,EAAK,EAAG,CACR,GAAMmnG,GAAS1nG,KAAKkoG,QAAQ0hB,UAAU,GAAU,IAANjnF,EAAU,eAAiB,QACrE+kE,GAAOnoF,SAASL,EAAIlf,KAAKylH,MAAM1lH,GAAK2nG,EAAOmiB,QAC3CniB,EAAOnoF,SAASH,EAAIpf,KAAK0lH,MAAM3lH,GAAKC,KAAK6lH,aAAeljF,EAAI+kE,EAAOoiB,QACnEpiB,EAAOsiB,YAAYhqH,KAAKkoG,SACxBR,EAAOwiB,sBACPlqH,KAAK0pH,YAAY3pH,GAAG4iC,GAAK+kE,EACzB1nG,KAAK0pH,YAAY3pH,GAAG4iC,GAAGxkB,MAAQ,EAC/Bne,KAAKsmH,aAAar0G,SAASy1F,OAE3B1nG,MAAK0pH,YAAY3pH,GAAG4iC,GAAK,OAOtC+yG,aAAA50I,UAAA4jH,aAAP,WACI,IAAK,GAAI3kH,GAAI,EAAGA,EAAIC,KAAK65I,QAAQ3tI,OAAQnM,IACd,MAAnBC,KAAK65I,QAAQ95I,KACbC,KAAK65I,QAAQ95I,GAAGkkH,SAAS,SACzBjkH,KAAK65I,QAAQ95I,GAAGmqH,sBAChBlqH,KAAK65I,QAAQ95I,GAAK,OAKtB21I,aAAA50I,UAAAq5I,eAAR,SAAuBzzB,GACnB,IAAK,GAAI3mH,GAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAC/B,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAEZ,OAAXA,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAC/B,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAE/B,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,GAI/B,IAAK,GAAI3nG,GAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAE/B,QAAX2nG,GAAiC,KAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,KAgB3BguC,aAAA50I,UAAAu6I,mBAAR,SAA2B30B,GACvB,IAAKj4G,EAAAyB,cAAc8nE,mBACf,IAAK,GAAIj4E,GAAI,EAAGA,EAAIC,KAAKmmG,eAAeugB,GAAWx6G,OAAQnM,IAAK,CAC5D,GAAM2nG,GAAS1nG,KAAKmmG,eAAeugB,GAAW3mH,EAE/B,QAAX2nG,GAAiC,IAAdA,EAAOnnG,IAC1BmnG,EAAOjvE,OAAOxmB,SAASy1F,KA7kChCguC,aAAAC,OAAiB,EACjBD,aAAAjK,MAAgB,EAEGiK,aAAA8E,qBAA+B,uBAE/B9E,aAAA+E,uBAAiC,GAP/D/E,aAAA95H,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBlHmmkCxB8uH,ekHlmkC0Br0B,EAAAkC,YAArBljH,GAAAq1I,aAAYA,GlH0mkCnB,SAASp1I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmH5okCjEna,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9Bic,EAAAjc,EAA+B,IAE/BiT,EAAAjT,EAA2E,GAG3EmhH,EAAAnhH,EAAwB,KACxBkhH,EAAAlhH,EAA4B,IAE5BwC,EAAAxC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBuC,EAAAvC,EAA+B,IAC/ByC,EAAAzC,EAA4B,IAC5B0jG,EAAA1jG,EAAkC,IAElC8gH,EAAA9gH,EAAyB,IAEzB20E,EAAA30E,EAA+B,IAC/BshH,EAAAthH,EAAuC,KAGvCokH,EAAA,SAAAphH,GAAmC5B,EAAAgjH,cAAAphH,EAmB/B,SAAAohH,iBACIphH,EAAA1C,KAAAT,MACAA,KAAK4hH,YAAcxuG,EAAAa,iBAAiB,cACpCjU,KAAK4hH,YAAY1tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK0mG,cAAcryF,KAAKrU,OACvEA,KAAK6hH,YAAczuG,EAAAa,iBAAiB,cACpCjU,KAAK6hH,YAAY3tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK6lG,cAAcxxF,KAAKrU,OACvEA,KAAK8hH,WAAa1uG,EAAAa,iBAAiB,aACnCjU,KAAK8hH,WAAW5tG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK+hH,sBAAsB1tG,KAAKrU,OAC9EA,KAAKkiH,gBAAkB9uG,EAAAa,iBAAiB,kBACxCjU,KAAKkiH,gBAAgBhuG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKmiH,eAAe9tG,KAAKrU,OAC5EA,KAAK+7I,uBAAyB3oI,EAAAa,iBAAiB,yBAC/CjU,KAAK+7I,uBAAuB7nI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKg8I,sBAAsB3nI,KAAKrU,OA4XlG,MAzXWukH,eAAAzjH,UAAAa,OAAP,SAAcmc,GACV3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GACiB,MAA1B9d,KAAK4pG,OAAgB,UACrB5pG,KAAKyiH,SAAWziH,KAAK4pG,OAAgB,QACrC5pG,KAAKymB,YAAYzmB,KAAKyiH,WAEK,MAA3BziH,KAAK4pG,OAAiB,WAAW5pG,KAAK0iH,UAAY1iH,KAAK4pG,OAAiB,UAC9C,MAA1B5pG,KAAK4pG,OAAgB,UAAW5pG,KAAK2iH,SAAW3iH,KAAK4pG,OAAgB,SACvC,MAA9B5pG,KAAK4pG,OAAoB,cAAW5pG,KAAK4iH,aAAe5iH,KAAK4pG,OAAoB,aAElD,MAA/B5pG,KAAK4pG,OAAqB,eAAW2a,cAAc1B,aAAe7iH,KAAK4pG,OAAqB,cACrE,MAAvB5pG,KAAK4pG,OAAa,OAAW2a,cAAczB,KAAO9iH,KAAK4pG,OAAa,MAExE5pG,KAAKi8I,gBAAkB9yI,SAASC,eAAe,kBAC/CpJ,KAAKk8I,cAAgB/yI,SAASC,eAAe,gBAC7CpJ,KAAKm8I,mBAAqBhzI,SAASC,eAAe,qBAGlDpJ,KAAKi8I,gBAAgB3yI,UAAUC,IAAI,WACnCvJ,KAAKk8I,cAAc5yI,UAAUC,IAAI,WACjCvJ,KAAKm8I,mBAAmB7yI,UAAUC,IAAI,WAEtCvJ,KAAK8f,SAAU,GAGZykG,cAAAzjH,UAAAu1E,aAAP,SAAoB8c,GAChBnzF,KAAK80G,YAAc3hB,EAEE,MAAjBnzF,KAAKyiH,UACgB,MAAjBziH,KAAK2iH,UACgC,MAAjChgH,EAAAoG,YAAYmxE,oBAEkC,MAA1Cv3E,EAAAoG,YAAYmxE,kBAAkB1Y,UACmB,OAAjD7+D,EAAAoG,YAAYmxE,kBAAkB1Y,SAASwJ,QAEvChrE,KAAK2iH,SAASzuG,GAAGotG,EAAA8B,QAAQC,YAAarjH,KAAKsjH,cAAcjvG,KAAKrU,OAC9DA,KAAK2iH,SAASzuG,GAAGotG,EAAA8B,QAAQhE,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OAClEA,KAAK2iH,SAAS7+G,WACV9D,KAAKyiH,SACL9/G,EAAAoG,YAAYmxE,kBAAkB1Y,SAASwJ,MACvC,KACA,MACA,IAIiB,MAArBhrE,KAAK4iH,eACL5iH,KAAK4iH,aAAa1uG,GAAGmtG,EAAAkC,YAAYC,qBAAsBxjH,KAAKyjH,qBAAqBpvG,KAAKrU,OACtFA,KAAK4iH,aAAa1uG,GAAGmtG,EAAAkC,YAAYG,kBAAmB1jH,KAAK2jH,kBAAkBtvG,KAAKrU,OAChFA,KAAK4iH,aAAa9+G,WACd9D,KAAKyiH,SACLziH,KAAK0iH,UACL1iH,KAAK4pG,OAAuB,eAC5B5pG,KAAK4pG,OAAqB,aAC1B5pG,KAAK4pG,OAA0B,kBAC/B5pG,KAAK4pG,OAAuB,eAC5B5pG,KAAK4pG,OAAuB,eAC5B5pG,KAAK4pG,OAAqB,aAC1B5pG,KAAK4pG,OAA8B,sBACnC5pG,KAAK4pG,OAAoB,aAI7B5pG,KAAK4iH,aAAakB,uBACd9jH,KAAK4pG,OAAgC,wBACrC5pG,KAAK4pG,OAA6B,qBAClC5pG,KAAK4pG,OAA4B,oBACjC5pG,KAAK4pG,OAA6B,qBAClC5pG,KAAK4pG,OAA+B,0BAkBxD5pG,KAAK8f,SAAU,GAGZykG,cAAAzjH,UAAA2iG,cAAP,WACgC,MAAxBzjG,KAAKi8I,iBAA4Bj8I,KAAKi8I,gBAAgB3yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACxF/iF,KAAKi8I,gBAAgB3yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAClDk+B,EAAAC,SAAS2B,aAAaoB,SAAS,iBAEnCjkH,KAAK2iH,SAASoB,uBAAuBphH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAC1EhrE,KAAK4iH,aAAagB,YAAYjhH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAClC,MAA7B8J,EAAAmF,eAAeF,YAA6D,OAAvCjF,EAAAmF,eAAeF,WAAkB,OACtE/5E,KAAK4iH,aAAaiB,WAAW/uC,EAAAmF,eAAeF,WAAkB,OAClE/5E,KAAK4iH,aAAa1mD,OAAM,IAGrBqoD,cAAAzjH,UAAA2yF,aAAP,WACyC,MAAjC9wF,EAAAoG,YAAYmxE,mBAAsE,OAAzCv3E,EAAAoG,YAAYmxE,kBAAkBnP,QACvE/qE,KAAK4iH,aAAanvB,aAAa9wF,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAExEhrE,KAAK2iH,SAASoB,uBAAuBphH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAC1EhrE,KAAK2iH,SAAS3e,SAAS,MAAM,GAAO,IAGjCugB,cAAAzjH,UAAA8iG,YAAP,aAEO2gB,cAAAzjH,UAAAwyF,KAAP,WACqC,MAA7Bxe,EAAAmF,eAAeF,YAA4D,MAAtCjF,EAAAmF,eAAeF,WAAkB,MACtE/5E,KAAK4iH,aAAatvB,KAAKxe,EAAAmF,eAAeF,WAAkB,OAExD/5E,KAAK4iH,aAAatvB,KAAK,MAE3BnR,EAAAp4D,SAAS8jE,KAAK,cACc,MAAxB7tF,KAAKi8I,iBAA4Bj8I,KAAKi8I,gBAAgB3yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACxF/iF,KAAKi8I,gBAAgB3yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAClDwhC,cAAc1B,aAAaoB,SAAS,iBAExCjkH,KAAK2iH,SAASrd,UAAUtlG,KAAK4iH,aAAa1mD,OAAM,IAAO,EAAMl8D,KAAK4iH,aAAazc,iBAG5Eoe,cAAAzjH,UAAA4U,KAAP,WACI1V,KAAK2iH,SAAS3e,SAAS,MAAM,IAG1BugB,cAAAzjH,UAAAo+E,UAAP,WACI2kB,EAAA8C,kBAAkBC,wBAAwB,KAAM,GAChD5mG,KAAK2iH,SAASoB,uBAAuBphH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAC1EhrE,KAAK4iH,aAAagB,YAAYjhH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,OAClC,MAA7B8J,EAAAmF,eAAeF,YAA6D,OAAvCjF,EAAAmF,eAAeF,WAAkB,OACtE/5E,KAAK4iH,aAAaiB,WAAW/uC,EAAAmF,eAAeF,WAAkB,OAClE/5E,KAAK4iH,aAAasB,aAAavhH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAMxhH,EAAAoG,YAAYmxE,kBAAkB6Z,YACjG/zF,KAAK8f,SAAU,EACf9f,KAAK62I,YAED72I,KAAKo8I,kBACLj6D,EAAAp4D,SAASrU,KAAK,cACdysE,EAAAp4D,SAAS8jE,KAAK,iBACd1L,EAAAp4D,SAASsS,KAAK,aAEV15B,EAAAoG,YAAYmxE,kBAAkB9O,SAAW,EACf,MAAtBprE,KAAKk8I,eAAyBl8I,KAAKk8I,cAAc5yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACnF/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACnD/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAO,WACpCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,cAInC,MAA3BjkH,KAAKm8I,oBACLn8I,KAAKm8I,mBAAmB7yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBAE1D/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACxD/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAO,WACzCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,eAItE9hC,EAAAp4D,SAAS8jE,KAAK,eAIf02B,cAAAzjH,UAAAk/E,MAAP,SAAaD,GAAA,SAAAA,OAAA,GACT//E,KAAK8f,SAAU,EAEY,MAAvBmhG,EAAAC,SAAS6B,aACT/iH,KAAKiS,SAASgvG,EAAAC,SAAS6B,YACvB9B,EAAAC,SAAS6B,WAAWkB,SAAS,QAGjC3uG,WAAW,aAER,KACHtV,KAAK4hH,YAAYjsG,MAAM,KAGpB4uG,cAAAzjH,UAAAm/E,MAAP,WACI4jB,EAAA8C,kBAAkBC,wBAAwB,OAAQ,IACvB,MAAvB5mG,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,aAC9DjkH,KAAK8f,SAAU,EACY,MAAvBmhG,EAAAC,SAAS6B,aACT/iH,KAAKiS,SAASgvG,EAAAC,SAAS6B,YACvB9B,EAAAC,SAAS6B,WAAWkB,SAAS,UAEmB,iBAAhDM,cAAc1B,aAAasJ,kBAC3B5H,cAAc1B,aAAaoB,SAAS,gBAExC9hC,EAAAp4D,SAASrU,KAAK,cACdysE,EAAAp4D,SAASrU,KAAK,cACdysE,EAAAp4D,SAASsS,KAAK,eACY,MAAtBr8B,KAAKk8I,eAA0Bl8I,KAAKk8I,cAAc5yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAKk8I,cAAc5yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAGrB,MAA3B/iF,KAAKm8I,oBACJn8I,KAAKm8I,mBAAmB7yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE3D/iF,KAAKm8I,mBAAmB7yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAEzD/iF,KAAK6hH,YAAYlsG,MAAM,KAGpB4uG,cAAAzjH,UAAAqgH,YAAP,WAC+B,MAAvBnhH,KAAK4pG,OAAa,MAClB5pG,KAAKymB,YAAYzmB,KAAK4pG,OAAa,OAIpC2a,cAAAzjH,UAAA0lB,OAAP,WACI27D,EAAAp4D,SAASsS,KAAK,aAEc,MAAxBr8B,KAAKi8I,iBAA2Bj8I,KAAKi8I,gBAAgB3yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACvF/iF,KAAKi8I,gBAAgB3yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACrD/iF,KAAKi8I,gBAAgB3yI,UAAU6N,OAAO,WACtC8pG,EAAAC,SAAS2B,aAAaoB,SAAS,gBACV,MAAjBhD,EAAAC,SAAS4B,MAAc7B,EAAAC,SAAS4B,KAAKmB,SAAS,eAIlDM,cAAAzjH,UAAAwiH,cAAR,WACItjH,KAAK4iH,aAAaU,cAAc3gH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,MAAOhrE,KAAK2iH,SAAS6B,oBAGtFD,cAAAzjH,UAAAu+G,eAAR,WACQr/G,KAAK4iH,aAAa6B,YAAY9hH,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,QACnEhrE,KAAK80G,YAAYyK,uBACjBv/G,KAAKkiH,gBAAgBvsG,MAAM,KAE3B3V,KAAKmiH,kBAILoC,cAAAzjH,UAAAqhH,eAAR,WACIniH,KAAKkiH,gBAAgBxsG,OACjB1V,KAAK4iH,aAAavD,eAAe18G,EAAAoG,YAAYmxE,kBAAkBnP,OAAOC,QACtEhrE,KAAK80G,YAAYyK,uBACjBv/G,KAAK8hH,WAAWnsG,MAAM,KAEtB3V,KAAK+hH,yBAILwC,cAAAzjH,UAAAihH,sBAAR,WACqD,IAA7Cp/G,EAAAoG,YAAYmxE,kBAAkB6Z,YAAqB/zF,KAAKo8I,kBACxDp8I,KAAK80G,YAAYuK,iBAGjBr/G,KAAK4iH,aAAapgD,SAAS7/D,EAAAoG,YAAYmxE,kBAAkBiqC,KAAMxhH,EAAAoG,YAAYmxE,kBAAkB6Z,YAIhD,IAA7CpxF,EAAAoG,YAAYmxE,kBAAkB6Z,YAC1B/zF,KAAKo8I,kBACLp8I,KAAK+7I,uBAAuBpmI,MAAM,KAKtC4uG,cAAAzjH,UAAAk7I,sBAAR,WACIh8I,KAAK+7I,uBAAuBrmI,OAC5B1V,KAAK80G,YAAYuK,iBAEjBl9B,EAAAp4D,SAASrU,KAAK,cACdysE,EAAAp4D,SAAS8jE,KAAK,cACd1L,EAAAp4D,SAASsS,KAAK,aAEV15B,EAAAoG,YAAYmxE,kBAAkB9O,SAAW,EACf,MAAtBprE,KAAKk8I,eAAyBl8I,KAAKk8I,cAAc5yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACnF/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACnD/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAO,WACpCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,cAInC,MAA3BjkH,KAAKm8I,oBACLn8I,KAAKm8I,mBAAmB7yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBAE1D/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACxD/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAO,WACzCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,eAKlEM,cAAAzjH,UAAA2iH,qBAAR,WACIzjH,KAAK80G,YAAYQ,0BAGbiP,cAAAzjH,UAAA6iH,kBAAR,WACI3jH,KAAK80G,YAAYU,kBAEbx1G,KAAKo8I,kBACLj6D,EAAAp4D,SAASrU,KAAK,cACdysE,EAAAp4D,SAAS8jE,KAAK,cACd1L,EAAAp4D,SAASsS,KAAK,aAEV15B,EAAAoG,YAAYmxE,kBAAkB9O,SAAW,EACf,MAAtBprE,KAAKk8I,eAAyBl8I,KAAKk8I,cAAc5yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACnF/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACnD/iF,KAAKk8I,cAAc5yI,UAAU6N,OAAO,WACpCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,cAInC,MAA3BjkH,KAAKm8I,oBACLn8I,KAAKm8I,mBAAmB7yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBAE1D/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACxD/iF,KAAKm8I,mBAAmB7yI,UAAU6N,OAAO,WACzCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,eAItE9hC,EAAAp4D,SAAS8jE,KAAK,cAGlB7tF,KAAK62I,aAGDtyB,cAAAzjH,UAAA4lG,cAAR,WACI7C,EAAA8C,kBAAkBC,wBAAwB,UAAW,GACrDzkB,EAAAp4D,SAAS8jE,KAAK,cACd02B,cAAc1B,aAAaoB,SAAS,SACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,QAC9DjkH,KAAK80G,YAAYpO,iBAGb6d,cAAAzjH,UAAA+kG,cAAR,WACI7lG,KAAK8f,SAAU,EACf9f,KAAK4iH,aAAa0B,aAClBtkH,KAAK80G,YAAYjP,iBAGb0e,cAAAzjH,UAAA+1I,UAAR,WACI,IAAK72I,KAAKo8I,kBACoC,MAAtCz5I,EAAAoG,YAAYmxE,kBAAkBiqC,MAAgBxhH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAS,EAC1F,IAAK,GAAInM,GAAY,EAAGA,EAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAQnM,IAE/D4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAG4qH,UAAY3oH,EAAAkD,cAAcC,KAAKylH,WAAWE,SAChFnoH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAGg0B,OAAS/xB,EAAAkD,cAAcC,KAAKwuH,QAAQojB,WACrB,IAArDp0I,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAGmoG,QAAQ,IAGlB,MAAxBloG,KAAKi8I,iBACLj8I,KAAKi8I,gBAAgB3yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBAEvDZ,EAAAp4D,SAASsS,KAAK,aACdr8B,KAAKi8I,gBAAgB3yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eACrD/iF,KAAKi8I,gBAAgB3yI,UAAU6N,OAAO,WACtCotG,cAAc1B,aAAaoB,SAAS,gBACT,MAAvBjkH,KAAK4pG,OAAa,MAAW5pG,KAAK4pG,OAAa,KAAEqa,SAAS,eAQ9EM,cAAAzjH,UAAAs7I,eAAR,WACI,QAAIx5I,EAAA6F,YAAY8gE,WAI+B,MAA3C5mE,EAAAoG,YAAYmxE,kBAAkB68D,WAC4B,MAA1Dp0I,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBACmB,IAA3D7kF,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBAxZpD+8B,cAAA3oG,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBnHw9kCxB29F,gBmHv9kC2B9C,EAAAoD,uBAAtBxkH,GAAAkkH,cAAaA,GnH+9kCpB,SAASjkH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoHjglCjEna,EAAAzB,EAA6C,GAC7C6B,EAAA7B,EAAiE,GACjEiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAC5B8zG,EAAA9zG,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5By0E,EAAAz0E,EAAyB,IACzBsC,EAAAtC,EAAyB,IACzB89G,EAAA99G,EAA4B,IAC5B+9G,EAAA/9G,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3BomE,EAAApmE,EAA2B,IAC3BsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IACzBqmE,EAAArmE,EAA+B,IAC/Bu0E,EAAAv0E,EAA4B,IAC5Bo0E,EAAAp0E,EAAmC,IACnC2C,EAAA3C,EAAuC,IACvCkT,EAAAlT,EAAwB,IAExBm7E,EAAAn7E,EAAuC,IACvC4lF,EAAA5lF,EAAqC,IACrC6lF,EAAA7lF,EAAmC,IAE/B8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAGrC4jG,EAAA,SAAA1wG,GAA4C5B,EAAAsyG,uBAAA1wG,EAgBxC,SAAA0wG,0BACI1wG,EAAA1C,KAAAT,KAAM,QAPFA,KAAAo+G,iBAA2B,EAC3Bp+G,KAAAq+G,eAAyB,EAEzBr+G,KAAAs+G,iBAA2B,EAC3Bt+G,KAAAu+G,WAAqB,EA8gCjC,MAxgCI1K,wBAAA/yG,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK40G,kBAEL50G,KAAKy+G,eAAiBrrG,EAAAa,iBAAiB,iBACvCjU,KAAKy+G,eAAevqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKs2G,oBAAoBjiG,KAAKrU,OAEhFA,KAAK0+G,eAAiBtrG,EAAAa,iBAAiB,iBACvCjU,KAAK0+G,eAAexqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK2+G,gBAAgBtqG,KAAKrU,OAE5EA,KAAK4+G,oBAAsBxrG,EAAAa,iBAAiB,sBAC5CjU,KAAK4+G,oBAAoB1qG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK6+G,mBAAmBxqG,KAAKrU,OAEpFA,KAAK8+G,cAAgB31G,SAASC,eAAe,gBAE7CpJ,KAAKq8I,aAAelzI,SAASC,eAAe,eACnB,MAArBpJ,KAAKq8I,cAAyBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAClF/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIvD8wB,uBAAA/yG,UAAAm+E,cAAA,SAAckU,GACVnzF,KAAK80G,YAAc3hB,EACnBnzF,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeC,aAAcn/G,KAAKyzF,aAAap/E,KAAKrU,OACxEA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeE,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OAC5EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAe7J,uBAAwBr1G,KAAKs1G,uBAAuBjhG,KAAKrU,OAC5FA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAe3J,gBAAiBv1G,KAAKw1G,gBAAgBnhG,KAAKrU,OAC9EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAevJ,cAAe31G,KAAK0mG,cAAcryF,KAAKrU,OAC1EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAetJ,cAAe51G,KAAK6lG,cAAcxxF,KAAKrU,OAE1EA,KAAK80G,YAAY5gG,GAAGgqG,EAAAgB,eAAeI,qBAAsBt/G,KAAKu/G,qBAAqBlrG,KAAKrU,QAG5F6zG,uBAAA/yG,UAAA8zG,gBAAA,WACI50G,KAAK+4E,QAAQ67B,iBAAgBvpF,KACzBA,EAAC6nE,EAAAU,YAAYK,iBAAiB,EAC9B5oE,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,oBAAoB,EACjClpE,EAAC6nE,EAAAU,YAAYS,iBAAiB,EAC9BhpE,EAAC6nE,EAAAU,YAAYO,gBAAgB,EAC7B9oE,EAAC6nE,EAAAU,YAAYQ,iBAAiB,EAC9B/oE,EAAC6nE,EAAAU,YAAYC,aAAa,EAC1BxoE,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpH4+kC7B3oE,IoHz+kCoB,MAArBrrB,KAAKq8I,cAAyBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAClF/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,cpH6+kClD,IAAI13D,IoHz+kCTwoF,uBAAA/yG,UAAAu1E,aAAA,WACIr2E,KAAKw/G,sBAAwBr2G,SAASC,eAAe,wBAErDjG,EAAArC,UAAMu1E,aAAY51E,KAAAT,MAElBA,KAAK80G,YAAYz+B,eAEjBr2E,KAAKy/G,UAAY,GAAI7qC,GAAAc,SACrB11E,KAAKy/G,UAAU37G,aAEiB,MAA5BnB,EAAAoG,YAAYgxD,eACNj3D,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASs7D,aACTthE,EAAAoG,YAAYgxD,aAAaqR,SAASl9D,aAKpB,MAAtBlO,KAAK8+G,eAA0BrwG,EAAAyB,cAAckqE,iBAC7Cp6E,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAGL,MAA9B9R,KAAKw/G,uBAAkC/wG,EAAAyB,cAAckqE,iBACrDp6E,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG3CrD,EAAAyB,cAAc+nE,mBACY,MAAtBj4E,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAIlB,MAA9B/iF,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAErDt0E,EAAAyB,cAAckqE,iBACK,MAAtBp6E,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIxDngF,EAAA6F,YAAY6hE,sBAGhBupC,uBAAA/yG,UAAA81E,gBAAA,WA8BI,GA7BA9zE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAKtyE,KAAKq+G,eACVjI,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE9D3hE,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ56B,EAAAoG,YAAYgxD,aAAaiQ,QAAQ8N,OAE9E30E,EAAArC,UAAM81E,gBAAen2E,KAAAT,MAErBA,KAAKo+G,iBAAkB,EACvBx7G,EAAA6F,YAAY2rE,aAAc,EAC1BxxE,EAAA6F,YAAY6hE,qBAEZtqE,KAAKs2G,sBAED9zG,EAAAgC,WAAWC,kBAAkByiG,0BAA4BlnG,KAAKq+G,eAAiB,GAC/Ez7G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAcjkE,KAAKq+G,eAAenwG,YACzElO,KAAKq2G,cAAa,KAEZvzG,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KAEzDjkE,KAAKq2G,gBAETr2G,KAAK4+G,oBAAoBlpG,OAEzB1V,KAAKq+G,eAAiB,EAElBv7G,EAAAwC,uBAAuBkkE,UAGvB,MAFA1mE,GAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,eAKtBo5B,uBAAA/yG,UAAAs3E,iBAAA,SAAiB5B,GAAA,SAAAA,OAAA,GACbrzE,EAAArC,UAAM81E,gBAAen2E,KAAAT,MACrBA,KAAKq2G,aAAa7/B,GAElB1zE,EAAAwC,uBAAuB83E,WAEvBx6E,EAAA6F,YAAY2rE,aAAc,EAG1Bp0E,KAAKy+G,eAAe9oG,MAAM,KAG9Bk+F,uBAAA/yG,UAAA2yF,aAAA,WACI3wF,EAAAwC,uBAAuBimF,SAC7B,IAAMm0B,GAAoB58G,EAAAwC,uBAAuB6lE,OAAS3oE,EAAAgC,WAAWC,kBAAkBirE,oBAAsB,CAEnG9sE,GAAA6F,YAAYo/D,qBAAuB63C,GACnC1/G,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS66D,aACvCxjE,KAAK80G,YAAYp/F,SAEjB1V,KAAK+4E,QAAQm+B,kBACThkB,EAAAU,YAAYI,eACZxxF,EAAAgC,WAAWC,kBAAkBujE,sBAAwB03C,GAEzDh9G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCr0G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS66D,eAI/CqwC,uBAAA/yG,UAAAq4D,eAAA,SAAe+mB,GACX,IAAIzxE,EAAAyB,cAAckqE,iBAAkB3rE,EAAAyB,cAAc+nE,kBAAlD,CAIA,GAAIiI,IAAW+9B,EAAA0B,YAAYC,iBACvB,GAAI5/G,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYC,YACxC3T,EAASgT,EAAAU,YAAYC,eAClB,KAAI7zF,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYI,gBAG/C,MAFA9T,GAASgT,EAAAU,YAAYI,eAM7B,GAAIh0F,KAAK+4E,QAAQy9B,eAAet2B,GAU5B,OATIA,IAAWgT,EAAAU,YAAYW,kBACvBv0F,KAAKq2G,cAAa,GAElBr2G,KAAKq2G,eAGTl0B,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEbA,GACJ,IAAKgT,GAAAU,YAAYC,WACb7zF,KAAKszF,MACL,MACJ,KAAKJ,GAAAU,YAAYI,eACbh0F,KAAK0V,MACL,MACJ,KAAKw9E,GAAAU,YAAYK,eACbj0F,KAAK6/G,UACL,MACJ,KAAK3sB,GAAAU,YAAYM,mBACbl0F,KAAK8/G,cACL,MACJ,KAAK5sB,GAAAU,YAAYS,eACbr0F,KAAKk9E,WAAU,GAAO,GAAO,EAC7B,MACJ,KAAKgW,GAAAU,YAAYO,cACbn0F,KAAKk9E,WAAU,GAAO,GAAO,EAC7B,MACJ,KAAKgW,GAAAU,YAAYQ,eACbp0F,KAAKk9E,WAAU,GAAM,GAAO,EAC5B,MACJ,KAAKgW,GAAAU,YAAYW,kBACbv0F,KAAKw2E,aAMrBq9B,uBAAA/yG,UAAA01E,QAAA,WACSx2E,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,GAC1E/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAIzD5wF,EAAArC,UAAM01E,QAAO/1E,KAAAT,MAEbyO,EAAAyB,cAAcwqE,gBACd16E,KAAK4/E,UACL5/E,KAAK62G,mBAEL72G,KAAK80G,YAAYt+B,UAEjB9B,EAAAyD,YAAYjf,cACZv2D,EAAAoG,YAAYytE,QAAQvmE,EAAYioE,MAE1Bp1E,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACzD7mE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASs7D,aACRzhE,EAAAgC,WAAW2B,eAAeswE,OAAez2E,KAAKq+G,eAAenwG,WAA1B;EAMhD2lG,uBAAA/yG,UAAA+9G,mBAAA,WACIj8G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,MAGzD4vC,uBAAA/yG,UAAAwyF,KAAA,WAII,GAHAtzF,KAAKs+G,iBAAkB,EAEvBx7G,EAAAwC,uBAAuBswE,YACnB9yE,EAAAwC,uBAAuBknF,oBAOvB,YANI7pF,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAAMxoE,EAAA6F,YAAY2gE,iBACtDppE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,WAEL1zE,EAAAwC,uBAAuB83E,WAK/B,KAAIp9E,KAAK+/G,uBAAT,CAIA,GACIxrC,EAAA+F,mBAAmBC,mCACjBz3E,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cAUzD,YARI9mE,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,YAEL7zE,EAAAoG,YAAY2tE,UACZ12E,KAAKq2G,gBAMb,IAAI/6B,EAAAqB,uBAAuBkU,gBAMvB,MALIluF,GAAAoG,YAAYgxD,aAAaqR,SAAW,IACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,eAET8E,GAAAqB,uBAAuBtjB,YAI3B,IAAIub,EAAAc,SAASomB,YAAW,GAAM,GAO1B,YANIn5F,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,cAAa,GAClBr2G,KAAKw2E,WAEL5B,EAAAc,SAAShgB,OAKjB,MACK9yD,EAAA6F,YAAYmH,UACZ5P,KAAKo+G,iBACLx7G,EAAA6F,YAAY2gE,kBACb5mE,EAAAgC,WAAWC,kBAAkByiG,yBAI7B,MAFAlnG,MAAKq2G,cAAa,OAClBr2G,MAAKw2E,SAWT,IARIx2E,KAAKq2G,eACAr2G,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,GAC1E/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAKzDpxF,EAAAoG,YAAYgxD,aAAaqR,SAAW,IAAMxoE,EAAA6F,YAAY2gE,gBAAiB,CACvE,GAAM42C,GAAephG,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,mBAC3DyyC,EAAex3F,WAAWhd,EAAA4L,YAAYjE,IAAI5G,EAAAoG,YAAYgxD,aAAaqR,SAAU40C,GACnFh+G,GAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcA,EACd6J,QAAQ,IAIhB,IAAKj+G,EAAAsC,UAAUA,UAAU47G,iBAIrB,MAHAlgH,MAAK8/G,eACL9/G,KAAKq2G,cAAa,OAClBr2G,MAAKw2E,SAIT,KAAKhQ,EAAAkD,eAAe2X,WAAU,GAAO,GAIjC,MAHAz+E,GAAA6F,YAAYmH,UAAW,EACvBnB,EAAAyB,cAAcwqE,oBACd16E,MAAKs2G,qBAIT1zG,GAAA6F,YAAY2rE,aAAc,EAC1B3lE,EAAAyB,cAAcwqE,gBACd16E,KAAK+4E,QAAQq+B,oBACY,MAArBp3G,KAAKq8I,cAAyBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAClF/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAE/CngF,EAAA6F,YAAYmH,YAEPhN,EAAA6F,YAAYs+D,iBACe,MAA5BpkE,EAAAoG,YAAYqhE,cACyB,MAArCznE,EAAAoG,YAAYqhE,aAAagB,UACzBzoE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAEpCxoE,EAAA6F,YAAY4pE,gBAAgB1vE,EAAAoG,YAAYqhE,aAAagB,UAEzDxoE,EAAA6F,YAAY4pE,kBACZryE,KAAK+4E,QAAQm+B,kBACThkB,EAAAU,YAAYM,mBACZ1xF,EAAAgC,WAAWC,kBAAkBkjE,sBAGrCjlE,EAAA0F,eAAewtF,iBAAiB,IAChClzF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK62G,mBAELj0G,EAAA6F,YAAY8iE,iBAAgB,GAC5B/E,EAAAkD,eAAeoX,eAEVl+E,EAAA6F,YAAY2gE,iBACZtmE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,eAExD7mE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAE3CjkE,KAAK80G,YAAYxhB,OAEjB5e,EAAAyD,YAAYjf,cAEZl5D,KAAKo+G,iBAAkB,EAEvBp8G,EAAAsC,UAAUA,UAAUovF,cAChBzX,SAAU1V,EAAAsD,WAAWK,IACrBypB,UAAW7wF,EAAAwC,uBAAuB6lE,MAClCxmE,WAAY/B,EAAA6F,YAAYupE,qBAAqBkhB,EAAAU,YAAYC,cAE7D7xF,EAAAsC,UAAUA,UAAU67G,cACpBn+G,EAAAsC,UAAUA,UAAU29E,gBAAiB1kD,OAAQ3e,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,uBAG7FkwC,uBAAA/yG,UAAA4U,KAAA,WACI1V,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAYggE,mBACZzoE,KAAK80G,YAAYp/F,QAGrBm+F,uBAAA/yG,UAAA69G,gBAAA,WACI3+G,KAAK0+G,eAAehpG,OAChB9S,EAAA6F,YAAYmH,SACZ5P,KAAK6/G,WAEL7/G,KAAKs2G,uBAIbzC,uBAAA/yG,UAAA++G,SAAA,WACI7/G,KAAKy+G,eAAe/oG,OAEhB1V,KAAK+/G,yBAIyB,MAA9Bn9G,EAAA6F,YAAY0+D,eACZvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAY0+D,eAAiBjxD,SAAStT,EAAA6F,YAAY0+D,eAAiB,GAAGj5D,WAClEgI,SAAStT,EAAA6F,YAAY0+D,gBAAkB,GACvCvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKs2G,0BAKjBzC,uBAAA/yG,UAAAg/G,aAAA,WACIl9G,EAAA6F,YAAYmH,UAAW,EAEvB5N,EAAAsC,UAAUA,UAAUw7G,eAEhB9/G,KAAKs+G,iBACD17G,EAAA6F,YAAY2gE,kBACZtmE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,aAChBrzG,EAAAwC,uBAAuBkkE,YACvB1mE,EAAAwC,uBAAuBghF,gBACvB73E,EAAAyB,cAAcuqE,gBAK1Bz6E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYM,oBAAoB,GAC/DxxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYM,oBAAoB,IAGvE2f,uBAAA/yG,UAAAo8E,UAAA,SAAUC,EAA2Bj/C,EAAsB1N,GAAjD,SAAA2sD,OAAA,GAA2B,SAAAj/C,OAAA,GAAsB,SAAA1N,OAAA,GAClD5tB,EAAA6F,YAAY2gE,iBAMbppE,KAAK80G,YAAYt+B,UACjB5zE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDrhE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,kBACvC9gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,iBACvC7gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,kBACvC+Q,EAAAyD,YAAYjf,gBAVZl5D,KAAKq+G,eAAiB,EACtBz7G,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,aAAc,KACrDjkE,KAAKq2G,eACLr2G,KAAKw2E,WASTjQ,EAAAsD,WAAWqT,UAAUC,EAAUj/C,EAAK1N,GACpCxwB,KAAKy/G,UAAUpoB,mBAEX9wB,EAAAsD,WAAWuU,QACXp+E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,GAC/Dp0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,IACvD5tB,EAAAsD,WAAWwU,QAClBr+E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,GAC9Dn0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,KAE/Dp0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYO,eAAe,GAC1DzxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYO,eAAe,GAC9Dn0F,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYQ,gBAAgB,GAC3D1xF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYQ,gBAAgB,IAEnEp0F,KAAKsgH,0BAGTzM,uBAAA/yG,UAAAw/G,uBAAA,WACItgH,KAAK80G,YAAYwL,0BAGrBzM,uBAAA/yG,UAAAy+G,qBAAA,WACQ9wG,EAAAyB,cAAc8nE,oBACdh4E,KAAK8/G,eAET9/G,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GAC3DtxF,EAAA0F,eAAeowF,oBAAoBtF,EAAAU,YAAYI,gBAAgB,IAGnE6f,uBAAA/yG,UAAAu+G,eAAA,WAOI,MANAr/G,MAAKs+G,iBAAkB,EACvBt8G,EAAAsC,UAAUA,UAAUi8G,YAEpB39G,EAAA6F,YAAY0pE,0BACZvvE,EAAA6F,YAAY+pE,yBAER5vE,EAAA6F,YAAY2gE,iBAAyD,IAAtCzmE,EAAAoG,YAAYqhE,aAAagB,WACxDtoE,EAAAwC,uBAAuB83E,WACvBp7E,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAE1D7gE,EAAAwC,uBAAuBkkE,YACvB1mE,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,gBAKtBz6E,KAAK4+G,oBAAoBlpG,OACzB1V,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAE3C38D,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,oBACdl1E,EAAAwC,uBAAuBswE,gBACvB51E,MAAK4/E,YAILh9E,EAAA6F,YAAYmH,UACsB,MAA9BhN,EAAA6F,YAAY0+D,gBACZvkE,EAAA6F,YAAYmH,UAAW,GAIW,IAAtCjN,EAAAoG,YAAYqhE,aAAagB,UACzBprE,KAAKo+G,iBAAkB,EACvBx7G,EAAA6F,YAAY2rE,aAAc,GAE1Bp0E,KAAKo+G,iBAAkB,EAG3B3vG,EAAAyB,cAAcovE,eACdt/E,KAAK+4E,QAAQm+B,kBAAkBhkB,EAAAU,YAAYI,gBAAgB,GACvDrxF,EAAAoG,YAAYqhE,aAAagB,SAAW,EACpCprE,KAAKy+G,eAAe9oG,MAAM,IAE1B3V,KAAKs2G,sBAGT5zG,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBAErCr0G,EAAA6F,YAAYmH,UAAkD,IAAtCjN,EAAAoG,YAAYqhE,aAAagB,UACjDprE,KAAK0+G,eAAe/oG,MAAM,IAG1B/S,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAC/DtoE,EAAAwC,uBAAuBkkE,cACvB/6D,GAAAyB,cAAcuqE,cAMlB33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eAEtD7mE,EAAA6F,YAAY2gE,iBACbzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GACI,IAAxCzoE,EAAAoG,YAAYqhE,aAAa2pB,YAEzB/zF,KAAK80G,YAAYn6B,uBACjB36E,MAAKw2E,gBAKT1zE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cACnD7mE,EAAA6F,YAAY2gE,iBACZzmE,EAAAoG,YAAY2tE,cAKxBm9B,uBAAA/yG,UAAAw0G,uBAAA,WASI,MARI1yG,GAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAU6xG,YAChB51G,GAAIoC,EAAAoG,YAAYgxD,aAAawQ,QAC7B+H,IAAK3vE,EAAAoG,YAAYgxD,aAAaqR,SAC9BgrC,aAAcx3F,WAAWhc,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASg7D,qBAI9Dl1D,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,uBACdp1E,GAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,eAI3CjkE,KAAKy+G,eAAe/oG,OAEpB9S,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,eAEnCrhE,EAAA6F,YAAY2gE,iBACVtmE,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,cAEzD7mE,EAAA6F,YAAY6hE,qBAEhB77D,EAAAyB,cAAcovE,eACd18E,EAAA6F,YAAY2rE,aAAc,EAC1Bp0E,KAAKs2G,sBAED1zG,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,IAC9D38D,EAAAyB,cAAcivE,iBACfr8E,EAAAwC,uBAAuB83E,WAEvBt6E,EAAAwC,uBAAuBkkE,eACvB/6D,GAAAyB,cAAcuqE,cALtB,SAWJo5B,uBAAA/yG,UAAA00G,gBAAA,WAOI,MANgC,OAA5B7yG,EAAAoG,YAAYqhE,cAAwBznE,EAAAoG,YAAYqhE,aAAa2pB,WAAa,IAAM/zF,KAAKo+G,iBACrFp8G,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYqhE,aAAa2pB,YAGrD/zF,KAAKo+G,iBAAkB,EAEnB3vG,EAAAyB,cAAckqE,mBACdp6E,MAAK4/E,UAILnxE,EAAAyB,cAAc8nE,uBACdvpE,GAAAyB,cAAcuvE,mBAIlBz/E,KAAKy+G,eAAe/oG,OACpB1V,KAAKs2G,sBACL7nG,EAAAyB,cAAcovE,eACV18E,EAAA6F,YAAYmH,UAAY5P,KAAK+4E,QAAQy9B,eAAetjB,EAAAU,YAAYM,qBAChEl0F,KAAK6/G,WAGLj9G,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GAC/DtoE,EAAAwC,uBAAuBkkE,WACvBxpE,KAAK80G,YAAYn6B,mBACjB73E,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,eAKlB33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eACtD7mE,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYqhE,aAAagB,SAAW,GACpEprE,KAAK80G,YAAYn6B,uBACjB36E,MAAKw2E,WAHb,SASJq9B,uBAAA/yG,UAAAo+E,UAAA,WAWI,MAVA/7E,GAAArC,UAAMo+E,UAASz+E,KAAAT,MACfA,KAAK80G,YAAY51B,YACS,MAAtBl/E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAG3CrD,EAAAyB,cAAc8nE,uBACdvpE,GAAAyB,cAAcuvE,mBAIlBz/E,KAAKs2G,sBACL7nG,EAAAyB,cAAcovE,eACdt/E,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAE3CtoE,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,kBACvD7mE,EAAA6F,YAAY2gE,kBACZtmE,EAAAwC,uBAAuBghF,gBACvB73E,EAAAyB,cAAcuqE,gBAHtB,SASJo5B,uBAAA/yG,UAAAk/E,MAAA,SAAMD,GAAN,GAAAvmE,GAAAxZ,IAAM,UAAA+/E,OAAA,GACF//E,KAAKo+G,iBAAkB,EAGvBp+G,KAAKq+G,eAAiB17G,EAAAoG,YAAYgxD,aAAaqR,SAG/CprE,KAAKu+G,UAAYx+B,EAEbn9E,EAAA6F,YAAY2gE,kBACZxmE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS+6D,kBACvC9gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAAS86D,iBACvC7gE,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASg7D,kBAEvC/gE,EAAA6F,YAAY2rE,aAAc,GAG9Bp0E,KAAK80G,YAAY90B,MAAMD,GACG,MAAtB//E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG/C,IAAI2uG,GAAgB,IACf1gC,KACD0gC,EAAQ,IAGZnrG,WAAW,WACmB,MAAtBkE,EAAKslG,eAAyBtlG,EAAKslG,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnFvpE,EAAKslG,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAIrB,MAA9BvpE,EAAKgmG,uBACLhmG,EAAKgmG,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7DvpE,EAAKgmG,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,gBAEhE09B,IAGP5M,uBAAA/yG,UAAA4lG,cAAA,WAuBI,MAtBI9jG,GAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAU6xG,aAEnB5hC,EAAA+F,mBAAmBkH,SACpB5+E,EAAA6F,YAAYmH,SAAWhN,EAAA6F,YAAY4rE,qBAGvC5lE,EAAAyB,cAAcovE,eACdt/E,KAAKs2G,sBACD1zG,EAAA6F,YAAYmH,UACZ5P,KAAK6/G,WAIL7/G,KAAKu+G,WACL37G,EAAA6F,YAAY2gE,kBACkB,MAA7BtmE,EAAAwC,uBAAuB/E,IAAcuC,EAAAwC,uBAAuB89E,aAAal3E,OAAS,KAEnFpJ,EAAAwC,uBAAuB83E,WACvBp9E,KAAKu+G,WAAY,GAGjBz7G,EAAAwC,uBAAuBkkE,WAAa5mE,EAAA6F,YAAY2gE,iBAChDtmE,EAAAwC,uBAAuBghF,oBACvB73E,GAAAyB,cAAcuqE,oBAKd33E,EAAAwC,uBAAuBkkE,WAAqD,eAAxC1mE,EAAAwC,uBAAuBmkE,eACtD7mE,EAAA6F,YAAY2gE,iBAAmBzmE,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpE38D,EAAAyB,cAAcsmE,QAAQvmE,EAAYioE,QAK9C27B,uBAAA/yG,UAAAm/E,MAAA,WACSjgF,KAAKo+G,iBAC0B,MAA5Bz7G,EAAAoG,YAAYgxD,cAAwBp3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACxEppE,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYgxD,aAAaqR,UAIzDprE,KAAKy+G,eAAe/oG,OACpB1V,KAAK0+G,eAAehpG,OACpB9S,EAAA6F,YAAY4rE,oBAAsBzxE,EAAA6F,YAAYmH,SAC9ChN,EAAA6F,YAAYmH,UAAW,EACG,MAAtB5P,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAGhDt0E,EAAAyB,cAAc+nE,oBACdr1E,EAAA6F,YAAY4rE,qBAAsB,EAEA,MAA9Br0E,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIhE/iF,KAAK80G,YAAY70B,SAGrB4zB,uBAAA/yG,UAAA+kG,cAAA,WACQp3F,EAAAyB,cAAc+nE,mBACY,MAAtBj4E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,QAG/CrD,EAAAyB,cAAc4vE,YAAY7vE,EAAY+pE,YAEtCvrE,EAAAyB,cAAc4vE,YAAY7vE,EAAYwmE,SAI9Co9B,uBAAA/yG,UAAAw1G,oBAAA,WAGI,GAFAt2G,KAAKy+G,eAAe/oG,SAEhB1V,KAAK0gH,0BAILnsC,EAAA+F,mBAAmBkH,SAIvBlG,EAAAqB,uBAAuBtjB,aACvBub,EAAAc,SAASC,aAAY,GAEjB2F,EAAAqB,uBAAuBkU,iBAAmB9K,EAAAM,qBAAqBmE,iBAAnE,CAII5nF,EAAA6F,YAAY8gE,WACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAEAxmG,EAAA6F,YAAYmH,WACb5P,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6nE,EAAAU,YAAYK,iBACRrxF,EAAA6F,YAAY2gE,iBACRtmE,EAAAwC,uBAAuB6lE,OACoB,eAAxCroE,EAAAwC,uBAAuBmkE,eACtB3mE,EAAAwC,uBAAuBkkE,YAChChnE,EAAAgC,WAAWC,kBAAkBkjE,oBACjCt8C,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,qBACTzxF,EAAAwC,uBAAuB6lE,OAAiD,eAAxCroE,EAAAwC,uBAAuBmkE,gBAEhD7mE,EAAA6F,YAAY2gE,gBACvB/9C,EAAC6nE,EAAAU,YAAYS,iBAAkB5lF,EAAAyB,cAAcivE,gBAC7C9zD,EAAC6nE,EAAAU,YAAYO,gBAAiB5tB,EAAAsD,WAAWwU,OACzChzD,EAAC6nE,EAAAU,YAAYQ,iBAAkB7tB,EAAAsD,WAAWuU,OAC1C/yD,EAAC6nE,EAAAU,YAAYC,aAAc/wF,EAAAwC,uBAAuBkkE,UAClDn+C,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpHm2kC7B3oE,IoHj2kCoB,MAArBrrB,KAAKq8I,eACA5tI,EAAAyB,cAAcivE,gBAKVn/E,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACrD/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAL/C/iF,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpD/iF,KAAKq8I,aAAa/yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAQtDjgF,EAAAwC,uBAAuB6lE,QAClBnrE,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACrD/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,iBAKvDngF,EAAA6F,YAAY2gE,iBACZpnE,EAAAsC,UAAUA,UAAUs8G,aAKhCl+G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,gBpHk2kCxC,IAAI5rF,KoH/1kCDwoF,uBAAA/yG,UAAA4/G,uBAAR,WACI,GAAI99G,EAAA6F,YAAY2gE,iBAAmB/1D,EAAAwD,QAAQgjD,gBAAkB/2D,EAAAwC,uBAAuB6lE,MAAO,CACvF,GAAI93D,EAAAwD,QAAQ+iD,sBAAwB55D,KAAKo+G,gBAOrC,MANAx7G,GAAA6F,YAAYmH,UAAW,EACvB5P,KAAK26E,mBACL36E,KAAK4/E,UACL98E,EAAAwC,uBAAuBswE,YACvBviE,EAAAwD,QAAQ4iD,iBAED,CAEP,IAAMonD,GAAO7gH,IAkBb,IAfIA,KAAKo+G,iBACL/qG,EAAAwD,QAAQ0iD,cAAa,EAAM,WACvBsnD,EAAKlmC,mBACLkmC,EAAKjhC,UACLh9E,EAAA6F,YAAYmH,UAAW,EACvB9M,EAAAwC,uBAAuBswE,cAK3BhzE,EAAA6F,YAAY8gE,YACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAGL/1F,EAAAwD,QAAQsjD,gCAWR,MATAn6D,MAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBAEhB,MAArBj3G,KAAKq8I,cACJr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAErD/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAG5C,EAKnB,OAAO,GAGH8wB,uBAAA/yG,UAAAi/G,qBAAR,WACI,SAAK1sG,EAAAwD,QAAQgjD,eAAiB/2D,EAAAwC,uBAAuB6lE,SAIjD93D,EAAAwD,QAAQ+iD,sBAAwBvmD,EAAAwD,QAAQsjD,iCACpCx3D,EAAAoG,YAAYgxD,aAAaqR,SAAW,GACpCprE,KAAKq2G,eACLr2G,KAAKo+G,iBAAkB,EAElBx7G,EAAA6F,YAAY2gE,iBAIbppE,KAAK62G,mBACLj0G,EAAA6F,YAAY6hE,qBACZtqE,KAAKs2G,uBALLt2G,KAAKw2E,WAQTx2E,KAAKs2G,uBAGF,IAEPjjG,EAAAwD,QAAQ0iD,cAAa,EAAO,MAC5BlmD,EAAAwD,QAAQojD,4BAED,KAIf45C,uBAAA/yG,UAAAsoG,MAAA,WACI10B,EAAAyD,YAAY9e,aAERz2D,EAAA6F,YAAY2gE,iBACZppE,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAAC6nE,EAAAU,YAAYK,gBAAiBzxF,EAAAgC,WAAWC,kBAAkBkjE,oBAC3Dt8C,EAAC6nE,EAAAU,YAAYM,qBAAqB,EAClC7oE,EAAC6nE,EAAAU,YAAYW,oBAAoB,EACjClpE,EAAC6nE,EAAAU,YAAYS,iBAAiB,EAC9BhpE,EAAC6nE,EAAAU,YAAYO,gBAAiB5tB,EAAAsD,WAAWwU,OACzChzD,EAAC6nE,EAAAU,YAAYQ,iBAAkB7tB,EAAAsD,WAAWuU,OAC1C/yD,EAAC6nE,EAAAU,YAAYC,aAAa,EAC1BxoE,EAAC6nE,EAAAU,YAAYI,iBAAiB,EpHm1kC7B3oE,IoHj1kCoB,MAArBrrB,KAAKq8I,cAAwBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACjF/iF,KAAKq8I,aAAa/yI,UAAU6N,OAAOzU,EAAA0F,eAAe26E,iBAGtD/iF,KAAK+4E,QAAQi+B,oBAAmB8J,KAC5BA,EAAC5tB,EAAAU,YAAYK,iBAAiB,EAC9B6sB,EAAC5tB,EAAAU,YAAYM,qBAAqB,EAClC4sB,EAAC5tB,EAAAU,YAAYW,oBAAoB,EACjCusB,EAAC5tB,EAAAU,YAAYS,iBAAiB,EAC9BysB,EAAC5tB,EAAAU,YAAYO,gBAAgB,EAC7B2sB,EAAC5tB,EAAAU,YAAYQ,iBAAiB,EAC9B0sB,EAAC5tB,EAAAU,YAAYC,aAAa,EAC1BitB,EAAC5tB,EAAAU,YAAYI,iBAAiB,EpHq1kC7B8sB,IoHn1kCoB,MAArB9gH,KAAKq8I,cAAyBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAClF/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,epHw1kCtD,IAAI13D,GAAIy1F,GoHn1kCbjN,uBAAA/yG,UAAA8+E,QAAA,WACI5/E,KAAKy+G,eAAe/oG,OACpB1V,KAAK+4E,QAAQq+B,oBACbpxB,EAAAE,mBAAmB4G,oBACnBpqF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBAEpCxoG,EAAAyB,cAAc8nE,oBACfh4E,KAAK80G,YAAYr6B,cAGI,MAArBz6E,KAAKq8I,cAAyBr8I,KAAKq8I,aAAa/yI,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAClF/iF,KAAKq8I,aAAa/yI,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIvD8wB,uBAAA/yG,UAAA65E,iBAAA,WACI36E,KAAK80G,YAAYn6B,oBA3hCzBk5B,uBAAAj4F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cpHi3mCxB+pF,yBoHh3mCoCI,EAAAoD,aAA/Bh3G,GAAAwzG,uBAAsBA,GpHw3mC7B,SAASvzG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GqHl6mCjEna,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzCiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B8zG,EAAA9zG,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzB89G,EAAA99G,EAA4B,IAC5BqC,EAAArC,EAA2B,GAC3BsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5Bu0E,EAAAv0E,EAA4B,IAC5Bm8I,EAAAn8I,EAAoC,KACpCo8I,EAAAp8I,EAAiC,KACjCgiF,EAAAhiF,EAAyB,IACzB2C,EAAA3C,EAAuC,IAInC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YACjC0jH,EAAU3xH,EAAAkD,cAAcC,KAAKwuH,QAGjC5f,EAAA,SAAA5wG,GAAkD5B,EAAAwyG,6BAAA5wG,EAe9C,SAAA4wG,gCACI5wG,EAAA1C,KAAAT,KAAM,aAPFA,KAAAo+G,iBAA2B,EAG3Bp+G,KAAAw8I,mBAA6B,EA4oBzC,MAroBIzoC,8BAAAjzG,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK40G,kBAEL50G,KAAKy+G,eAAiBrrG,EAAAa,iBAAiB,iBACvCjU,KAAKy+G,eAAevqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKs2G,oBAAoBjiG,KAAKrU,OAEhFA,KAAK0+G,eAAiBtrG,EAAAa,iBAAiB,iBACvCjU,KAAK0+G,eAAexqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK2+G,gBAAgBtqG,KAAKrU,OAE5EA,KAAKy8I,gBAAkBrpI,EAAAa,iBAAiB,kBACxCjU,KAAKy8I,gBAAgBvoI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK08I,iBAAiBroI,KAAKrU,OAE9EA,KAAK8+G,cAAgB31G,SAASC,eAAe,yBAE7CpJ,KAAK28I,qBAAuBvpI,EAAAa,iBAAiB,uBAC7CjU,KAAK28I,qBAAqBzoI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK48I,sBAAsBvoI,KAAKrU,OAExFA,KAAK68I,sBAAwBzpI,EAAAa,iBAAiB,wBAC9CjU,KAAK68I,sBAAsB3oI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK88I,uBAAuBzoI,KAAKrU,QAG9F+zG,6BAAAjzG,UAAAm+E,cAAA,SAAckU,GACVnzF,KAAK80G,YAAc3hB,EACnBnzF,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB/nC,cAAeh1G,KAAKyjG,cAAcpvF,KAAKrU,OAC/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB59B,aAAcn/G,KAAKyzF,aAAap/E,KAAKrU,OAC7EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBC,YAAah9I,KAAK4jG,YAAYvvF,KAAKrU,OAC3EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB39B,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OACjFA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB1nC,uBAAwBr1G,KAAKs1G,uBAAuBjhG,KAAKrU,OACjGA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBxnC,gBAAiBv1G,KAAKw1G,gBAAgBnhG,KAAKrU,OACnFA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBpnC,cAAe31G,KAAK0mG,cAAcryF,KAAKrU,OAC/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBnnC,cAAe51G,KAAK6lG,cAAcxxF,KAAKrU,OAE/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBz9B,qBAAsBt/G,KAAKu/G,qBAAqBlrG,KAAKrU,QAGjG+zG,6BAAAjzG,UAAA8zG,gBAAA,WACI50G,KAAK+4E,QAAQ67B,iBAAgBvpF,KACzBA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBAAiB,EACnC5oE,EAACkxH,EAAAU,iBAAiB/oD,qBAAqB,EACvC7oE,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ErH04mClC3oE,GAEJ,IAAIA,IqHx4mCT0oF,6BAAAjzG,UAAAu1E,aAAA,WACIr2E,KAAKw/G,sBAAwBr2G,SAASC,eAAe,wBAErDjG,EAAArC,UAAMu1E,aAAY51E,KAAAT,MAElBA,KAAK80G,YAAYz+B,eAES,MAAtBr2E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAEb,MAAtB9R,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIxDgxB,6BAAAjzG,UAAAs3E,iBAAA,WACIp4E,KAAKs2G,uBAGTvC,6BAAAjzG,UAAA2iG,cAAA,WACIh1F,EAAAyB,cAAcsvE,YAAYvvE,EAAYioE,OAG1C67B,6BAAAjzG,UAAA2yF,aAAA,WACQ7wF,EAAA6F,YAAYo/D,oBAEZ7nE,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChC51F,KAAK80G,YAAYp/F,SAEjB1V,KAAK+4E,QAAQm+B,kBACTqlC,EAAAU,iBAAiBjpD,eACjBxxF,EAAAgC,WAAWC,kBAAkBujE,qBAEjCtlE,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAIjDlD,6BAAAjzG,UAAA8iG,YAAA,WACIn1F,EAAAyB,cAAcsvE,YAAYvvE,EAAY+pE,YAG1C+5B,6BAAAjzG,UAAAq4D,eAAA,SAAe+mB,GACX,GAAIA,IAAW+9B,EAAA0B,YAAYC,iBACvB,GAAI5/G,KAAK+4E,QAAQy9B,eAAe+lC,EAAAU,iBAAiBC,aAC7Ch9D,EAASq8D,EAAAU,iBAAiBC,gBACvB,IAAIl9I,KAAK+4E,QAAQy9B,eAAe+lC,EAAAU,iBAAiBE,YACpDj9D,EAASq8D,EAAAU,iBAAiBE,eACvB,IAAIn9I,KAAK+4E,QAAQy9B,eAAe+lC,EAAAU,iBAAiBppD,YACpD3T,EAASq8D,EAAAU,iBAAiBppD,eACvB,KAAI7zF,KAAK+4E,QAAQy9B,eAAe+lC,EAAAU,iBAAiBjpD,gBAGpD,MAFA9T,GAASq8D,EAAAU,iBAAiBjpD,eAMlC,GAAIh0F,KAAK+4E,QAAQy9B,eAAet2B,GAI5B,OAHAiC,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEbA,GACJ,IAAKq8D,GAAAU,iBAAiBC,YAClBl9I,KAAK2V,OACL,MACJ,KAAK4mI,GAAAU,iBAAiBE,WAClBn9I,KAAKo9I,MACL,MACJ,KAAKb,GAAAU,iBAAiBppD,WAClB7zF,KAAKszF,MACL,MACJ,KAAKipD,GAAAU,iBAAiBjpD,eAClBh0F,KAAK0V,MACL,MACJ,KAAK6mI,GAAAU,iBAAiBhpD,eAClBj0F,KAAK6/G,UACL,MACJ,KAAK08B,GAAAU,iBAAiB/oD,mBAClBl0F,KAAK8/G,iBAMrB/L,6BAAAjzG,UAAA6U,MAAA,WACI3V,KAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK80G,YAAYn/F,SAGrBo+F,6BAAAjzG,UAAAwyF,KAAA,WACStzF,KAAKo+G,iBAC+B,MAAjCz7G,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,GACpF/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB6Z,YAI9DnxF,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,6BACRriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAiB,GAAGt5E,YAGjElO,KAAK+4E,QAAQq+B,oBACTx0G,EAAA6F,YAAYmH,UACZ5P,KAAK+4E,QAAQm+B,kBACTqlC,EAAAU,iBAAiB/oD,mBACjB1xF,EAAAgC,WAAWC,kBAAkBkjE,qBAGrCjlE,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cACvCvhE,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK80G,YAAYxhB,OAEjBtxF,EAAAsC,UAAUA,UAAU67G,eAGxBpM,6BAAAjzG,UAAAs8I,KAAA,WACIp9I,KAAK28I,qBAAqBjnI,OAC1B1V,KAAK68I,sBAAsBnnI,OAEtB1V,KAAKw8I,mBACN/tI,EAAAyB,cAAckwE,yBAAwB,GAG1CpgF,KAAK4/E,UACLnxE,EAAAyB,cAAcyvE,gBAGlBo0B,6BAAAjzG,UAAA4U,KAAA,WACI1V,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAYggE,mBACZzoE,KAAK80G,YAAYp/F,QAGrBq+F,6BAAAjzG,UAAAm9B,IAAA,WACyC,MAAjCt7B,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB9O,SAAW,GAClFppE,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB9O,UAAU,GAGpEprE,KAAK80G,YAAY72E,OAGrB81E,6BAAAjzG,UAAA69G,gBAAA,WACI3+G,KAAK0+G,eAAehpG,OAChB9S,EAAA6F,YAAYmH,SACZ5P,KAAK6/G,YAEL7/G,KAAKs2G,sBACLt2G,KAAKq9I,yBAIbtpC,6BAAAjzG,UAAA++G,SAAA,WACI7/G,KAAKy+G,eAAe/oG,OAEc,MAA9B9S,EAAA6F,YAAY0+D,eACZvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAY0+D,eAAiBjxD,SAAStT,EAAA6F,YAAY0+D,eAAiB,GAAGj5D,WAClEgI,SAAStT,EAAA6F,YAAY0+D,gBAAkB,GACvCvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKs2G,yBAKjBvC,6BAAAjzG,UAAAg/G,aAAA,WACIl9G,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiB/oD,oBAAoB,GACpExxF,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiB/oD,oBAAoB,IAG5E6f,6BAAAjzG,UAAAy+G,qBAAA,WACQ9wG,EAAAyB,cAAc8nE,oBACdh4E,KAAK8/G,eAET9/G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBjpD,gBAAgB,IAGxE+f,6BAAAjzG,UAAAu+G,eAAA,WASI,MARAr9G,GAAAsC,UAAUA,UAAUi8G,YAE6B,IAA7C59G,EAAAoG,YAAYmxE,kBAAkB6Z,WAC9B/zF,KAAKo+G,iBAAkB,EAEvBp+G,KAAKo+G,iBAAkB,EAGvBp+G,KAAK62I,aACL72I,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,OAChEtxF,GAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBjpD,gBAAgB,IAIpEh0F,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACoC,IAA7Cz0G,EAAAoG,YAAYmxE,kBAAkB6Z,aACgB,MAA1CpxF,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBACvC7kE,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,GAE5Dn9I,KAAKs9I,2BAET56I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAI7Cj3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAE5DrxF,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,EAC3C/zF,KAAKy+G,eAAe9oG,MAAM,IAE1B3V,KAAKs2G,sBAGT5zG,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,sBAEQ,IAA7Ct0G,EAAAoG,YAAYmxE,kBAAkB6Z,aAC1BnxF,EAAA6F,YAAYmH,SACZ5P,KAAK0+G,eAAe/oG,MAAM,IAE1B3V,KAAKq9I,2BAKjBtpC,6BAAAjzG,UAAAy8I,gBAAA,WACIv9I,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAG7ClD,6BAAAjzG,UAAAw0G,uBAAA,WAaI,GAZAt1G,KAAKy+G,eAAe/oG,OAEpB9S,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAEO,MAA1CthE,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,uBAEnC7kE,KAAK62I,YAIT,MAAI72I,MAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,wBACb10G,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,sBAI7Cj3G,MAAKs2G,uBAGTvC,6BAAAjzG,UAAA00G,gBAAA,WAWI,MATqC,OAAjC7yG,EAAAoG,YAAYmxE,mBACZv3E,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,IAC1C/zF,KAAKo+G,iBAENp8G,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB6Z,YAG1D/zF,KAAKo+G,iBAAkB,EAEnBp+G,KAAK62I,WAAU,OACf72I,MAAKy8I,gBAAgB9mI,MAAM,KAI/B3V,KAAKy+G,eAAe/oG,OAEhB1V,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,GAC5Dz6I,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,qBAEzCj3G,MAAKs9I,wBAKTt9I,KAAKs2G,2BACD1zG,EAAA6F,YAAYmH,SACZ5P,KAAK6/G,WAEL7/G,KAAKq9I,2BAIbtpC,6BAAAjzG,UAAA47I,iBAAA,WAGI,MAFA18I,MAAKy+G,eAAe/oG,OAEhB1V,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,OAC5Dz6I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAI7Cj3G,KAAKs2G,2BACD1zG,EAAA6F,YAAYmH,UACZ5P,KAAK0+G,eAAe/oG,MAAM,OAIlCo+F,6BAAAjzG,UAAAo+E,UAAA,WA2CI,MA1CAp8E,GAAAwC,uBAAuBswE,YACvBhzE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAG3DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAEO,MAA1CthE,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBAEb,MAAtB7kE,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAEL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAGrB,MAAtB9R,KAAK8+G,eAAyB9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnF/iF,KAAK8+G,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAGrB,MAA9B/iF,KAAKw/G,uBACLx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7D/iF,KAAKw/G,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAE7B,MAA9B/iF,KAAKw/G,uBAAkCx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS,cACrFvX,KAAKw/G,sBAAsBl2G,UAAUC,IAAI;AAG7CvJ,KAAK62I,WAAU,GAEf1zI,EAAArC,UAAMo+E,UAASz+E,KAAAT,MACfA,KAAK80G,YAAY51B,YACjBl9E,EAAAsC,UAAUA,UAAU8mF,aAAcr3D,KAAM/xB,EAAAkD,cAAcC,KAAK8K,YAAY+pE,YAEnEh6E,KAAKo8I,kBACLp8I,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,GAC5Dz6I,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,qBAEzCj3G,MAAKs9I,wBAITt9I,KAAKs2G,0BAELt2G,MAAKq9I,yBAGTtpC,6BAAAjzG,UAAAk/E,MAAA,SAAMD,GAAN,GAAAvmE,GAAAxZ,IAAM,UAAA+/E,OAAA,GACFj9E,EAAAwC,uBAAuBswE,YACvBhzE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAG3DlO,KAAK80G,YAAY90B,MAAMD,GAEG,MAAtB//E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAG/CwD,WAAW,WACmB,MAAtBkE,EAAKslG,eAAyBtlG,EAAKslG,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnFvpE,EAAKslG,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAIrB,MAA9BvpE,EAAKgmG,uBACLhmG,EAAKgmG,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7DvpE,EAAKgmG,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,gBAEhE,MAGPgxB,6BAAAjzG,UAAA4lG,cAAA,WACI1mG,KAAKs2G,sBACLt2G,KAAKq9I,wBAGTtpC,6BAAAjzG,UAAAm/E,MAAA,WACIr9E,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKw8I,mBAAoB,EAEzBx8I,KAAK80G,YAAY70B,QAES,MAAtBjgF,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAIlB,MAA9B/iF,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIhEgxB,6BAAAjzG,UAAA+kG,cAAA,WACIp3F,EAAAyB,cAAc4vE,YAAY7vE,EAAYioE,MAAM,GAClB,MAAtBl4E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAEL,MAA9B9R,KAAKw/G,uBAAiCx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS,cACpFvX,KAAKw/G,sBAAsBl2G,UAAU6N,OAAO,cAIpD48F,6BAAAjzG,UAAAw1G,oBAAA,WACIt2G,KAAKy+G,eAAe/oG,OAE0B,MAA1C/S,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBAEnCjiE,EAAA6F,YAAY8gE,WACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAEAxmG,EAAA6F,YAAYmH,UACb5P,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBACbrxF,EAAA6F,YAAYmH,UAAYpN,EAAAgC,WAAWC,kBAAkBkjE,oBAC1Dt8C,EAACkxH,EAAAU,iBAAiB/oD,oBACdtxF,EAAA6F,YAAYmH,UAAYpN,EAAAgC,WAAWC,kBAAkBkjE,oBACzDt8C,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ErHqymClC3oE,IqHhymCb3oB,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,gBrHqymCxC,IAAI5rF,IqHlymCT0oF,6BAAAjzG,UAAAsoG,MAAA,WACI10B,EAAAyD,YAAY9e,aAEZr5D,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBAAiB,EACnC5oE,EAACkxH,EAAAU,iBAAiB/oD,qBAAqB,EACvC7oE,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ErHoymClC3oE,GAEJ,IAAIA,IqHlymCT0oF,6BAAAjzG,UAAA0lB,OAAA,WACI5jB,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAE3DtL,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASo8D,mBACTpiE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUyG,WAAWtvI,YAEvDlO,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBC,aAAa,GAC7Dx6I,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBC,aAAa,GACjEl9I,KAAK80G,YAAYtuF,UAGrButF,6BAAAjzG,UAAA8+E,QAAA,WACI5/E,KAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAGrClD,6BAAAjzG,UAAA+1I,UAAR,SAAkB/mD,GAAA,SAAAA,OAAA,EACd,IAAIgnD,IAAwB,CAE5B,IAA0C,MAAtCn0I,EAAAoG,YAAYmxE,kBAAkBiqC,MAAgBxhH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAS,EAC1F,IAAK,GAAInM,GAAY,EAAGA,EAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAQnM,IACnE,GAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAGg0B,OAAS4/F,EAAQojB,UAAW,CAC9DjnD,GACAltF,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,WAG/D,IAAIyL,GAAgBhX,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAG+3D,WAAkB,KAC/D,OAATn+C,IACA/W,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASo8D,mBAAoBprD,EAAMzL,YACjEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs8D,sBAAuBtrD,EAAMzL,aAExE4oI,GAAe,EAK3B,MAAOA,KAAiB92I,KAAKo8I,kBAGzBroC,6BAAAjzG,UAAAs7I,eAAR,WACI,MAAIx5I,GAAA6F,YAAY8gE,WACZvpE,KAAKopG,SACE,GAIoC,MAA3CzmG,EAAAoG,YAAYmxE,kBAAkB68D,WAC4B,MAA1Dp0I,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBACmB,IAA3D7kF,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBAOxCusB,6BAAAjzG,UAAA87I,sBAAR,WACI58I,KAAK28I,qBAAqBjnI,OAC1B1V,KAAKw8I,mBAAoB,EACzBx8I,KAAKm5D,eAAeojF,EAAAU,iBAAiBE,aAUjCppC,6BAAAjzG,UAAAg8I,uBAAR,WACI98I,KAAK68I,sBAAsBnnI,OAC3B1V,KAAKm5D,eAAeojF,EAAAU,iBAAiBhpD,iBAY/B8f,6BAAAjzG,UAAAw8I,oBAAV,SAA8Bv8B,GAAA,SAAAA,MAAA,GAC0B,MAAhDv+G,EAAAgC,WAAWC,kBAAkBu8G,iBAA2Bx+G,EAAAgC,WAAWC,kBAAkBu8G,gBAAkB,GACvGhhH,KAAK28I,qBAAqBhnI,MAAMorG,EAAcv+G,EAAAgC,WAAWC,kBAAkBu8G,kBAQzEjN,6BAAAjzG,UAAAu8I,qBAAV,WACwD,MAAhD76I,EAAAgC,WAAWC,kBAAkBu8G,iBAA2Bx+G,EAAAgC,WAAWC,kBAAkBu8G,gBAAkB,GACvGhhH,KAAK68I,sBAAsBlnI,MAAMnT,EAAAgC,WAAWC,kBAAkBu8G,kBAtpB1EjN,6BAAAn4F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,crH25nCxBiqF,+BqH15nC0CE,EAAAoD,aAArCh3G,GAAA0zG,6BAA4BA,GrHk6nCnC,SAASzzG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsHt8nCjEna,EAAAzB,EAAgC,GAChCw7G,EAAAx7G,EAA2B,IAC3Bic,EAAAjc,EAA+B,IAC/BohH,EAAAphH,EAA8B,KAC9B20E,EAAA30E,EAA+B,IAG/B48I,EAAA,SAAA55I,GAAyC5B,EAAAw7I,oBAAA55I,EAerC,SAAA45I,uBACI55I,EAAA1C,KAAAT,MAkGR,MA/FI+8I,qBAAAj8I,UAAA2xG,oBAAA,SAAoB7hG,GAKZA,YAAgB2wG,GAAAgD,gBAChBvkH,KAAK+7G,MAAQnrG,GAOjB5Q,KAAKg8G,OAAS,GAAIlnC,GAAAmF,eAAej6E,OAGrC+8I,oBAAAj8I,UAAAu1E,aAAA,WACIr2E,KAAK+7G,MAAM1lC,aAAar2E,OAG5B+8I,oBAAAj8I,UAAAqgH,YAAA,WACInhH,KAAK+7G,MAAMoF,eAGf47B,oBAAAj8I,UAAAo+E,UAAA,WACIl/E,KAAK+7G,MAAM78B,aAGf69D,oBAAAj8I,UAAA6U,MAAA,WACI3V,KAAKg8G,OAAOrmG,SAGhBonI,oBAAAj8I,UAAAwyF,KAAA,WACItzF,KAAKg8G,OAAO1oB,OACZtzF,KAAK+7G,MAAMzoB,QAGfypD,oBAAAj8I,UAAAm9B,IAAA,WACIj+B,KAAKg8G,OAAO/9E,OAGhB8+G,oBAAAj8I,UAAA4U,KAAA,WACI1V,KAAK+7G,MAAMrmG,QAGfqnI,oBAAAj8I,UAAA2iG,cAAA,WACIzjG,KAAK+7G,MAAMtY,gBACXzjG,KAAKyX,KAAKslI,oBAAoB/nC,gBAGlC+nC,oBAAAj8I,UAAA2yF,aAAA,WACIzzF,KAAK+7G,MAAMtoB,eACXzzF,KAAKyX,KAAKslI,oBAAoB59B,eAGlC49B,oBAAAj8I,UAAA8iG,YAAA,WACI5jG,KAAK+7G,MAAMnY,cACX5jG,KAAKyX,KAAKslI,oBAAoBC,cAGlCD,oBAAAj8I,UAAAy+G,qBAAA,WACIv/G,KAAKyX,KAAKslI,oBAAoBz9B,uBAGlCy9B,oBAAAj8I,UAAAu+G,eAAA,WACIr/G,KAAKyX,KAAKslI,oBAAoB39B,iBAGlC29B,oBAAAj8I,UAAAw0G,uBAAA,WACIt1G,KAAKyX,KAAKslI,oBAAoB1nC,yBAGlC0nC,oBAAAj8I,UAAA00G,gBAAA,WACIx1G,KAAKyX,KAAKslI,oBAAoBxnC,kBAGlCwnC,oBAAAj8I,UAAAk/E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF//E,KAAK+7G,MAAM/7B,MAAMD,IAGrBg9D,oBAAAj8I,UAAA4lG,cAAA,WACI1mG,KAAKyX,KAAKslI,oBAAoBpnC,gBAGlConC,oBAAAj8I,UAAAm/E,MAAA,WACIjgF,KAAK+7G,MAAM97B,SAGf88D,oBAAAj8I,UAAA+kG,cAAA,WACI7lG,KAAKyX,KAAKslI,oBAAoBnnC,gBAGlCmnC,oBAAAj8I,UAAA0lB,OAAA,WACIxmB,KAAK+7G,MAAMv1F,UA/GQu2H,oBAAA/nC,cAAwB,qBACxB+nC,oBAAA59B,aAAuB,oBACvB49B,oBAAAC,YAAsB,mBACtBD,oBAAA39B,eAAyB,sBACzB29B,oBAAA1nC,uBAAiC,8BACjC0nC,oBAAAxnC,gBAA0B,uBAC1BwnC,oBAAApnC,cAAwB,qBACxBonC,oBAAAnnC,cAAwB,qBAExBmnC,oBAAAz9B,qBAA+B,4BAX1Dy9B,oBAAAnhI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAewD,atHmioCxB4yH,sBsHlioCiCphC,EAAAxxF,WAA5B9pB,GAAA08I,oBAAmBA,GtH0ioC1B,SAASz8I,EAAQD,GAEtB,YuHnjoCD,IAAA48I,GAAA,mBAAAA,qBAOA,MANWA,kBAAAC,YAAsB,iBACtBD,iBAAAE,WAAqB,wBACrBF,iBAAAppD,WAAqB,gBACrBopD,iBAAAjpD,eAAyB,qBACzBipD,iBAAAhpD,eAAyB,oBACzBgpD,iBAAA/oD,mBAA6B,yBACxC+oD,mBAPa58I,GAAA48I,iBAAgBA,GvHokoCvB,SAAS38I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwHhloCjEna,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzCiT,EAAAjT,EAA2E,GAC3Eic,EAAAjc,EAA+B,IAC/B8zG,EAAA9zG,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IAEzBqC,EAAArC,EAA2B,GAC3BsO,EAAAtO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5Bu0E,EAAAv0E,EAA4B,IAC5Bm8I,EAAAn8I,EAAoC,KACpCo8I,EAAAp8I,EAAiC,KACjCgiF,EAAAhiF,EAAyB,IACzB2C,EAAA3C,EAAuC,IAGnC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YACjC0jH,EAAU3xH,EAAAkD,cAAcC,KAAKwuH,QAGjC3f,EAAA,SAAA7wG,GAAiD5B,EAAAyyG,4BAAA7wG,EAW7C,SAAA6wG,+BACI7wG,EAAA1C,KAAAT,KAAM,aAHFA,KAAAo+G,iBAA2B,EAyjBvC,MAnjBIpK,6BAAAlzG,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK40G,kBAEL50G,KAAKy+G,eAAiBrrG,EAAAa,iBAAiB,iBACvCjU,KAAKy+G,eAAevqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKs2G,oBAAoBjiG,KAAKrU,OAEhFA,KAAK0+G,eAAiBtrG,EAAAa,iBAAiB,iBACvCjU,KAAK0+G,eAAexqG,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK2+G,gBAAgBtqG,KAAKrU,OAE5EA,KAAKy8I,gBAAkBrpI,EAAAa,iBAAiB,kBACxCjU,KAAKy8I,gBAAgBvoI,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAK08I,iBAAiBroI,KAAKrU,OAE9EA,KAAK8+G,cAAgB31G,SAASC,eAAe,0BAGjD4qG,4BAAAlzG,UAAAm+E,cAAA,SAAckU,GACVnzF,KAAK80G,YAAc3hB,EACnBnzF,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB/nC,cAAeh1G,KAAKyjG,cAAcpvF,KAAKrU,OAC/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB59B,aAAcn/G,KAAKyzF,aAAap/E,KAAKrU,OAC7EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBC,YAAah9I,KAAK4jG,YAAYvvF,KAAKrU,OAC3EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB39B,eAAgBp/G,KAAKq/G,eAAehrG,KAAKrU,OACjFA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoB1nC,uBAAwBr1G,KAAKs1G,uBAAuBjhG,KAAKrU,OACjGA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBxnC,gBAAiBv1G,KAAKw1G,gBAAgBnhG,KAAKrU,OACnFA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBpnC,cAAe31G,KAAK0mG,cAAcryF,KAAKrU,OAC/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBnnC,cAAe51G,KAAK6lG,cAAcxxF,KAAKrU,OAE/EA,KAAK80G,YAAY5gG,GAAGooI,EAAAS,oBAAoBz9B,qBAAsBt/G,KAAKu/G,qBAAqBlrG,KAAKrU,QAGjGg0G,4BAAAlzG,UAAA8zG,gBAAA,WACI50G,KAAK+4E,QAAQ67B,iBAAgBvpF,KACzBA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBAAiB,EACnC5oE,EAACkxH,EAAAU,iBAAiB/oD,qBAAqB,EACvC7oE,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ExH6joClC3oE,GAEJ,IAAIA,IwH3joCT2oF,4BAAAlzG,UAAAu1E,aAAA,WACIr2E,KAAKw/G,sBAAwBr2G,SAASC,eAAe,wBAErDjG,EAAArC,UAAMu1E,aAAY51E,KAAAT,MAElBA,KAAK80G,YAAYz+B,eAES,MAAtBr2E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAEb,MAAtB9R,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIxDixB,4BAAAlzG,UAAAs3E,iBAAA,WACIp4E,KAAKs2G,uBAGTtC,4BAAAlzG,UAAA2iG,cAAA,WACIh1F,EAAAyB,cAAcsvE,YAAYvvE,EAAYioE,OAG1C87B,4BAAAlzG,UAAA2yF,aAAA,WACQ7wF,EAAA6F,YAAYo/D,oBACZ7nE,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChC51F,KAAK80G,YAAYp/F,SAEjB1V,KAAK+4E,QAAQm+B,kBACTqlC,EAAAU,iBAAiBjpD,eACjBxxF,EAAAgC,WAAWC,kBAAkBujE,qBAEjCtlE,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAIjDjD,4BAAAlzG,UAAA8iG,YAAA,WACIn1F,EAAAyB,cAAcsvE,YAAYvvE,EAAY+pE,YAG1Cg6B,4BAAAlzG,UAAAq4D,eAAA,SAAe+mB,GACX,GAAIlgF,KAAK+4E,QAAQy9B,eAAet2B,GAI5B,OAHAiC,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMq4D,eAAc14D,KAAAT,KAACkgF,GAEbA,GACJ,IAAKq8D,GAAAU,iBAAiBC,YAClBl9I,KAAK2V,OACL,MACJ,KAAK4mI,GAAAU,iBAAiBE,WAClBn9I,KAAKo9I,MACL,MACJ,KAAKb,GAAAU,iBAAiBppD,WAClB7zF,KAAKszF,MACL,MACJ,KAAKipD,GAAAU,iBAAiBjpD,eAClBh0F,KAAK0V,MACL,MACJ,KAAK6mI,GAAAU,iBAAiBhpD,eAClBj0F,KAAK6/G,UACL,MACJ,KAAK08B,GAAAU,iBAAiB/oD,mBAClBl0F,KAAK8/G,iBAMrB9L,4BAAAlzG,UAAA6U,MAAA,WACI3V,KAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK80G,YAAYn/F,SAGrBq+F,4BAAAlzG,UAAAwyF,KAAA,WACStzF,KAAKo+G,iBAC+B,MAAjCz7G,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,GACpF/xF,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB6Z,YAI9DnxF,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,6BACRriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAiB,GAAGt5E,YAGjElO,KAAK+4E,QAAQq+B,oBACTx0G,EAAA6F,YAAYmH,UACZ5P,KAAK+4E,QAAQm+B,kBACTqlC,EAAAU,iBAAiB/oD,mBACjB1xF,EAAAgC,WAAWC,kBAAkBkjE,qBAGrCjlE,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cACvCvhE,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCj3G,KAAK80G,YAAYxhB,OAEjBtxF,EAAAsC,UAAUA,UAAU67G,eAGxBnM,4BAAAlzG,UAAAs8I,KAAA,WACIp9I,KAAK4/E,UACLnxE,EAAAyB,cAAcyvE,gBAGlBq0B,4BAAAlzG,UAAA4U,KAAA,WACI1V,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,iBACzCv0G,EAAA0F,eAAewtF,iBAAiB,IAChChzF,EAAA6F,YAAYggE,mBACZzoE,KAAK80G,YAAYp/F,QAGrBs+F,4BAAAlzG,UAAAm9B,IAAA,WACyC,MAAjCt7B,EAAAoG,YAAYmxE,mBAA6Bv3E,EAAAoG,YAAYmxE,kBAAkB9O,SAAW,GAClFppE,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB9O,UAAU,GAGpEprE,KAAK80G,YAAY72E,OAGrB+1E,4BAAAlzG,UAAA69G,gBAAA,WACI3+G,KAAK0+G,eAAehpG,OAChB9S,EAAA6F,YAAYmH,SACZ5P,KAAK6/G,WAEL7/G,KAAKs2G,uBAIbtC,4BAAAlzG,UAAA++G,SAAA,WACI7/G,KAAKy+G,eAAe/oG,OAEc,MAA9B9S,EAAA6F,YAAY0+D,eACZvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAY0+D,eAAiBjxD,SAAStT,EAAA6F,YAAY0+D,eAAiB,GAAGj5D,WAClEgI,SAAStT,EAAA6F,YAAY0+D,gBAAkB,GACvCvkE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASi8D,kBAAmBhiE,EAAA6F,YAAY0+D,eACtEnnE,KAAKszF,SAEL1wF,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKs2G,yBAKjBtC,4BAAAlzG,UAAAg/G,aAAA,WACIl9G,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiB/oD,oBAAoB,GACpExxF,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiB/oD,oBAAoB,IAG5E8f,4BAAAlzG,UAAAy+G,qBAAA,WACQ9wG,EAAAyB,cAAc8nE,oBACdh4E,KAAK8/G,eAET9/G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBjpD,gBAAgB,IAGxEggB,4BAAAlzG,UAAAu+G,eAAA,WASI,MARAr9G,GAAAsC,UAAUA,UAAUi8G,YAE6B,IAA7C59G,EAAAoG,YAAYmxE,kBAAkB6Z,WAC9B/zF,KAAKo+G,iBAAkB,EAEvBp+G,KAAKo+G,iBAAkB,EAGvBp+G,KAAK62I,aACL72I,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,OAChEtxF,GAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBjpD,gBAAgB,IAIpEh0F,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACoC,IAA7Cz0G,EAAAoG,YAAYmxE,kBAAkB6Z,aACgB,MAA1CpxF,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBACvC7kE,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,QAEhEz6I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAI7Cj3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAE5DrxF,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,EAC3C/zF,KAAKy+G,eAAe9oG,MAAM,IAE1B3V,KAAKs2G,sBAGT5zG,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,sBAErCr0G,EAAA6F,YAAYmH,UAAyD,IAA7CjN,EAAAoG,YAAYmxE,kBAAkB6Z,YACtD/zF,KAAK0+G,eAAe/oG,MAAM,OAIlCq+F,4BAAAlzG,UAAAy8I,gBAAA,WACIv9I,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBjpD,gBAAgB,GAChEtxF,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAG7CjD,4BAAAlzG,UAAAw0G,uBAAA,WAaI,GAZAt1G,KAAKy+G,eAAe/oG,OAEpB9S,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAEO,MAA1CthE,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,uBAEnC7kE,KAAK62I,YAIT,MAAI72I,MAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,wBACb10G,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,sBAI7Cj3G,MAAKs2G,uBAGTtC,4BAAAlzG,UAAA00G,gBAAA,WAWI,MATqC,OAAjC7yG,EAAAoG,YAAYmxE,mBACZv3E,EAAAoG,YAAYmxE,kBAAkB6Z,WAAa,IAC1C/zF,KAAKo+G,iBAENp8G,EAAAsC,UAAUA,UAAUguE,IAAI3vE,EAAAoG,YAAYmxE,kBAAkB6Z,YAG1D/zF,KAAKo+G,iBAAkB,EAEnBp+G,KAAK62I,WAAU,OACf72I,MAAKy8I,gBAAgB9mI,MAAM,KAI/B3V,KAAKy+G,eAAe/oG,OAEhB1V,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,OAC5Dz6I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAI7Cj3G,KAAKs2G,2BACD1zG,EAAA6F,YAAYmH,UACZ5P,KAAK6/G,eAIb7L,4BAAAlzG,UAAA47I,iBAAA,WAGI,MAFA18I,MAAKy+G,eAAe/oG,OAEhB1V,KAAKo8I,kBACLx5I,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,OAC5Dz6I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,mBAI7Cj3G,KAAKs2G,2BACD1zG,EAAA6F,YAAYmH,UACZ5P,KAAK6/G,cAIb7L,4BAAAlzG,UAAAo+E,UAAA,WA2CI,MA1CAp8E,GAAAwC,uBAAuBswE,YACvBhzE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAG3DtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs7D,cAEO,MAA1CthE,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBAEb,MAAtB7kE,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAEL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAGrB,MAAtB9R,KAAK8+G,eAAyB9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnF/iF,KAAK8+G,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAGrB,MAA9B/iF,KAAKw/G,uBACLx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7D/iF,KAAKw/G,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAE7B,MAA9B/iF,KAAKw/G,uBAAkCx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS,cACrFvX,KAAKw/G,sBAAsBl2G,UAAUC,IAAI,aAG7CvJ,KAAK62I,WAAU,GAEf1zI,EAAArC,UAAMo+E,UAASz+E,KAAAT,MACfA,KAAK80G,YAAY51B,YACjBl9E,EAAAsC,UAAUA,UAAU8mF,aAAcr3D,KAAM/xB,EAAAkD,cAAcC,KAAK8K,YAAY+pE,YAEnEh6E,KAAKo8I,kBACLp8I,KAAK+4E,QAAQq+B,oBACbp3G,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBE,YAAY,OAC5Dz6I,GAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,sBAI7Cj3G,MAAKs2G,uBAGTtC,4BAAAlzG,UAAAk/E,MAAA,SAAMD,GAAN,GAAAvmE,GAAAxZ,IAAM,UAAA+/E,OAAA,GACFj9E,EAAAwC,uBAAuBswE,YACvBhzE,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAG3DlO,KAAK80G,YAAY90B,MAAMD,GAEG,MAAtB//E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,SAGL,MAA9B9R,KAAKw/G,wBACLx/G,KAAKw/G,sBAAsB3tG,MAAMC,QAAU,SAG/CwD,WAAW,WACmB,MAAtBkE,EAAKslG,eAAyBtlG,EAAKslG,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnFvpE,EAAKslG,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAIrB,MAA9BvpE,EAAKgmG,uBACLhmG,EAAKgmG,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7DvpE,EAAKgmG,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,gBAEhE,OAGPixB,4BAAAlzG,UAAA4lG,cAAA,WACI1mG,KAAKs2G,sBACqB,MAAtBt2G,KAAK8+G,eAAyB9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACnF/iF,KAAK8+G,cAAcx1G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAIrB,MAA9B/iF,KAAKw/G,uBACLx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE7D/iF,KAAKw/G,sBAAsBl2G,UAAU6N,OAAOzU,EAAA0F,eAAe26E,gBAInEixB,4BAAAlzG,UAAAm/E,MAAA,WACIr9E,EAAA6F,YAAYmH,UAAW,EAEvB5P,KAAK80G,YAAY70B,QAES,MAAtBjgF,KAAK8+G,eAA0B9+G,KAAK8+G,cAAcx1G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACpF/iF,KAAK8+G,cAAcx1G,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAIlB,MAA9B/iF,KAAKw/G,uBACJx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAE9D/iF,KAAKw/G,sBAAsBl2G,UAAUC,IAAI7G,EAAA0F,eAAe26E,gBAIhEixB,4BAAAlzG,UAAA+kG,cAAA,WACIp3F,EAAAyB,cAAc4vE,YAAY7vE,EAAYioE,MAAM,GAClB,MAAtBl4E,KAAK8+G,gBACL9+G,KAAK8+G,cAAcjtG,MAAMC,QAAU,QAEL,MAA9B9R,KAAKw/G,uBAAiCx/G,KAAKw/G,sBAAsBl2G,UAAUiO,SAAS,cACpFvX,KAAKw/G,sBAAsBl2G,UAAU6N,OAAO,cAIpD68F,4BAAAlzG,UAAAw1G,oBAAA,WACIt2G,KAAKy+G,eAAe/oG,OAE0B,MAA1C/S,EAAAoG,YAAYmxE,kBAAkB9O,UAC9BxoE,EAAA6F,YAAYC,yBACRjG,EAAAkG,SAASk8D,qBACTliE,EAAAoG,YAAYmxE,kBAAkB9O,SAASl9D,YAG/CtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASk8D,sBAEnCjiE,EAAA6F,YAAY8gE,WACZ3mE,EAAA6F,YAAYmH,UAAW,EACvB5P,KAAKopG,SAEAxmG,EAAA6F,YAAYmH,UACb5P,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBACbrxF,EAAA6F,YAAYmH,UAAYpN,EAAAgC,WAAWC,kBAAkBkjE,oBAC1Dt8C,EAACkxH,EAAAU,iBAAiB/oD,oBACdtxF,EAAA6F,YAAYmH,UAAYpN,EAAAgC,WAAWC,kBAAkBkjE,oBACzDt8C,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ExHw9nClC3oE,IwHn9nCb3oB,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,gBxHw9nCxC,IAAI5rF,IwHr9nCT2oF,4BAAAlzG,UAAAsoG,MAAA,WACI10B,EAAAyD,YAAY9e,aAEZr5D,KAAK+4E,QAAQi+B,oBAAmB3rF,KAC5BA,EAACkxH,EAAAU,iBAAiBC,cAAc,EAChC7xH,EAACkxH,EAAAU,iBAAiBE,aAAa,EAC/B9xH,EAACkxH,EAAAU,iBAAiBhpD,iBAAiB,EACnC5oE,EAACkxH,EAAAU,iBAAiB/oD,qBAAqB,EACvC7oE,EAACkxH,EAAAU,iBAAiBppD,aAAa,EAC/BxoE,EAACkxH,EAAAU,iBAAiBjpD,iBAAiB,ExHu9nClC3oE,GAEJ,IAAIA,IwHr9nCT2oF,4BAAAlzG,UAAA0lB,OAAA,WACI5jB,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,YAE3DtL,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASo8D,mBACTpiE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUyG,WAAWtvI,YAEvDlO,KAAK+4E,QAAQm+B,kBAAkBqlC,EAAAU,iBAAiBC,aAAa,GAC7Dx6I,EAAA0F,eAAeowF,oBAAoB+jD,EAAAU,iBAAiBC,aAAa,GACjEl9I,KAAK80G,YAAYtuF,UAGrBwtF,4BAAAlzG,UAAA8+E,QAAA,WACI5/E,KAAK+4E,QAAQq+B,oBACb10G,EAAA0F,eAAeiwF,qBAAqBr4F,KAAKi3G,kBAGrCjD,4BAAAlzG,UAAA+1I,UAAR,SAAkB/mD,GAAA,SAAAA,OAAA,EACd,IAAIgnD,IAAwB,CAE5B,IAA0C,MAAtCn0I,EAAAoG,YAAYmxE,kBAAkBiqC,MAAgBxhH,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAS,EAC1F,IAAK,GAAInM,GAAY,EAAGA,EAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKj4G,OAAQnM,IACnE,GAAI4C,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAGg0B,OAAS4/F,EAAQojB,UAAW,CAC9DjnD,GACAltF,EAAA6F,YAAY4/D,kBACR5lE,EAAAkG,SAASq8D,4BACTriE,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,eAAet5E,WAG/D,IAAIyL,GAAgBhX,EAAAoG,YAAYmxE,kBAAkBiqC,KAAKpkH,GAAG+3D,WAAkB,KAC/D,OAATn+C,IACA/W,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASo8D,mBAAoBprD,EAAMzL,YACjEtL,EAAA6F,YAAY4/D,kBAAkB5lE,EAAAkG,SAASs8D,sBAAuBtrD,EAAMzL,aAExE4oI,GAAe,EAK3B,MAAOA,KAAiB92I,KAAKo8I,kBAGzBpoC,4BAAAlzG,UAAAs7I,eAAR,WACI,MAAIx5I,GAAA6F,YAAY8gE,WACZvpE,KAAKopG,SACE,GAIoC,MAA3CzmG,EAAAoG,YAAYmxE,kBAAkB68D,WAC4B,MAA1Dp0I,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBACmB,IAA3D7kF,EAAAoG,YAAYmxE,kBAAkB68D,UAAUvvD,gBAhkBpDwsB,4BAAAp4F,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cxH4gpCxBkqF,8BwH3gpCyCC,EAAAoD,aAApCh3G,GAAA2zG,4BAA2BA,GxHmhpClC,SAAS1zG,EAAQD,EAASF,GAE/B,YyH5ipCD,IAAAyB,GAAAzB,EAA+C,GAE/Cic,EAAAjc,EAA+B,IAqB/BsuG,EAAA,mBAAAA,kBAsDA,MA9CWA,eAAAC,gBAAP,SAAuB36C,GACdA,GAIL06C,cAAcx6C,aAAaF,EAAUxqC,mBAChCsN,UACAkV,OACG,SAACjuB,GACG,MAAAA,GAAKU,aAAa,UACa,cAA/BV,EAAKe,aAAa,UAClBjd,EAAAsyD,uBAAuBC,SAAS,YAAa/3C,EAAAuK,eAAe0D,aAEnEmD,QAAQ,SAAC1P,GAAkB,MAAClc,GAAAsyD,uBAAuBjwD,IAAI,aAA2B2uG,kBAAkB90F,MAU9F2wF,cAAAx6C,aAAf,SAA4Bn2C,EAAes2C,GACvC,MADuC,UAAAA,UAClCt2C,GAIDA,EAAK2L,qBACL2qC,EAAWq6C,cAAcx6C,aAAan2C,EAAK2L,mBAAoB2qC,IAG5DA,EAAS9yD,OAAOwc,IAPZs2C,GAgBAq6C,cAAAr2F,IAAf,SAAmBkU,KAKvBmiF,gBAtDapuG,GAAAouG,cAAaA,GzH8jpCpB,SAASnuG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,M0H3lpCpFG,EAAAzB,EAA8B,GAC9B6B,EAAA7B,EAAsD,GAEtD+hF,EAAA/hF,EAAuC,IACvCwC,EAAAxC,EAA4B,IAC5BqmE,EAAArmE,EAA+B,IAC/BsO,EAAAtO,EAA8B,IAC9BomE,EAAApmE,EAA2B,IAC3ByC,EAAAzC,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAC1BuC,EAAAvC,EAA+B,IAC/B8C,EAAA9C,EAA6B,IAI7BkG,EAAA,SAAAlD,GAA4C5B,EAAA8E,uBAAAlD,EAGxC,SAAAkD,wBAAY2uE,GACR7xE,EAAA1C,KAAAT,KAAMg1E,GAwNd,MArNIn0E,QAAAmD,eAAYqC,uBAAAvF,UAAA,U1HwlpCPmD,I0HxlpCL,WAKI,MAJIrC,GAAAqG,MAAMC,kBAAkBlI,KAAKy9I,WAC7Bz9I,KAAKy9I,QAAU,GAAIv7D,GAAAY,OAAO9iF,KAAKs1E,OAG5Bt1E,KAAKy9I,S1HylpCXt5I,YAAY,EACZC,cAAc,I0HllpCnBiC,uBAAAvF,UAAA48I,aAAA,SAAaC,EAAqBz9D,GACzBx9E,EAAA0F,eAAe4H,wBAIhB2tI,IAAgB37I,EAAA6kE,WAAWv/D,MAAMs2I,sBAAsBC,QAAQ3vI,YAQ/DtL,EAAA6F,YAAYkpE,qBAAqBuO,GACjCzxE,EAAAyB,cAAcipD,eAAe+mB,IACtBy9D,IAAgB37I,EAAA6kE,WAAWv/D,MAAMs2I,sBAAsBE,SAAS5vI,aAQvEtL,EAAA6F,YAAYkpE,qBAAqBuO,GACjCzxE,EAAAyB,cAAcipD,eAAe+mB,MAQrC75E,uBAAAvF,UAAAi9I,iBAAA,SAAiBplE,GAKb,GAAIA,EAAQ5kD,OAAS/xB,EAAA6kE,WAAWv/D,MAAM02I,qBAAqBC,aACvDj+I,KAAK66E,uBAAuBlC,EAAQrsD,UACjC,CACH,GAAI8uD,GAAax5E,EAAAqG,MAAMC,kBAAkBywE,EAAQrsD,MAAQ,KAAQqsD,EAAQrsD,KACrEjc,GAAU,EACVwiE,EAAc,IACdiG,EAAU,EACTl3E,GAAAqG,MAAMC,kBAAkBkzE,KACzB/qE,EAAU+qE,EAAW/qE,QACrBwiE,EAAcuI,EAAWvI,YACzBiG,EAAUsC,EAAWtC,QAEzB,IAAI19D,GAAUu9D,EAAQ5kD,OAAS/xB,EAAA6kE,WAAWv/D,MAAM02I,qBAAqBhjI,MACjE08C,EAAOihB,EAAQlxE,MAAQkxE,EAAQlxE,MAAMy2I,UAAY,EAErDj7I,GAAA6G,aAAaotE,mBACbl3E,KAAK62D,OAAOwC,WAAWsf,EAAQzX,KAAMxJ,EAAMohB,EAAS19D,EAAS/K,EAASwiE,EAAa8F,KAO3FtyE,uBAAAvF,UAAAq9I,wBAAA,WAEI,GAAIrmF,IACAxrC,MACIysD,SAAU,OAIlB/4E,MAAK62D,OAAOwC,WAAWj3D,EAAAsH,UAAUC,OAAO,eAAgB,GAAI,IAAI,GAAO,EAAM,GAAImuD,GACjF3tD,KAAKC,MAAMg0I,WAGX,IAAIvnF,GAAS1tD,SAASC,eAAe,UACjCsxB,EAAOvxB,SAASC,eAAe,OACvB,OAARsxB,GAA0B,MAAVm8B,IAChBn8B,EAAKlxB,UAAYqtD,EAAOwnF,UACxBl1I,SAASkI,KAAK7H,UAAY,GAC1BL,SAASkI,KAAKC,YAAYopB,KAOlCr0B,uBAAAvF,UAAAw9I,kBAAA,WACIt+I,KAAK62D,OAAOqC,eAMhB7yD,uBAAAvF,UAAAy9I,qBAAA,WACI/3E,EAAAkD,eAAeoY,kBAQnBz7E,uBAAAvF,UAAA2uG,YAAA,SAAYhoG,EAAe6kB,GACvBtsB,KAAK62D,OAAOwC,WAAW5xD,EAAO,KAAM,IAAI,IAG5CpB,uBAAAvF,UAAA09I,mBAAA,SAAmBC,GACXA,IACI77I,EAAA6F,YAAYmH,UACZhN,EAAA6F,YAAYgqE,UAAU,iBAE1B7vE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,MAQvClhE,uBAAAvF,UAAA49I,sBAAA,SAAsB/lE,KAEtBtyE,uBAAAvF,UAAA69I,oBAAA,SAAoB30E,EAAmB40E,GAC/BA,GACAr4E,EAAAsD,WAAWwT,cAAa,GAG5B7W,EAAAkD,eAAesY,gBAAgBhY,IAGnC3jE,uBAAAvF,UAAA+9I,qBAAA,SAAqB3+D,GACjB,OAAQA,GACJ,IAAKl+E,GAAA6kE,WAAWv/D,MAAMw3I,eAAeC,KAC7Bn8I,EAAA6F,YAAYmH,UACZhN,EAAA6F,YAAYgqE,UAAU,iBAE1B7vE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,GAC/B,MAEJ,KAAKvlE,GAAA6kE,WAAWv/D,MAAMw3I,eAAeE,OACjCp8I,EAAA6F,YAAYm/D,iBAAkB,CAC9B,MAEJ,KAAK5lE,GAAA6kE,WAAWv/D,MAAMw3I,eAAeG,QAC7Br8I,EAAA6F,YAAYmH,UACZhN,EAAA6F,YAAYgqE,UAAU,iBAE1B7vE,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,IAC/B3kE,EAAA6F,YAAYm/D,iBAAkB,IAY1CvhE,uBAAAvF,UAAAo+I,qBAAA,SAAqBh/D,GACjB,OAAQA,GACJ,IAAKl+E,GAAA6kE,WAAWv/D,MAAM63I,eAAeH,OACjCr8I,EAAAoG,YAAYkyE,YACZ,MAEJ,KAAKj5E,GAAA6kE,WAAWv/D,MAAM63I,eAAeF,QACjCt8I,EAAAoG,YAAY+xE,gBAYxBz0E,uBAAAvF,UAAAs+I,mBAAA,WAKI,MAAOz8I,GAAAoG,YAAY2tE,SAAQ,IAGvBrwE,uBAAAvF,UAAA+5E,uBAAR,SAA+BvuD,GAK3B3pB,EAAAoG,YAAY8xE,uBAAuBvuD,IAE3CjmB,wBA5N4CrE,EAAAqF,WAAWg4I,2BAA1Ch/I,GAAAgG,uBAAsBA,G1HqwpC7B,SAAS/F,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,M2H1xpCpFO,EAAA7B,EAA2B,GAE3B2F,EAAA,SAAA3C,GAAoC5B,EAAAuE,eAAA3C,EAApC,SAAA2C,kBAAoC3C,EAAA9B,MAAArB,KAAAoD,WAOpC,MAHIvC,QAAAmD,eAAW8B,eAAAhF,UAAA,U3H6xpCNmD,I2H7xpCL,WACI,MAAOjE,MAAKs/I,SAAS,UAAU,I3H+xpC9Bn7I,YAAY,EACZC,cAAc,I2H9xpCvB0B,gBAPoC9D,EAAAqF,WAAWk4I,mBAAlCl/I,GAAAyF,eAAcA,G3H8ypCrB,SAASxF,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa;AAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,M4HtzpCpFO,EAAA7B,EAA2B,GAC3BwC,EAAAxC,EAA4B,IAEtBq/I,EAA0B,sBAC1BC,EAA0B,sBAC1BC,EAA2B,uBAC3BC,EAA0B,sBAC1BC,EAA2B,uBAC3BC,EAAuB,mBACvBC,EAA0B,sBAC1BC,EAAiB,aACjBC,EAAyB,sBACzBC,EAAmC,gCACnCC,EAAoB,gBACpBC,EAAmB,eACnBC,EAAwB,oBACxBC,EAAe,WACfC,EAA4B,wBAC5BC,EAAmB,eACnBC,EAAqB,iBACrBC,EAAwB,oBACxBC,EAA6B,yBAC7BC,EAAwB,oBACxBC,EAAkB,cAClBC,EAA4B,wBAC5BC,EAA6B,yBAC7BC,EAAwB,oBACxBC,EAAyB,qBACzBC,EAA0B,sBAC1BC,EAAkC,8BAClCC,EAA+B,2BAC/BC,EAAgB,YAChBC,EAAmB,eACnBC,EAAe,WACfC,EAAiB,aACjBC,EAAwB,oBACxBC,EAA8B,0BAC9BC,EAAwB,oBACxBC,EAAqB,iBACrBC,EAAyB,qBACzBC,EAAsB,kBACtBC,EAAyB,qBACzBC,EAA6C,yCAC7CC,EAAiB,aACjBC,EAA6B,yBAC7BC,EAAwC,oCACxCC,EAA4B,wBAC5BC,EAA0B,sBAC1BC,EAA0B,sBAC1BC,EAAmB,eACnBC,EAAuB,mBAEvBC,GAAqB,iBACrBC,GAAqB,iBACrBC,GAAe,WACfC,GAAuB,mBACvBC,GAA4B,wBAE5BC,GAAsB,kBACtBC,GAAsB,kBAEtBC,GAAuB,mBACvBC,GAAuB,mBACvBC,GAAyB,qBACzBC,GAAuB,mBACvBC,GAAqB,iBACrBC,GAAsB,kBACtBC,GAAwB,oBACxBC,GAA4B,wBAC5BC,GAAgB,YAChBC,GAAoB,gBAEpBC,GAAyB,qBACzBC,GAA8C,0CAC9CC,GAAuC,mCACvCC,GAAuC,mCACvCC,GAAiC,6BACjCC,GAA8C,0CAC9CC,GAAiD,6CACjDC,GAAuC,mCACvCC,GAA6B,yBAC7BC,GAA4B,wBAE5BC,GAAqB,iBACrBC,GAAe,WACfC,GAAe,WACfC,GAAoB,gBACpBC,GAAkB,cAClBC,GAAoB,gBACpBC,GAAwB,oBACxBC,GAAgC,4BAChCC,GAA6B,yBAC7BC,GAA0B,sBAC1BC,GAAmC,+BACnCC,GAA4C,wCAElD7+I,GAAA,SAAA9C,GAAuC5B,EAAA0E,kBAAA9C,EAAvC,SAAA8C,qBAAuC9C,EAAA9B,MAAArB,KAAAoD,WAsqBvC,MAlqBIvC,QAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASE,GAAyB,I5HqzpC7Cr7I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASG,GAAyB,I5HqzpC7Ct7I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,wB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASI,EAA0B,I5HqzpC9Cv7I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASK,EAAyB,K5HwzpC7Cx7I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,wB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASM,EAA0B,I5HwzpC9Cz7I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASO,EAAsB,I5HwzpC1C17I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASQ,EAAyB,I5HwzpC7C37I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,c5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASS,GAAgB,I5HwzpCpC57I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASU,GAAwB,I5HwzpC5C77I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gC5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASW,EAAkC,I5HwzpCtD97I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASY,GAAmB,I5HwzpCvC/7I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASa,GAAkB,I5HwzpCtCh8I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASc,GAAuB,I5HwzpC3Cj8I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,Y5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASe,GAAc,I5HwzpClCl8I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASgB,GAA2B,I5HwzpC/Cn8I,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASkF,IAAmB,I5HwzpCvCrgJ,YAAY,EACZC,cAAc,I4HnzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HszpCNmD,I4HtzpCL,WACI,MAAOjE,MAAKs/I,SAASmF,IAAuB,I5HwzpC3CtgJ,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASiB,EAAkB,W5HqzpCtCp8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,kB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASkB,MAAyB,IAAM,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,M5HqzpCnFr8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASmB,MAA4B,EAAG,GAAI,M5HqzpCvDt8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0B5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASoB,MAAiC,GAAI,GAAI,M5HqzpC7Dv8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASqB,GAAuB,I5HqzpC3Cx8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,e5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASsB,GAAiB,I5HqzpCrCz8I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yB5HmzpCNmD,I4HnzpCL,WACI,MAAOtB,GAAAoG,YAAYgxD,aAAawQ,YAAgBvqE,KAAKs/I,SAASuB,GAA2B,I5HqzpCxF18I,YAAY,EACZC,cAAc,I4HhzpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0B5HmzpCNmD,I4HnzpCL,WACI,MAAOjE,MAAKs/I,SAASwB,O5HqzpCpB38I,YAAY,EACZC,cAAc,I4H9ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HizpCNmD,I4HjzpCL,WACI,MAAOjE,MAAKs/I,SAASyB,EAAuB,a5HmzpC3C58I,YAAY,EACZC,cAAc,I4H9ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5HizpCNmD,I4HjzpCL,WACI,MAAOjE,MAAKs/I,SAAS0B,GAAwB,I5HmzpC5C78I,YAAY,EACZC,cAAc,I4H9ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HizpCNmD,I4HjzpCL,WACI,MAAOjE,MAAKs/I,SAAS2B,GAAyB,I5HmzpC7C98I,YAAY,EACZC,cAAc,I4H5ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,+B5H+ypCNmD,I4H/ypCL,WACI,MAAOjE,MAAKs/I,SAAS4B,GAAiC,I5HizpCrD/8I,YAAY,EACZC,cAAc,I4H1ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,4B5H6ypCNmD,I4H7ypCL,WACI,MAAOjE,MAAKs/I,SAAS6B,GAA8B,I5H+ypClDh9I,YAAY,EACZC,cAAc,I4H1ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,a5H6ypCNmD,I4H7ypCL,WACI,MAAOjE,MAAKs/I,SAAS8B,EAAe,K5H+ypCnCj9I,YAAY,EACZC,cAAc,I4H1ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gB5H6ypCNmD,I4H7ypCL,WACI,MAAOjE,MAAKs/I,SAAS+B,EAAkB,K5H+ypCtCl9I,YAAY,EACZC,cAAc,I4H1ypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,Y5H6ypCNmD,I4H7ypCL,WACI,MAAOjE,MAAKs/I,SAASgC,EAAc,K5H+ypClCn9I,YAAY,EACZC,cAAc,I4HxypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,c5H2ypCNmD,I4H3ypCL,WACI,MAAOjE,MAAKs/I,SAASiC,O5H6ypCpBp9I,YAAY,EACZC,cAAc,I4HxypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5H2ypCNmD,I4H3ypCL,WACI,MAAOjE,MAAKs/I,SAASkC,EAAuB,I5H6ypC3Cr9I,YAAY,EACZC,cAAc,I4HtypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,2B5HyypCNmD,I4HzypCL,WACI,MAAOjE,MAAKs/I,SAASmC,EAA6B,I5H2ypCjDt9I,YAAY,EACZC,cAAc,I4HrypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HwypCNmD,I4HxypCL,WACI,MAAOjE,MAAKs/I,SAASoC,O5H0ypCpBv9I,YAAY,EACZC,cAAc,I4HpypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,kB5HuypCNmD,I4HvypCL,WACI,MAAOjE,MAAKs/I,SAASqC,GAAoB,I5HyypCxCx9I,YAAY,EACZC,cAAc,I4HnypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5HsypCNmD,I4HtypCL,WACI,MAAOjE,MAAKs/I,SAASsC,GAAwB,I5HwypC5Cz9I,YAAY,EACZC,cAAc,I4HlypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,mB5HqypCNmD,I4HrypCL,WACI,MAAOjE,MAAKs/I,SAASuC,GAAqB,I5HuypCzC19I,YAAY,EACZC,cAAc,I4HjypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5HoypCNmD,I4HpypCL,WACI,MAAOjE,MAAKs/I,SAASwC,GAAwB,I5HsypC5C39I,YAAY,EACZC,cAAc,I4HhypCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0C5HmypCNmD,I4HnypCL,WACI,MAAOjE,MAAKs/I,SAASyC,GAA4C,I5HqypChE59I,YAAY,EACZC,cAAc,I4H/xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,c5HkypCNmD,I4HlypCL,WACI,MAAOjE,MAAKs/I,SAAS0C,EAAgB,K5HoypCpC79I,YAAY,EACZC,cAAc,I4H9xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0B5HiypCNmD,I4HjypCL,WACI,MAAOjE,MAAKs/I,SAAS2C,GAA4B,I5HmypChD99I,YAAY,EACZC,cAAc,I4H7xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gB5HgypCNmD,I4HhypCL,WACI,MAAOjE,MAAKs/I,SAASgD,GAAkB,I5HkypCtCn+I,YAAY,EACZC,cAAc,I4H5xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5H+xpCNmD,I4H/xpCL,WACI,MAAOjE,MAAKs/I,SAASkD,GAAoB,K5HiypCxCr+I,YAAY,EACZC,cAAc,I4H3xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5H8xpCNmD,I4H9xpCL,WACI,MAAOjE,MAAKs/I,SAASmD,GAAoB,K5HgypCxCt+I,YAAY,EACZC,cAAc,I4H1xpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,W5H6xpCNmD,I4H7xpCL,WACI,MAAOjE,MAAKs/I,SAASoD,IAAc,I5H+xpClCv+I,YAAY,EACZC,cAAc,I4HzxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,mB5H4xpCNmD,I4H5xpCL,WACI,MAAOjE,MAAKs/I,SAASqD,IAAsB,I5H8xpC1Cx+I,YAAY,EACZC,cAAc,I4HxxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,wB5H2xpCNmD,I4H3xpCL,WACI,MAAOjE,MAAKs/I,SAASsD,IAA2B,I5H6xpC/Cz+I,YAAY,EACZC,cAAc,I4HtxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,mB5HyxpCNmD,I4HzxpCL,WACI,MAAQjE,MAAKs/I,SAASuD,GAAqB,GAAK,IAAQ,I5H2xpCvD1+I,YAAY,EACZC,cAAc,I4HpxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,mB5HuxpCNmD,I4HvxpCL,WACI,MAAOjE,MAAKs/I,SAASwD,IAAqB,I5HyxpCzC3+I,YAAY,EACZC,cAAc,I4HnxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oB5HsxpCNmD,I4HtxpCL,WACI,MAAOjE,MAAKs/I,SAASyD,IAAsB,I5HwxpC1C5+I,YAAY,EACZC,cAAc,I4HlxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oB5HqxpCNmD,I4HrxpCL,WACI,MAAOjE,MAAKs/I,SAAS0D,Q5HuxpCpB7+I,YAAY,EACZC,cAAc,I4HjxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5HoxpCNmD,I4HpxpCL,WACI,MAAOjE,MAAKs/I,SAAS2D,IAAwB,I5HsxpC5C9+I,YAAY,EACZC,cAAc,I4HhxpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oB5HmxpCNmD,I4HnxpCL,WACI,MAAOjE,MAAKs/I,SAAS4D,GAAsB,K5HqxpC1C/+I,YAAY,EACZC,cAAc,I4H/wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,kB5HkxpCNmD,I4HlxpCL,WACI,MAAOjE,MAAKs/I,SAAS6D,IAAoB,I5HoxpCxCh/I,YAAY,EACZC,cAAc,I4H9wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,mB5HixpCNmD,I4HjxpCL,WACI,MAAOjE,MAAKs/I,SAAS8D,IAAqB,I5HmxpCzCj/I,YAAY,EACZC,cAAc,I4H7wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qB5HgxpCNmD,I4HhxpCL,WACI,MAAOjE,MAAKs/I,SAAS+D,IAAuB,I5HkxpC3Cl/I,YAAY,EACZC,cAAc,I4H5wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yB5H+wpCNmD,I4H/wpCL,WACI,MAAOjE,MAAKs/I,SAASgE,IAA2B,I5HixpC/Cn/I,YAAY,EACZC,cAAc,I4H3wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,a5H8wpCNmD,I4H9wpCL,WACI,MAAOjE,MAAKs/I,SAASiE,Q5HgxpCpBp/I,YAAY,EACZC,cAAc,I4H1wpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5H6wpCNmD,I4H7wpCL,WACI,MAAOjE,MAAKs/I,SAASkE,Q5H+wpCpBr/I,YAAY,EACZC,cAAc,I4HzwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,sB5H4wpCNmD,I4H5wpCL,WACI,MAAOjE,MAAKs/I,SAASmE,Q5H8wpCpBt/I,YAAY,EACZC,cAAc,I4HxwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,2C5H2wpCNmD,I4H3wpCL,WACI,MAAOjE,MAAKs/I,SAASoE,IAA6C,I5H6wpCjEv/I,YAAY,EACZC,cAAc,I4HvwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oC5H0wpCNmD,I4H1wpCL,WACI,MAAOjE,MAAKs/I,SAASqE,Q5H4wpCpBx/I,YAAY,EACZC,cAAc,I4HtwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oC5HywpCNmD,I4HzwpCL,WACI,MAAOjE,MAAKs/I,SAASsE,Q5H2wpCpBz/I,YAAY,EACZC,cAAc,I4HrwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,8B5HwwpCNmD,I4HxwpCL,WACI,MAAOjE,MAAKs/I,SAASuE,Q5H0wpCpB1/I,YAAY,EACZC,cAAc,I4HpwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,2C5HuwpCNmD,I4HvwpCL,WACI,MAAOjE,MAAKs/I,SAASwE,IAA6C,I5HywpCjE3/I,YAAY,EACZC,cAAc,I4HnwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,8C5HswpCNmD,I4HtwpCL,WACI,MAAOjE,MAAKs/I,SAASyE,IAAgD,I5HwwpCpE5/I,YAAY,EACZC,cAAc,I4HlwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oC5HqwpCNmD,I4HrwpCL,WACI,MAAOjE,MAAKs/I,SAAS0E,GAAsC,K5HuwpC1D7/I,YAAY,EACZC,cAAc,I4HjwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0B5HowpCNmD,I4HpwpCL,WACI,MAAOjE,MAAKs/I,SAAS2E,IAA4B,I5HswpChD9/I,YAAY,EACZC,cAAc,I4HhwpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yB5HmwpCNmD,I4HnwpCL,WACI,MAAOjE,MAAKs/I,SAAS4E,GAA2B,K5HqwpC/C//I,YAAY,EACZC,cAAc,I4H/vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,kB5HkwpCNmD,I4HlwpCL,WACI,MAAOjE,MAAKs/I,SAAS6E,GAAoB,I5HowpCxChgJ,YAAY,EACZC,cAAc,I4H9vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,Y5HiwpCNmD,I4HjwpCL,WACI,MAAOjE,MAAKs/I,SAAS8E,GAAc,I5HmwpClCjgJ,YAAY,EACZC,cAAc,I4H7vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,Y5HgwpCNmD,I4HhwpCL,WACI,MAAOjE,MAAKs/I,SAAS+E,GAAc,I5HkwpClClgJ,YAAY,EACZC,cAAc,I4H5vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,iB5H+vpCNmD,I4H/vpCL,WACI,MAAOjE,MAAKs/I,SAASgF,GAAmB,K5HiwpCvCngJ,YAAY,EACZC,cAAc,I4H3vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,qC5H8vpCNmD,I4H9vpCL,WACI,MAAOjE,MAAKs/I,SAAS4C,EAAuC,I5HgwpC3D/9I,YAAY,EACZC,cAAc,I4H1vpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yB5H6vpCNmD,I4H7vpCL,WACI,MAAOjE,MAAKs/I,SAAS6C,EAA2B,K5H+vpC/Ch+I,YAAY,EACZC,cAAc,I4HzvpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5H4vpCNmD,I4H5vpCL,WACI,MAAOjE,MAAKs/I,SAAS+C,GAAyB,I5H8vpC7Cl+I,YAAY,EACZC,cAAc,I4HvvpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,6B5H0vpCNmD,I4H1vpCL,WACI,MAAOjE,MAAKs/I,SAASoF,IAA+B,I5H4vpCnDvgJ,YAAY,EACZC,cAAc,I4HnvpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,0B5HsvpCNmD,I4HtvpCL,WACI,MAAOjE,MAAKs/I,SAASqF,IAA4B,I5HwvpChDxgJ,YAAY,EACZC,cAAc,I4HjvpCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,gC5HovpCNmD,I4HpvpCL,WACI,MAAOjE,MAAKs/I,SAASuF,IAAkC,I5HsvpCtD1gJ,YAAY,EACZC,cAAc,I4H/upCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,yC5HkvpCNmD,I4HlvpCL,WACI,MAAOjE,MAAKs/I,SAASwF,IAA2C,I5HovpC/D3gJ,YAAY,EACZC,cAAc,I4H9upCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5HivpCNmD,I4HjvpCL,WACI,MAAOjE,MAAKs/I,SAASsF,IAAyB,I5HmvpC7CzgJ,YAAY,EACZC,cAAc,I4H7upCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,oB5HgvpCNmD,I4HhvpCL,WACI,MAAOjE,MAAKs/I,SAASiD,GAAsB,I5HkvpC1Cp+I,YAAY,EACZC,cAAc,I4H5upCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,uB5H+upCNmD,I4H/upCL,WACI,MAAOjE,MAAKs/I,SAAS8C,GAAyB,I5HivpC7Cj+I,YAAY,EACZC,cAAc,I4H3upCnBvD,OAAAmD,eAAWiC,kBAAAnF,UAAA,e5H8upCNmD,I4H9upCL,WACI,MAAOjE,MAAKs/I,SAASiF,GAAiB,K5HgvpCrCpgJ,YAAY,EACZC,cAAc,I4H/upCvB6B,mBAtqBuCjE,EAAAqF,WAAW09I,sBAArC1kJ,GAAA4F,kBAAiBA,I5H85qCxB,SAAS3F,EAAQD,EAASF,GAE/B,Y6HhgrCD,IAAA6B,GAAA7B,EAAyC,GACzCyC,EAAAzC,EAA4B,IAC5B4C,EAAA5C,EAAwB,GACxBqmE,EAAArmE,EAA+B,IAC/BuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3BsmE,EAAAtmE,EAA2B,IAC3ByN,EAAAzN,EAAwB,GACxB6C,EAAA7C,EAA+B,IAC/BsO,EAAAtO,EAA8B,IAC9BwO,EAAAxO,EAAsC,IAEtCw0E,EAAAx0E,EAAoC,IAGhC8P,EAAcjO,EAAAkD,cAAcC,KAAK8K,YAErCnJ,EAAA,mBAAAA,qBA4QA,MA3QWA,kBAAAnF,OAAP,WACI,GAAIqjJ,GAAe,GAED,OAAdxiJ,EAAAgC,YAAsD,MAAhChC,EAAAgC,WAAWC,oBACgB,IAA7CjC,EAAAgC,WAAWC,kBAAkBwgJ,eAC7BD,EAAexiJ,EAAAgC,WAAWC,kBAAkBwgJ,cAGhDjjJ,EAAAsC,UAAUA,UAAU4gJ,eAAiBtiJ,EAAA6F,YAAYqlE,YACjD9rE,EAAAsC,UAAUA,UAAU6gJ,eAAiBviJ,EAAA6F,YAAY2lE,YACjDpsE,EAAAsC,UAAUA,UAAU8gJ,gBAEpBpjJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUghJ,aAAcx+I,iBAAiBy+I,cACvFvjJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUkhJ,gBAAiB,SAACC,GACtE3+I,iBAAiB4+I,gBAAgBD,KAErCzjJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUqhJ,WAAY7+I,iBAAiB8+I,YACrF5jJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUuhJ,eAAgB/+I,iBAAiBg7E,gBACzF9/E,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUwhJ,aAAc,SAACC,GACnEj/I,iBAAiBk/I,aAAaD,KAElC/jJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU2hJ,eAAgBn/I,iBAAiBo/I,gBACzFlkJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU6hJ,eAAgBr/I,iBAAiBs/I,gBACzFpkJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAC7BlS,EAAAsC,UAAUA,UAAU+hJ,iBACpBv/I,iBAAiBw/I,kBAErBtkJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUiiJ,gBAAiBz/I,iBAAiB0/I,iBAC1FxkJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUmiJ,cAAe3/I,iBAAiB4/I,eACxF1kJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUqiJ,aAAc,SAACxqF,GACnEr1D,iBAAiB8/I,aAAazqF,KAElCn6D,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUuiJ,cAAe,SAACjpH,GACpE92B,iBAAiBggJ,cAAclpH,KAEnC57B,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUyiJ,SAAUjgJ,iBAAiBkgJ,UACnFhlJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU2iJ,SAAUngJ,iBAAiBogJ,UACnFllJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU6iJ,WAAYrgJ,iBAAiBsgJ,YACrFplJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU+iJ,aAAcvgJ,iBAAiBwgJ,cACvFtlJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUijJ,aAAczgJ,iBAAiB0gJ,cACvFxlJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAUmjJ,eAAgB3gJ,iBAAiB4gJ,gBACzF1lJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAC7BlS,EAAAsC,UAAUA,UAAUqjJ,kBACpB7gJ,iBAAiB8gJ,mBAErB5lJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAC7BlS,EAAAsC,UAAUA,UAAUujJ,kBACpB/gJ,iBAAiBghJ,mBAErB9lJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAC7BlS,EAAAsC,UAAUA,UAAUyjJ,iBACpBjhJ,iBAAiBkhJ,kBAErBhmJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAC7BlS,EAAAsC,UAAUA,UAAU2jJ,8BACpBnhJ,iBAAiBohJ,+BAErBlmJ,EAAAsC,UAAUA,UAAU+gJ,aAAanxI,GAAGlS,EAAAsC,UAAUA,UAAU6jJ,mBAAoB,SAACj+F,GACzEpjD,iBAAiBshJ,mBAAmBl+F,KAGxCloD,EAAAsC,UAAUA,UAAU3C,OAChBa,EAAAgC,WAAWC,kBAAkB4jJ,SAC7B7lJ,EAAAgC,WAAWC,kBAAkB6jJ,UAC7BtD,GACE95I,QAAS0C,EAAA1K,QAAQmC,IAAKqG,KAAMkC,EAAA1K,QAAQU,SAAU2kJ,UAAW5zE,EAAAU,wBAKhEvuE,iBAAAy+I,aAAP,WACI3iJ,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,KAG5BzgE,iBAAA4+I,gBAAP,SAAuBD,GACnB7iJ,EAAA6F,YAAYmH,UAAW,EACvBhN,EAAA6F,YAAY0+D,cAAgBs+E,EAAav+E,cACzCtkE,EAAA6F,YAAY4+D,kBAAoBo+E,EAAar+E,kBAC7CxkE,EAAA6F,YAAY8+D,iBAAmBk+E,EAAan+E,iBAC5C5kE,EAAA0F,eAAe+wD,eAAe,aAG3BryD,iBAAA8+I,WAAP,WACI7iJ,EAAAuF,QAAQC,cAGLzB,iBAAAg7E,eAAP,WACItb,EAAAkD,eAAeoY,gBAAe,IAG3Bh7E,iBAAAk/I,aAAP,SAAoBD,GAAA,SAAAA,OAAA,GAEhBj/I,iBAAiBy+I,eAGbQ,IACIt3I,EAAAyB,cAAckqE,gBAEP3rE,EAAAyB,cAA+B,iBAAKzB,EAAAyB,cAA+B,mBAG1EzB,EAAAyB,cAAcC,qBAAqBF,EAAYioE,QAKpDpxE,iBAAAo/I,eAAP,WAEQz3I,EAAAyB,cAAckqE,gBAEP3rE,EAAAyB,cAA+B,iBAAKzB,EAAAyB,cAA+B,mBAG1EzB,EAAAyB,cAAckoE,iBAAiBnoE,EAAYioE,OAI5CpxE,iBAAAs/I,eAAP,WACSpkJ,EAAAsC,UAAUA,UAAU47G,kBAErBp5G,iBAAiBy+I,eAGrB52I,EAAAkB,sBAAsBC,SAAU,EAChCnB,EAAAkB,sBAAsBE,WACtBrN,EAAA0F,eAAe4H,uBAAwB,EACvC7G,SAASkI,KAAK/H,UAAUC,IAAI,WAGzBzC,iBAAAw/I,iBAAP,WACIn9I,SAASkI,KAAK/H,UAAU6N,OAAO,UAC/BzU,EAAA0F,eAAe4H,uBAAwB,EACvCrB,EAAAkB,sBAAsBkpB,YACtBpqB,EAAAkB,sBAAsBC,SAAU,GAG7BhJ,iBAAA0/I,gBAAP,WACI9jJ,EAAA0F,eAAeC,SAAS,IAGrBvB,iBAAA4/I,cAAP,WACIhkJ,EAAA0F,eAAeC,SAAS,IAGrBvB,iBAAA8/I,aAAP,SAAoBzqF,GAChBz5D,EAAA0F,eAAeC,SAAS8zD,IAGrBr1D,iBAAAkgJ,SAAP,WACI,GAAIhrD,GAAmBv1B,EAAA6B,WAAW8uB,YAClC,IAAI10F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,GACIA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAC1DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAW8uB,gBAMpDtwF,iBAAAogJ,SAAP,WACI,GAAIlrD,GAAmBv1B,EAAA6B,WAAW8uB,YAClC,IAAI10F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,IACKA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAC3DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWwuB,kBAMpDhwF,iBAAAsgJ,WAAP,WACI,GAAIprD,GAAmBv1B,EAAA6B,WAAW8uB,YAClC,IAAI10F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,IACIA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,eAC1DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAW8uB,cAE3C10F,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWwuB,kBAMpDhwF,iBAAAwgJ,aAAP,WACI,GAAItrD,GAAmBv1B,EAAA6B,WAAWmvB,gBAClC,IAAI/0F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,GACIA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAC1DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWmvB,oBAMpD3wF,iBAAA0gJ,aAAP,WACI,GAAIxrD,GAAmBv1B,EAAA6B,WAAWmvB,gBAClC,IAAI/0F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,IACKA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBAC3DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWuuB,sBAMpD/vF,iBAAA4gJ,eAAP,WACI,GAAI1rD,GAAmBv1B,EAAA6B,WAAWmvB,gBAClC,IAAI/0F,EAAA0F,eAAe+sF,mBAAmB6G,GAAmB,CACrD,GAAIC,GAAiBv5F,EAAA0F,eAAe+sF,mBAAmB6G,GAAkB,EAEnD,OAAlBC,IACIA,EAAe3sF,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,eAC1DrgF,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWmvB,kBAE3C/0F,EAAA0F,eAAewtF,iBAAiBnvB,EAAA6B,WAAWuuB,sBAMpD/vF,iBAAAggJ,cAAP,SAAqBlpH,GAEbh7B,EAAA6F,YAA0B,cAC1B7F,EAAA6F,YAA0B,aAAEm1B,IAI7B92B,iBAAA8gJ,kBAAP,WACIllJ,EAAA0F,eAAewtF,iBAAiB,KAG7B9uF,iBAAAghJ,kBAAP,WACI9lJ,EAAAsC,UAAUA,UAAUkgF,YAAc,mBAClC52E,EAAA1K,QAAQmB,QAGLyC,iBAAAkhJ,iBAAP,WACIhlJ,EAAAa,eAAemlF,cAGZliF,iBAAAohJ,8BAAP,aAIOphJ,iBAAAshJ,mBAAP,SAA0Bl+F,GAClB1nD,EAAAgC,WAAWC,kBAAkB+jJ,qBAC7B7zE,EAAAU,oBAAoB4qB,aAChBO,YAAa,sBACbC,QAAS,eACTvgB,OAAQ,YACR5zD,MAAQ49B,OAAQA,MAIhCpjD,mBA5QazG,GAAAyG,iBAAgBA,G7HwtrCvB,SAASxG,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G8HrvrCjEna,EAAAzB,EAAwE,GACxEgc,EAAAhc,EAA6B,IAC7Bic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChCkc,EAAAlc,EAAmC,IAUnCsoJ,EAAA,SAAAtlJ,GAAyC5B,EAAAknJ,oBAAAtlJ,EAYrC,SAAAslJ,uBACItlJ,EAAA1C,KAAAT,MAEAA,KAAKuc,SAAU,EACfvc,KAAKwc,aAAc,EAEnBxc,KAAKiZ,KAAUjZ,KAAKyc,cAAa,IAAI7a,EAAAqG,MAAM8Q,eA8hBnD,MAnhBIlY,QAAAmD,eAAWykJ,oBAAA3nJ,UAAA,e9HgurCNmD,I8HhurCL,WACI,MAAOjE,MAAK2c,c9HkurCXxY,YAAY,EACZC,cAAc,I8H3trCnBqkJ,oBAAA3nJ,UAAAgjD,QAAA,SAAQhmC,GAoIJ,GAnIA9d,KAAKgd,gBAAgB,aAErBX,EAAAe,OAAOC,aAAard,MAEH,MAAbA,KAAKie,OACLje,KAAKie,KAAOH,EAAKI,UASjBJ,EAAKU,aAAa,WAClBxe,KAAKme,MAAQS,WAAWd,EAAKe,aAAa,WAS1Cf,EAAKU,aAAa,cAClBxe,KAAK0e,SAAWxI,SAAS4H,EAAKe,aAAa,cAS3Cf,EAAKU,aAAa,kBACyB,WAAvCV,EAAKe,aAAa,mBAElB7e,KAAK0e,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAWtDnB,EAAKU,aAAa,YAClBxe,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,YAU5Cf,EAAKU,aAAa,YAClBxe,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,YAS5Cf,EAAKU,aAAa,WAClBxe,KAAKyR,MAAMyN,EAAIN,WAAWd,EAAKe,aAAa,UAC5C7e,KAAKyR,MAAM2N,EAAIR,WAAWd,EAAKe,aAAa,WAS5Cf,EAAKU,aAAa,OAClBxe,KAAKuf,SAASL,EAAIhJ,SAAS4H,EAAKe,aAAa,OAS7Cf,EAAKU,aAAa,OAClBxe,KAAKuf,SAASH,EAAIlJ,SAAS4H,EAAKe,aAAa,OAS7Cf,EAAKU,aAAa,YAClBxe,KAAK2f,MAAMT,EAAIhJ,SAAS4H,EAAKe,aAAa,YAS1Cf,EAAKU,aAAa,YAClBxe,KAAK2f,MAAMP,EAAIlJ,SAAS4H,EAAKe,aAAa,YAS1Cf,EAAKU,aAAa,aAClBxe,KAAK8f,QAAUle,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAa,aAU1Df,EAAKU,aAAa,QAAS,CAE3B,IADA,GAAI8K,GAAgBxL,EAAKhG,cAAcyR,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKpL,WAAaJ,EAAKe,aAAa,QAAS,CAC7C,GAAI2K,GAA6B,GAAIrN,GAAAgE,YACrCqJ,GAAa7nB,OAAO2nB,GACpBtpB,KAAK4gB,KAAO4I,EAEhBF,EAAOA,EAAKG,mBAGC,MAAbzpB,KAAK4gB,KAcb,GAAI9C,EAAKU,aAAa,cAAe,CACjC,GAAIsC,GAAQ5e,EAAAsD,gBAAgByJ,uBAAuB6O,EAAKe,aAAa,cAExD,OAATiC,IACA9gB,KAAK+gB,WAAa,GAAI5W,MAAK6W,OAAOF,GAC9BhD,EAAKU,aAAa,iBAClBxe,KAAK+gB,WAAWxB,SAASL,EAAIN,WAAWd,EAAKe,aAAa,iBAE1Df,EAAKU,aAAa,iBAClBxe,KAAK+gB,WAAWxB,SAASH,EAAIR,WAAWd,EAAKe,aAAa,iBAEzDf,EAAKU,aAAa,oBACnBxe,KAAKiS,SAASjS,KAAK+gB,YACnB/gB,KAAK4gB,KAAO5gB,KAAK+gB,aAS7B/gB,KAAK0oJ,uBAAuB5qI,GAC5B9d,KAAK2oJ,oBAAoB7qI,GACzB9d,KAAK4oJ,uBAAuB9qI,GAC5B9d,KAAK6oJ,oBAAoB/qI,IAgBrB2qI,oBAAA3nJ,UAAA4nJ,uBAAR,SAA+B5qI,GAA/B,GAAAtE,GAAAxZ,IAGI,IACK8d,EAAKU,aAAasqI,EAA8B/lI,mBAChDjF,EAAKU,aAAasqI,EAA8B9lI,kBAFrD,CAOA,GAAIM,GAAwB1hB,EAAAsgB,WAAWC,YACnCrE,EAAKe,aAAaiqI,EAA8B/lI,mBAEhDQ,EAAwB3hB,EAAAsgB,WAAWC,YACnCrE,EAAKe,aAAaiqI,EAA8B9lI,kBAGpD,IAAc,MAAVM,GAA4B,MAAVC,EAAtB,CAQA,GAAMd,GAAwB3E,EAAKU,aAAasqI,EAA8BrlI,yBACxEvN,SAAS4H,EAAKe,aAAaiqI,EAA8BrlI,0BACzD,IACAlB,EAAoBzE,EAAKU,aAAasqI,EAA8BtlI,qBACpE1F,EAAKe,aAAaiqI,EAA8BtlI,qBAChD,KACAjE,EAAmBzB,EAAKU,aAAasqI,EAA8B1lI,yBACnEtF,EAAKe,aAAaiqI,EAA8B1lI,yBAChD,IAEF7D,IAAYupI,EAA8BzlI,8BAA8BpB,WACxEqB,EAASA,EAAOlB,IAAI,SAACrV,GACjB,MAAOA,GAAQyM,EAAK+F,SAASL,IAGjCqE,EAASA,EAAOnB,IAAI,SAACrV,GACjB,MAAOA,GAAQyM,EAAK+F,SAASH,KAIrC/C,EAAAe,OAAOwG,cAAc5jB,MAAQsjB,SAAQC,SAAQhB,YAAWE,qBASpDgmI,oBAAA3nJ,UAAA6nJ,oBAAR,SAA4B7qI,GACxB,GAAKA,EAAKU,aAAasqI,EAA8BpkI,aAArD,CAIA,GAAMH,GAAiCkkI,oBAAoB9jI,8BACvD7G,EAAKe,aAAaiqI,EAA8BpkI,cAE9CjC,EAAwB3E,EAAKU,aAAasqI,EAA8B/jI,sBACxE7O,SAAS4H,EAAKe,aAAaiqI,EAA8B/jI,uBACzD,IACAxC,EAAoBzE,EAAKU,aAAasqI,EAA8BhkI,kBACpEhH,EAAKe,aAAaiqI,EAA8BhkI,kBAChD,IAENzI,GAAAe,OAAOkH,WAAWtkB,MAAQukB,cAAahC,YAAWE,oBAS9CgmI,oBAAA3nJ,UAAA8nJ,uBAAR,SAA+B9qI,GAC3B,GAAKA,EAAKU,aAAasqI,EAA8BjlI,gBAArD,CAIA,GAAME,GAAyBniB,EAAAsgB,WAAWC,YACtCrE,EAAKe,aAAaiqI,EAA8BjlI,gBAGpD,IAAe,MAAXE,EAAJ,CAQA,GAAMtB,GAAwB3E,EAAKU,aAAasqI,EAA8B7kI,yBACxE/N,SAAS4H,EAAKe,aAAaiqI,EAA8B7kI,0BACzD,IACA1B,EAAoBzE,EAAKU,aAAasqI,EAA8B9kI,qBACpElG,EAAKe,aAAaiqI,EAA8B9kI,qBAChD,KACArB,EAAqB7E,EAAKU,aAAasqI,EAA8B5kI,sBACrEhO,SAAS4H,EAAKe,aAAaiqI,EAA8B5kI,uBACzD,CAEN7H,GAAAe,OAAO0G,cAAc9jB,MAAQ+jB,UAASxB,YAAWE,gBAAeE,kBAS5D8lI,oBAAA3nJ,UAAA+nJ,oBAAR,SAA4B/qI,GACxB,GAAKA,EAAKU,aAAasqI,EAA8BnnI,aAArD,CAIA,GAAMW,GAAwB1gB,EAAAsgB,WAAWC,YACrCrE,EAAKe,aAAaiqI,EAA8BnnI,aAGpD,IAAc,MAAVW,EAAJ,CAOA,GAAMG,GAAwB3E,EAAKU,aAAasqI,EAA8BpmI,sBACxExM,SAAS4H,EAAKe,aAAaiqI,EAA8BpmI,uBACzD,IACAC,EAAqB7E,EAAKU,aAAasqI,EAA8BlmI,mBACrE1M,SAAS4H,EAAKe,aAAaiqI,EAA8BlmI,oBACzD,EACAL,EAAoBzE,EAAKU,aAAasqI,EAA8BtmI,kBACpE1E,EAAKe,aAAaiqI,EAA8BtmI,kBAChD,IAENnG,GAAAe,OAAOwE,WAAW5hB,MAAQsiB,SAAQC,YAAWE,gBAAeE,kBAQjD8lI,oBAAA9jI,8BAAf,SAA6CwB,GACzC,MAAOA,GACF/Y,QAAQ,MAAO,IACf4Y,MAAM,KACN5D,IAAI,SAACgE,GACF,MAAO,QAAQ1S,KAAK0S,GAAcA,EAAWllB,MAAM,MAAO8kB,MAAM,MAAQI,EAAYA,KAEvFhE,IAAI,SAACgE,GACF,OAASlH,EAAGN,WAAWwH,EAAW,IAAKhH,EAAGR,WAAWwH,EAAW,QAU5EqiI,oBAAA3nJ,UAAAa,OAAA,SAAOmc,GACH9d,KAAK8jD,QAAQhmC,IAGjB2qI,oBAAA3nJ,UAAA4b,aAAA,WAKI,MAAO,IAOX7b,OAAAmD,eAAWykJ,oBAAA3nJ,UAAA,U9H0irCNmD,I8H1irCL,WACI,MAAOjE,MAAKuc,S9H4irCXpY,YAAY,EACZC,cAAc,I8H1irCnBvD,OAAAmD,eAAWykJ,oBAAA3nJ,UAAA,a9H6irCNmD,I8H7irCL,WACI,MAAOjE,MAAKwc,a9H+irCXrY,YAAY,EACZC,cAAc,I8HzirCnBvD,OAAAmD,eAAWykJ,oBAAA3nJ,UAAA,O9H4irCNmD,I8H5irCL,WACI,MAAOjE,MAAKiZ,M9H8irCX9U,YAAY,EACZC,cAAc,I8HxirCnBvD,OAAAmD,eAAWykJ,oBAAA3nJ,UAAA,iB9H2irCNmD,I8H3irCL,WACI,MAAQjE,MAAa8c,mB9H6irCpB3Y,YAAY,EACZC,cAAc,I8H3irCnBqkJ,oBAAA3nJ,UAAAic,QAAA,SAAQ/X,GACJhF,KAAKgd,gBAAgB,WAEjBpb,EAAAqG,MAAMC,kBAAkBlD,KACxBA,EAAUyjJ,oBAAoBxrI,iBAGlCjd,KAAKkd,gBAAgBlY,GAEhBpD,EAAAqG,MAAMC,kBAAkBlI,KAAKmd,WAC9Bha,EAAArC,UAAMic,QAAOtc,KAAAT,KAACgF,GAUlBhF,KAAKwc,aAAc,GAObisI,oBAAA3nJ,UAAAoc,gBAAV,SAA0BlY,GACtBqX,EAAAe,OAAOC,aAAard,OAGjByoJ,oBAAA3nJ,UAAAwc,MAAP,WACI,KAAM,IAAItC,OAAM,oBAMVytI,oBAAA3nJ,UAAAyc,yBAAV,WACIvd,KAAKwd,6BAMTirI,oBAAA3nJ,UAAA0c,0BAAA,WACIxd,KAAKgd,gBAAgB,4BAErB,IAAIS,IACAN,UAAU,EAGd,IAAqB,MAAjBnd,KAAKmd,UAAoBnd,KAAKmd,SAASjR,OAAS,EAChD,IAAK,GAAInM,GAAIC,KAAKmd,SAASjR,OAAS,EAAGnM,GAAK,EAAGA,IACnB,MAApBC,KAAKmd,SAASpd,IACbC,KAAKmd,SAASpd,GAAWgd,QAAQU,EAK9Czd,MAAK0d,kBAGC+qI,oBAAA3nJ,UAAAkc,gBAAV,SAA0BW,KAWhB8qI,oBAAA3nJ,UAAA8c,aAAV,WACI5d,KAAK6d,iBAMT4qI,oBAAA3nJ,UAAA+c,cAAA,WACI7d,KAAKgd,gBAAgB,kBACrBhd,KAAKuc,SAAU,GAkBTksI,oBAAA3nJ,UAAAsX,IAAV,SAAcC,KAWJowI,oBAAA3nJ,UAAA4gB,SAAV,SAAmBrJ,KAziBZowI,oBAAAxrI,iBACHE,UAAU,GAHlBsrI,oBAAA7sI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB9HojsCxB6hI,sB8HnjsCiCt+I,KAAK4+I,UAAUC,kBAA3C3oJ,GAAAooJ,oBAAmBA,CAkjBhC,IAAMK,IAyBF5zB,WAAY,YACZkZ,KAAM,OAENzsH,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBAEtBK,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBL,wBAAyB,wBACzBC,+BACIwD,SAAU,WACV5E,SAAU,YAGd4B,eAAgB,gBAChBG,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBAEtBQ,YAAa,aACbI,iBAAkB,iBAClBC,qBAAsB,qBAQtBsC,MAAO,QACP0oG,OAAQ,SACRwF,MAAO,QACPC,SAAU,WACV7D,KAAM,OAONX,KAAM,S9Hk+qCJ,SAAS1wH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G+HnnsCjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAC/Bi0H,EAAAj0H,EAA6B,IAC7B+B,EAAA/B,EAAgC,GAChCqb,EAAArb,EAA4B,IAC5B6mB,EAAA7mB,EAA6B,IAC7BiT,EAAAjT,EAA2E,GAc3E8oJ,EAAA,SAAA9lJ,GAAuC5B,EAAA0nJ,kBAAA9lJ,EAyBnC,SAAA8lJ,qBACI9lJ,EAAA1C,KAAAT,MAVIA,KAAAkpJ,WACAlpJ,KAAAmpJ,eAGAnpJ,KAAAopJ;AACAppJ,KAAAqpJ,wBAOJrpJ,KAAKs0H,SAELt0H,KAAK8Z,OAAS1G,EAAAa,iBAAiB,WAC/BjU,KAAK8Z,OAAO5F,GAAGd,EAAAe,iBAAiBC,SAAUpU,KAAKspJ,YAAYj1I,KAAKrU,OAEhEA,KAAK00H,WAAY,EACjB10H,KAAKowH,OAAQ,EACbpwH,KAAK20H,WAAY,EACjB30H,KAAK60H,WAAa,GAClB70H,KAAK8f,SAAU,EACf9f,KAAKq6F,OAAS,EAuMtB,MApMI4uD,mBAAAnoJ,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAkpJ,4BAA4Br0B,cAC9Cl1H,KAAKw0H,WAAat+G,SAAS4H,EAAKe,aAAaxe,EAAAkpJ,4BAA4Br0B,cAGzEp3G,EAAKU,aAAane,EAAAkpJ,4BAA4BliI,SAC9CrnB,KAAKgwH,OAA0BhpG,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAaxe,EAAAkpJ,4BAA4BliI,QACjGrnB,KAAKm1H,WAAan1H,KAAKgwH,OAAO/xG,KAC9Bje,KAAK8f,SAAU,EAEf9f,KAAKqpJ,qBAAuBrpJ,KAAKgwH,OAAOq5B,qBACxCrpJ,KAAKopJ,oBAAsBppJ,KAAKgwH,OAAOo5B,oBAEvCppJ,KAAKo1H,oBAIb6zB,kBAAAnoJ,UAAAkd,aAAA,SAAaF,GACT3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,IAGfmrI,kBAAAnoJ,UAAAs0H,gBAAR,WACI,GACIub,GADA6Y,EAAaxpJ,KAAKgwH,OAAOr2G,KAG7B3Z,MAAKq6F,OAASr6F,KAAKgwH,OAAO31B,OAAOr6F,KAAKgwH,OAAOrvB,UAAY,EAEzD,KAAK,GAAI5gG,GAAI,EAAGA,EAAIypJ,EAAYzpJ,IAAK,CAOjC,IAAK,GAND0pJ,GAAiB,EACjBC,EAAiB,EACjBj4I,EAAgB,EAChBsnH,EAAUh6G,KAAKE,SAAW/c,EAAAsD,gBAAgB+K,MAC1CyoH,EAAUj6G,KAAKE,SAAW/c,EAAAsD,gBAAgBgL,OAErCmyB,EAAI,EAAGA,EAAI3iC,KAAKgwH,OAAO4F,OAAO1pH,OAAQy2B,IAC3C,GAAI5iC,EAAIC,KAAKgwH,OAAO31B,OAAO13D,GAAI,CAC3BguG,EAAe,GAAIvc,GAAAkC,aAAap0H,EAAAsD,gBAAgByJ,uBAAuBjP,KAAKgwH,OAAO4F,OAAOjzF,KAC1F8mH,EACI1qI,KAAKE,UAAYjf,KAAKgwH,OAAOy5B,OAAO9mH,GAAG,GAAK3iC,KAAKgwH,OAAOy5B,OAAO9mH,GAAG,IAClE3iC,KAAKgwH,OAAOy5B,OAAO9mH,GAAG,GAC1B+mH,EACI3qI,KAAKE,UAAYjf,KAAKgwH,OAAO05B,OAAO/mH,GAAG,GAAK3iC,KAAKgwH,OAAO05B,OAAO/mH,GAAG,IAClE3iC,KAAKgwH,OAAO05B,OAAO/mH,GAAG,GAC1BlxB,EACIsN,KAAKE,UAAYjf,KAAKgwH,OAAOv+G,MAAMkxB,GAAG,GAAK3iC,KAAKgwH,OAAOv+G,MAAMkxB,GAAG,IAAM3iC,KAAKgwH,OAAOv+G,MAAMkxB,GAAG,EAC/F,OAIRguG,EAAapxH,SAASL,EAAI65G,EAC1B4X,EAAapxH,SAASH,EAAI45G,EAC1B2X,EAAahxH,MAAMT,EAAIyxH,EAAahqI,MAAQ,EAC5CgqI,EAAahxH,MAAMP,EAAIuxH,EAAa/pI,OAAS,EAC7C+pI,EAAal/H,MAAMyN,EAAIzN,EACvBk/H,EAAal/H,MAAM2N,EAAI3N,EAEU,GAA7BsN,KAAK+0B,MAAM/0B,KAAKE,YAChBwqI,GAAUA,GAGmB,GAA7B1qI,KAAK+0B,MAAM/0B,KAAKE,YAChByqI,GAAUA,GAGd1pJ,KAAKkpJ,QAAQl2I,KAAK29H,GAClB3wI,KAAKiS,SAAS0+H,GACd3wI,KAAKmpJ,YAAYn2I,MAAMy2I,EAAQC,IAyBnC1pJ,KAAK2pJ,MAAQ,GAAIx/I,MAAKyf,SACtB5pB,KAAK4pJ,WAAW5pJ,KAAK2pJ,MAAO,GAC5B3pJ,KAAKspJ,eAGTL,kBAAAnoJ,UAAAwoJ,YAAA,WACI,GAAI9vI,GAAQxZ,IACZwZ,GAAMqwI,UACN7pJ,KAAK8Z,OAAOnE,MAAM,IAGtBszI,kBAAAnoJ,UAAA+oJ,QAAA,WACI7pJ,KAAK2pJ,MAAMrhI,OAEX,KAAK,GAAIvoB,GAAI,EAAGA,EAAIC,KAAKkpJ,QAAQh9I,OAAQnM,IAAK,CAC1CC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,GAAKlf,KAAKmpJ,YAAYppJ,GAAG,GAClDC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,GAAKpf,KAAKmpJ,YAAYppJ,GAAG,GAE9CC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,EAAI,MAC7Blf,KAAKmpJ,YAAYppJ,GAAG,OACpBC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,EAAI,MACtBlf,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,EAAI,IACpClf,KAAKmpJ,YAAYppJ,GAAG,OACpBC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,EAAI,GAG7Blf,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,EAAI,MAC7Bpf,KAAKmpJ,YAAYppJ,GAAG,OACpBC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,EAAI,MACtBpf,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,EAAI,IACpCpf,KAAKmpJ,YAAYppJ,GAAG,OACpBC,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,EAAI,EAIjC,KAAK,GADD0qI,IAAS,EACJzuG,EAAI,EAAGA,EAAIr7C,KAAKqpJ,qBAAqBn9I,OAAQmvC,IAE9Cr7C,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,GAAKpf,KAAKqpJ,qBAAqBhuG,GAAG,IAC3Dr7C,KAAKkpJ,QAAQnpJ,GAAGwf,SAASH,GAAKpf,KAAKqpJ,qBAAqBhuG,GAAG,IAC3Dr7C,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,GAAKlf,KAAKopJ,oBAAoB/tG,GAAG,IAC1Dr7C,KAAKkpJ,QAAQnpJ,GAAGwf,SAASL,GAAKlf,KAAKopJ,oBAAoB/tG,GAAG,KAE1DyuG,GAAS,EAIjB,IAAIA,EAAQ,CACJ9pJ,KAAKkpJ,QAAQnpJ,GAAGoe,MAAQ,IACxBne,KAAKkpJ,QAAQnpJ,GAAGoe,OAAS,MAG7B,KAAK,GAAIwkB,GAAI5iC,EAAG4iC,EAAI3iC,KAAKkpJ,QAAQh9I,OAAQy2B,IACrC,GAAI5iC,EAAIC,KAAKq6F,QAAU13D,EAAI3iC,KAAKq6F,OAAQ,CACpC,GAAI9Q,GAAWxqE,KAAKkkB,KAChBlkB,KAAKiV,IAAIh0B,KAAKkpJ,QAAQvmH,GAAGzjB,EAAIlf,KAAKkpJ,QAAQnpJ,GAAGmf,EAAG,GAC5CH,KAAKiV,IAAIh0B,KAAKkpJ,QAAQvmH,GAAGvjB,EAAIpf,KAAKkpJ,QAAQnpJ,GAAGqf,EAAG,IAEpDwsB,EAAU,EAAI29C,EAAWvpF,KAAKgwH,OAAO4H,MAErChsF,GAAU,IACNA,EAAU5rC,KAAKgwH,OAAO+5B,YACtBn+G,EAAU5rC,KAAKgwH,OAAO+5B,WAE1B/pJ,KAAK2pJ,MACAnhI,UAAUxoB,KAAKgwH,OAAOg6B,UAAWhqJ,KAAKgwH,OAAOi6B,UAAWr+G,GACxDs+G,OAAOlqJ,KAAKkpJ,QAAQnpJ,GAAGmf,EAAGlf,KAAKkpJ,QAAQnpJ,GAAGqf,GAC1C+qI,OAAOnqJ,KAAKkpJ,QAAQvmH,GAAGzjB,EAAGlf,KAAKkpJ,QAAQvmH,GAAGvjB,SAKvDpf,MAAKkpJ,QAAQnpJ,GAAGoe,MAAQ,KACxBne,KAAKkpJ,QAAQnpJ,GAAGoe,OAAS,SAMlC8qI,kBAAAnoJ,UAAA6d,gBAAP,SAAuBoF,GACnB,MAAOA,IAAWhF,KAAKsH,GAAK,MAQhC4iI,kBAAAnoJ,UAAAwc,MAAA,WACI,GAAIjU,GAA6B,GAAI4/I,kBACrC5/I,GAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,OACvB,IAAIhC,GAAgB3U,SAASkX,cAAc,WAI3C,OAHAvC,GAAKxR,aAAa,SAAUtM,KAAKm1H,YACjC9rH,EAAQ1H,OAAOmc,GACfzU,EAAQwU,gBACDxU,GA5Of4/I,kBAAArtI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB/H4wsCxBqiI,oB+H3wsC+BztI,EAAAG,YAA1Btb,GAAA4oJ,kBAAiBA,EA+OjB5oJ,EAAAkpJ,6BAwBTr0B,WAAY,YACZk1B,QAAS,SACTC,QAAS,SACTr1B,UAAW,WACXM,WAAY,YAEZ/2G,MAAO,QAEPe,MAAO,QASP+H,MAAO,QACPkuG,MAAO,QACPC,SAAU,WACV7D,KAAM,OAONX,KAAM,OACNoJ,WAAY,QACZkwB,YAAa,SACb7vB,YAAa,SACbD,gBAAiB,YACjBG,OAAQ,IACRC,OAAQ,IACRzyG,OAAQ,SACRoiI,UAAW,YACXC,uBAAwB,uBACxBC,sBAAuB,sBACvB3iI,WAAY,YACZF,WAAY,YACZ8iI,WAAY,c/H+/rCV,SAASpqJ,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GgIz0sCjEna,EAAAzB,EAAwC,GACxCic,EAAAjc,EAA+B,IAC/B+xG,EAAA/xG,EAA0B,IAU1BiqB,EAAA,WACI,QAAAA,kBAuDJ,MAhDWA,eAAAtpB,UAAAa,OAAP,SAAcmc,EAAe6sI,GACzB,GAAI7sI,EAAKU,aAAane,EAAAuqJ,wBAAwBC,eAEV,MAA5B34C,EAAA7nF,UAAU8nF,gBAC2E,MAArFD,EAAA7nF,UAAU8nF,eAAer0F,EAAKe,aAAaxe,EAAAuqJ,wBAAwBC,eACrE,CACE,GAAIC,GAAc54C,EAAA7nF,UAAU8nF,eAAer0F,EAAKe,aAAaxe,EAAAuqJ,wBAAwBC,cAE/D,OAAlBF,EACAG,EAAY9sI,aAAa2sI,GAEzBG,EAAY9sI,aAAaF,KAUzCjd,OAAAmD,eAAWomB,cAAAtpB,UAAA,iBhIuzsCNmD,IgIvzsCL,WACI,MAAQjE,MAAa8c,mBhIyzsCpB3Y,YAAY,EACZC,cAAc,IgIjzsCTgmB,cAAAtpB,UAAAsX,IAAV,SAAcC,KAWJ+R,cAAAtpB,UAAA4gB,SAAV,SAAmBrJ,KAnDvB+R,cAAAxO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeyD,gBhIy2sCxBA,iBgIx2sCK/pB,GAAA+pB,cAAaA,EA0Db/pB,EAAAuqJ,yBACTC,aAAc,ehIwzsCZ,SAASvqJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GiI34sCjEna,EAAAzB,EAA4C,GAC5Cic,EAAAjc,EAA+B,IAC/Bqb,EAAArb,EAA4B,IAC5B4qJ,EAAA5qJ,EAA0B,KAG1B6qJ,EAAA,SAAA7nJ,GAAsC5B,EAAAypJ,iBAAA7nJ,EAAtC,SAAA6nJ,oBAAsC7nJ,EAAA9B,MAAArB,KAAAoD,WAgBtC,MAfI4nJ,kBAAAlqJ,UAAAid,aAAA,SAAaD,KAIbktI,iBAAAlqJ,UAAAkd,aAAA,SAAaF,GACT,GAAIA,EAAKU,aAAane,EAAA4qJ,2BAA2BC,SAAU,CACvD,GAAMC,GAAUvpJ,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAaxe,EAAA4qJ,2BAA2BC,SACpFH,GAAAK,UAAUC,QAAQF,KAI1BH,iBAAAlqJ,UAAAwc,MAAA,WACI,GAAMjU,GAA4B,GAAI2hJ,iBACtC,OAAO3hJ,IAff2hJ,iBAAApvI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBjI+5sCxBokI,mBiI95sC8BxvI,EAAAG,YAAzBtb,GAAA2qJ,iBAAgBA,EAkBhB3qJ,EAAA4qJ,4BACTC,QAAS,YjIs5sCP,SAAS5qJ,EAAQD,EAASF,GAE/B,YkIj7sCD,IAAAyC,GAAAzC,EAA4B,IAE5BirJ,EAAA,mBAAAA,cAsBA,MAXkBA,WAAAC,QAAd,SAAsBF,GAAA,SAAAA,MAAA,GACbvoJ,EAAA6F,YAAYwgE,kBAIQ,MAArBt1D,UAAU03I,SAId13I,UAAU03I,QAAQF,IAE1BC,YAtBa/qJ,GAAA+qJ,UAASA,GlIq8sChB,SAAS9qJ,EAAQD,GAEtB,cAKD,IAEM,SAASC,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmI59sCjEna,EAAAzB,EAA6C,GAC7C6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAC/BgvH,EAAAhvH,EAA4B,IAU5BmrJ,EAAA,SAAAnoJ,GAAoC5B,EAAA+pJ,eAAAnoJ,EAmBhC,SAAAmoJ,kBACInoJ,EAAA1C,KAAAT,MAGAA,KAAK4rH,UAAY,GACjB5rH,KAAKiwH,WAAa,EAClBjwH,KAAK2wH,MAAQ,EACb3wH,KAAK6tF,MAAO,EACZ7tF,KAAK0V,MAAO,EA2DpB,MAlDI41I,gBAAAxqJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAQb9d,KAAK8d,KAAOA,EAERA,EAAKU,aAAane,EAAAkrJ,yBAAyBxvB,aAC3C/7H,KAAK4rH,UAAY9tG,EAAKe,aAAaxe,EAAAkrJ,yBAAyBxvB,YAG5Dj+G,EAAKU,aAAane,EAAAkrJ,yBAAyBC,eAC3CxrJ,KAAKiwH,WAAa/5G,SAAS4H,EAAKe,aAAaxe,EAAAkrJ,yBAAyBC,eAGtE1tI,EAAKU,aAAane,EAAAkrJ,yBAAyBE,aAC3CzrJ,KAAKkwH,SAAWh6G,SAAS4H,EAAKe,aAAaxe,EAAAkrJ,yBAAyBE,aAGpE3tI,EAAKU,aAAane,EAAAkrJ,yBAAyBpe,QAC3CntI,KAAK6tF,KAAOjsF,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAkrJ,yBAAyBpe,QAGhFrvH,EAAKU,aAAane,EAAAkrJ,yBAAyB55B,QAC3C3xH,KAAK0V,KAAO9T,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAkrJ,yBAAyB55B,QAGhF7zG,EAAKU,aAAane,EAAAkrJ,yBAAyBhuD,SAC3Cv9F,KAAK2wH,MAAQ/xG,WAAWd,EAAKe,aAAaxe,EAAAkrJ,yBAAyBhuD,SAGnEz/E,EAAKU,aAAane,EAAAkrJ,yBAAyBhtI,SAC3Cve,KAAKme,MAAQS,WAAWd,EAAKe,aAAaxe,EAAAkrJ,yBAAyBhtI,SAGnET,EAAKU,aAAane,EAAAkrJ,yBAAyBv6B,QAC3ChxH,KAAK0pB,KAAOxT,SAAS4H,EAAKe,aAAaxe,EAAAkrJ,yBAAyBv6B,MAAO,KAGvElzG,EAAKU,aAAane,EAAAkrJ,yBAAyBr2B,cAC3Cl1H,KAAK2pB,UAAYwlG,EAAAyB,YAAYC,aAAa36G,SAAS4H,EAAKe,aAAaxe,EAAAkrJ,yBAAyBr2B,eAE9Fp3G,EAAKU,aAAane,EAAAkrJ,yBAAyB75B,WAC3C1xH,KAAK62B,QAAUj1B,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAkrJ,yBAAyB75B,YApF/F45B,eAAA1vI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QnIogtCxBqhI,iBmIngtC4Bt8B,EAAA/kG,MAAvB5pB,GAAAirJ,eAAcA,EAwFdjrJ,EAAAkrJ,0BAOTxvB,UAAW,YAOXyvB,YAAa,aAQbC,UAAW,WAOXte,KAAM,OAONxb,KAAM,OAONp0B,MAAO,QAOPh/E,MAAO,QAOPyyG,KAAM,OAyBNkE,WAAY,YAOZxD,QAAS,YnIs2sCP,SAASpxH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoIhjtCjEna,EAAAzB,EAAgC,GAChC6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAC/BurJ,EAAAvrJ,EAA4C,KAC5C+B,EAAA/B,EAAgC,GAKhCwrJ,EAAA,SAAAxoJ,GAAqC5B,EAAAoqJ,gBAAAxoJ,EA8BjC,SAAAwoJ,mBACIxoJ,EAAA1C,KAAAT,MAEAA,KAAK29H,OAAS,EACd39H,KAAK4rJ,WACL5rJ,KAAK89H,WACL99H,KAAK6rJ,UACL7rJ,KAAKooB,QAAU,IACfpoB,KAAK8rJ,WAAa,EAClB9rJ,KAAK+rJ,WACL/rJ,KAAKgsJ,WACLhsJ,KAAK2nB,WAAa,EAClB3nB,KAAK6nB,WAAa,EAClB7nB,KAAKisJ,WAAa,EAClBjsJ,KAAKksJ,yBACLlsJ,KAAKmsJ,wBAiLb,MAxKIR,iBAAA7qJ,UAAAa,OAAA,SAAOmc,GACH9d,KAAK8d,KAAOA,EAEZ3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAKs+H,mBAAmBxgH,IAGpB6tI,gBAAA7qJ,UAAAw9H,mBAAR,SAA2BxgH,GAEvB,IADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAKytI,iBAAgBhtB,WACjB3+H,KAAK4+H,iBAAiBt1G,EACtB,MACJ,KAAKqiI,iBAAgBS,aACjBpsJ,KAAKqsJ,mBAAmB/iI,GAOhCA,EAAOA,EAAKG,qBAIpB5oB,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,SpIugtCCmD,IoIvgtCL,WACI,MAAOjE,MAAK29H,QpIygtCXx5H,YAAY,EACZC,cAAc,IoIvgtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,UpI0gtCCmD,IoI1gtCL,WACI,MAAOjE,MAAK4rJ,SpI4gtCXznJ,YAAY,EACZC,cAAc,IoI1gtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,UpI6gtCCmD,IoI7gtCL,WACI,MAAOjE,MAAK89H,SpI+gtCX35H,YAAY,EACZC,cAAc,IoI7gtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,SpIghtCCmD,IoIhhtCL,WACI,MAAOjE,MAAK6rJ,QpIkhtCX1nJ,YAAY,EACZC,cAAc,IoIhhtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,UpImhtCCmD,IoInhtCL,WACI,MAAOjE,MAAK+rJ,SpIqhtCX5nJ,YAAY,EACZC,cAAc,IoInhtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,UpIshtCCmD,IoIthtCL,WACI,MAAOjE,MAAKgsJ,SpIwhtCX7nJ,YAAY,EACZC,cAAc,IoIthtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,apIyhtCCmD,IoIzhtCL,WACI,MAAOjE,MAAKisJ,YpI2htCX9nJ,YAAY,EACZC,cAAc,IoIzhtCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,UpI4htCCmD,IoI5htCL,WACI,MAAOjE,MAAKooB,SpI8htCXjkB,YAAY,EACZC,cAAc,IoI5htCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,apI+htCCmD,IoI/htCL,WACI,MAAOjE,MAAK8rJ,YpIiitCX3nJ,YAAY,EACZC,cAAc,IoI/htCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,apIkitCCmD,IoIlitCL,WACI,MAAOjE,MAAK2nB,YpIoitCXxjB,YAAY,EACZC,cAAc,IoIlitCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,apIqitCCmD,IoIritCL,WACI,MAAOjE,MAAK6nB,YpIuitCX1jB,YAAY,EACZC,cAAc,IoIritCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,uBpIwitCCmD,IoIxitCL,WACI,MAAOjE,MAAKmsJ,sBpI0itCXhoJ,YAAY,EACZC,cAAc,IoIxitCnBvD,OAAAmD,eAAI2nJ,gBAAA7qJ,UAAA,wBpI2itCCmD,IoI3itCL,WACI,MAAOjE,MAAKksJ,uBpI6itCX/nJ,YAAY,EACZC,cAAc,IoI3itCXunJ,gBAAA7qJ,UAAA89H,iBAAR,SAAyB9gH,GACrB,GAAIA,EAAKU,aAAaktI,EAAAnC,4BAA4B/uB,iBAAkB,CAChEx6H,KAAK89H,QAAUhgH,EAAKe,aAAa6sI,EAAAnC,4BAA4B/uB,iBAAiBx0G,MAAM,IAEpF,KAAK,GAAIjmB,GAAY,EAAGA,EAAIC,KAAK89H,QAAQ5xH,OAAQnM,IAE7CC,KAAK89H,QAAQ/9H,GAAKC,KAAK89H,QAAQ/9H,GAAK,WAEjC+d,GAAKU,aAAaktI,EAAAnC,4BAA4B9uB,eACrDz6H,KAAK89H,QAAUhgH,EAAKe,aAAa6sI,EAAAnC,4BAA4B9uB,aAAaz0G,MAAM,KAIpF,IAAIlI,EAAKU,aAAaktI,EAAAnC,4BAA4BjqI,OAG9C,IAAK,GAFDgtI,GAASxuI,EAAKe,aAAa6sI,EAAAnC,4BAA4BjqI,OAAO0G,MAAM,KAE/DjmB,EAAI,EAAGA,EAAIusJ,EAAOpgJ,OAAQnM,IAC/BC,KAAK6rJ,OAAO74I,KAAKs5I,EAAOvsJ,GAAGimB,MAAM,KAAK5D,IAAI6Z,QAIlD,IAAIne,EAAKU,aAAaktI,EAAAnC,4BAA4Be,aAAc,CAE5D,IAAK,GADDjwD,GAASv8E,EAAKe,aAAa6sI,EAAAnC,4BAA4Be,aAAatkI,MAAM,KAAK5D,IAAI6Z,QAC9El8B,EAAI,EAAGA,EAAIs6F,EAAOnuF,OAAQnM,IACtB,GAALA,EACAC,KAAK4rJ,QAAQ54I,KAAKqnF,EAAOt6F,IAEzBC,KAAK4rJ,QAAQ54I,KAAKqnF,EAAOt6F,GAAKC,KAAK4rJ,QAAQ7rJ,EAAI,GAGvDC,MAAK29H,OAAS39H,KAAK4rJ,QAAQ5rJ,KAAK4rJ,QAAQ1/I,OAAS,KAIjDy/I,gBAAA7qJ,UAAAurJ,mBAAR,SAA2BvuI,GACvB,GAAIA,EAAKU,aAAaktI,EAAAnC,4BAA4Ba,SAE9C,IAAK,GADDX,GAAS3rI,EAAKe,aAAa6sI,EAAAnC,4BAA4Ba,SAASpkI,MAAM,KACjEjmB,EAAI,EAAGA,EAAI0pJ,EAAOv9I,OAAQnM,IAC/BC,KAAK+rJ,QAAQ/4I,KAAKy2I,EAAO1pJ,GAAGimB,MAAM,KAAK5D,IAAI6Z,QAInD,IAAIne,EAAKU,aAAaktI,EAAAnC,4BAA4Bc,SAE9C,IAAK,GADDX,GAAS5rI,EAAKe,aAAa6sI,EAAAnC,4BAA4Bc,SAASrkI,MAAM,KACjEjmB,EAAI,EAAGA,EAAI2pJ,EAAOx9I,OAAQnM,IAC/BC,KAAKgsJ,QAAQh5I,KAAK02I,EAAO3pJ,GAAGimB,MAAM,KAAK5D,IAAI6Z,QAwBnD,IApBIne,EAAKU,aAAaktI,EAAAnC,4BAA4BphI,UAC9CnoB,KAAKooB,QAAUlS,SAAS4H,EAAKe,aAAa6sI,EAAAnC,4BAA4BphI,UAGtErK,EAAKU,aAAaktI,EAAAnC,4BAA4BgB,aAC9CvqJ,KAAK8rJ,WAAa51I,SAAS4H,EAAKe,aAAa6sI,EAAAnC,4BAA4BgB,aAGzEzsI,EAAKU,aAAaktI,EAAAnC,4BAA4BmB,cAC9C1qJ,KAAKisJ,WAAartI,WAAWd,EAAKe,aAAa6sI,EAAAnC,4BAA4BmB,cAG3E5sI,EAAKU,aAAaktI,EAAAnC,4BAA4B3hI,cAC9C5nB,KAAK2nB,WAAazR,SAAS4H,EAAKe,aAAa6sI,EAAAnC,4BAA4B3hI,cAGzE9J,EAAKU,aAAaktI,EAAAnC,4BAA4BzhI,cAC9C9nB,KAAK6nB,WAAa3R,SAAS4H,EAAKe,aAAa6sI,EAAAnC,4BAA4BzhI,YAAa,KAGtFhK,EAAKU,aAAaktI,EAAAnC,4BAA4BkB,uBAE9C,IAAK,GADD8B,GAAYzuI,EAAKe,aAAa6sI,EAAAnC,4BAA4BkB,uBAAuBzkI,MAAM,KAClFjmB,EAAI,EAAGA,EAAIwsJ,EAAUrgJ,OAAQnM,IAAK,CACvC,GAAI4G,GAAQ4lJ,EAAUxsJ,GAAGimB,MAAM,KAAK5D,IAAI,SAAUzb,GAC9C,MAAQiY,YAAWjY,GAAS,IAAOzE,EAAAsD,gBAAgB+K,OAEvDvQ,MAAKmsJ,qBAAqBn5I,KAAKrM,GAIvC,GAAImX,EAAKU,aAAaktI,EAAAnC,4BAA4BiB,wBAE9C,IAAK,GADDgC,GAAa1uI,EAAKe,aAAa6sI,EAAAnC,4BAA4BiB,wBAAwBxkI,MAAM,KACpFjmB,EAAI,EAAGA,EAAIysJ,EAAWtgJ,OAAQnM,IAAK,CACxC,GAAI6G,GAAS4lJ,EAAWzsJ,GAAGimB,MAAM,KAAK5D,IAAI,SAAUxb,GAChD,MAAQgY,YAAWhY,GAAU,IAAO1E,EAAAsD,gBAAgBgL,QAExDxQ,MAAKksJ,sBAAsBl5I,KAAKpM,KAxNrC+kJ,gBAAAnrB,gBAA0B,GAG1BmrB,gBAAAhtB,WAAqB,SACrBgtB,gBAAAS,aAAuB,WACvBT,gBAAAc,SAAmB,OAT9Bd,gBAAA/vI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QpIswtCxB0hI,kBoIpwtC6B38B,EAAA/kG,MAAxB5pB,GAAAsrJ,gBAAeA,GpI4wtCtB,SAASrrJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GqIjytCjEna,EAAAzB,EAAgC,GAChC6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAe/BusJ,EAAA,SAAAvpJ,GAAoC5B,EAAAmrJ,eAAAvpJ,EAGhC,SAAAupJ,kBACIvpJ,EAAA1C,KAAAT,MAeR,MANI0sJ,gBAAA5rJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAGb9d,KAAK8d,KAAOA,GAlBpB4uI,eAAA9wI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QrIiytCxByiI,iBqIhytC4B19B,EAAA/kG,MAAvB5pB,GAAAqsJ,eAAcA,GrIwytCrB,SAASpsJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsIr0tCjEna,EAAAzB,EAAgC,GAChC6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAG/BwsJ,EAAA,SAAAxpJ,GAAiC5B,EAAAorJ,YAAAxpJ,EAG7B,SAAAwpJ,eACIxpJ,EAAA1C,KAAAT,MAQR,MALI2sJ,aAAA7rJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK8d,KAAOA,GAXpB6uI,YAAA/wI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QtIi1tCxB0iI,csIh1tCyB39B,EAAA/kG,MAApB5pB,GAAAssJ,YAAWA,GtIw1tClB,SAASrsJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GuIz2tCjEna,EAAAzB,EAA6C,GAC7C6uH,EAAA7uH,EAAsB,IACtBic,EAAAjc,EAA+B,IAU/BysJ,EAAA,SAAAzpJ,GAAgC5B,EAAAqrJ,WAAAzpJ,EAM5B,SAAAypJ,cACIzpJ,EAAA1C,KAAAT,MAwBR,MAfI4sJ,YAAA9rJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAQb9d,KAAK8d,KAAOA,EAERA,EAAKU,aAAaquI,EAAqBjlI,cACvC5nB,KAAKgqJ,UAAY9zI,SAAS4H,EAAKe,aAAaguI,EAAqBjlI,eA7B7EglI,WAAAhxI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QvIi3tCxB2iI,auIh3tCwB59B,EAAA/kG,MAAnB5pB,GAAAusJ,WAAUA,CAiCvB,IAAMC,IACFjlI,WAAY,cvIy1tCV,SAAStnB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwIn5tCjEna,EAAAzB,EAAgC,GAChC6uH,EAAA7uH,EAAsB,IACtBi8G,EAAAj8G,EAAiC,IACjCic,EAAAjc,EAA+B,IAgC/B2sJ,EAAA,SAAA3pJ,GAAmC5B,EAAAurJ,cAAA3pJ,EAS/B,SAAA2pJ,iBACI3pJ,EAAA1C,KAAAT,MAEAA,KAAKotI,UACLptI,KAAKmuI,gBAqEb,MA5DI2e,eAAAhsJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,EAGb,KADA,GAAIwL,GAAgBxL,EAAKyL,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKpL,UACT,IAAK,WACDle,KAAKw3C,UAAY,GAAI4kE,GAAA0B,iBACrB99G,KAAKw3C,UAAU71C,OAAO2nB,EACtB,MACJ,KAAK,WAED,IADA,GAAI4lG,GAAoB5lG,EAAKC,kBACV,MAAZ2lG,GACCA,EAAS1wG,aAAa,UAC8B,OAAhDxe,KAAKotI,OAAOle,EAASrwG,aAAa,YAClC7e,KAAKotI,OAAOle,EAASrwG,aAAa,UAAYqwG,GAY5B,UAAtBA,EAAShxG,WACTle,KAAKigF,MAAQivC,GAEjBA,EAAWA,EAASzlG,kBAExB,MACJ,KAAK,gBAED,IADA,GAAIylG,GAAoB5lG,EAAKC,kBACV,MAAZ2lG,GACCA,EAAS1wG,aAAa,UACoC,OAAtDxe,KAAKmuI,aAAajf,EAASrwG,aAAa,YACxC7e,KAAKmuI,aAAajf,EAASrwG,aAAa,UAAYqwG,GAYlC,UAAtBA,EAAShxG,WACTle,KAAK2tI,YAAcze,GAEvBA,EAAWA,EAASzlG,mBAIhCH,EAAOA,EAAKG,qBAhFxBqjI,cAAAlxI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAesD,QxIy7tCxB6iI,gBwIx7tC2B99B,EAAA/kG,MAAtB5pB,GAAAysJ,cAAaA,GxIg8tCpB,SAASxsJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MyIx+tCpFqwG,GADA3xG,EAAuB,GACvBA,EAAyB,KAOzB4sJ,EAAA,SAAA5pJ,GAAiC5B,EAAAwrJ,YAAA5pJ,EAAjC,SAAA4pJ,eAAiC5pJ,EAAA9B,MAAArB,KAAAoD,WAkCjC,MAzBW2pJ,aAAAC,YAAP,SAAmBzsJ,GACf,MAAmB,OAAfP,KAAKitJ,OACEjtJ,KAAKitJ,OAAO1sJ,GAShB,MASJwsJ,YAAA30I,IAAP,SAAWC,KA5BJ00I,YAAAE,UAiCXF,aAlCiCj7C,EAAAG,SAApB5xG,GAAA0sJ,YAAWA,GzIqguClB,SAASzsJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G0IzhuCjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IAErCgC,EAAAhC,EAAkC,IAClC8C,EAAA9C,EAA6B,IAC7B8B,EAAA9B,EAAwB,GACxBiC,EAAAjC,EAA0B,IAG1B+sJ,EAAA,SAAA/pJ,GAAsC5B,EAAA2rJ,iBAAA/pJ,EAAtC,SAAA+pJ,oBAAsC/pJ,EAAA9B,MAAArB,KAAAoD,WA2HtC,MArGI8pJ,kBAAApsJ,UAAAa,OAAA,SAAOmc,GACE3b,EAAAwD,kBAAkBmnG,cAAcogD,iBAAiBC,qBAItDhqJ,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb3b,EAAAwD,kBAAkBgnG,0BAA0B3sG,MAC5CA,KAAKotJ,cACLptJ,KAAKsP,SAASkgC,YACdxvC,KAAKsP,SAAShG,UAAU6N,OAAO,aAE/B+1I,iBAAiBpqD,aAAc,EAC/BoqD,iBAAiB59I,SAAWtP,KAE5BiD,EAAA6G,aAAa05F,mBAAmBxjG,QAG5BktJ,iBAAApsJ,UAAAssJ,YAAR,WAKI,GAJAptJ,KAAKqtJ,iBAAmBlkJ,SAASC,eAAe,qBAChDpJ,KAAKstJ,oBAAsBnkJ,SAASC,eAAe,wBACnDpJ,KAAKutJ,oBAAsBpkJ,SAASC,eAAe,gBAEtB,MAAzBpJ,KAAKqtJ,iBAA0B,CAC/B,GAAIG,GAAcrkJ,SAASC,eAAe,cAEvB,OAAfokJ,IACAxtJ,KAAKqtJ,iBAAiBx7I,MAAMlL,MAAQ6mJ,EAAY37I,MAAMlL,OAI9D,GAAgC,MAA5B3G,KAAKstJ,oBAA6B,CAClC,GAAIG,GAAiBtkJ,SAASC,eAAe,iBAEvB,OAAlBqkJ,IACAztJ,KAAKstJ,oBAAoB/wF,YAAckxF,EAAelxF,eAS3D2wF,iBAAApsJ,UAAAyiG,mBAAP,SAA0B1vE,GACtB7zB,KAAKm1B,UAAYtB,EAEK,MAAlB7zB,KAAKm1B,YAC2B,MAA5Bn1B,KAAKutJ,qBACLvtJ,KAAKutJ,oBAAoBx7I,iBAAiB,QAAS/R,KAAKm1B,WAG5Dn1B,KAAK0tJ,eAAiB1tJ,KAAK2tJ,QAAQt5I,KAAKrU,MACxCmJ,SAAS4I,iBAAiB,QAAS/R,KAAK0tJ,iBAE5C1tJ,KAAKsP,SAAShG,UAAUC,IAAI,YAGxB2jJ,iBAAApsJ,UAAA6sJ,QAAR,SAAgB/4I,GACS,IAAjBA,EAAM41F,UACNrhG,SAASm/C,oBAAoB,QAAStoD,KAAK0tJ,gBAErB,MAAlB1tJ,KAAKm1B,WACLn1B,KAAKm1B,cAKV+3H,iBAAApsJ,UAAAo2E,iBAAP,WACQl3E,KAAKsP,SAASwI,gBACd3O,SAASm/C,oBAAoB,QAAStoD,KAAK0tJ,gBAC3C1tJ,KAAKsP,SAASwI,cAAc2O,YAAYzmB,KAAKsP,YAI9C49I,iBAAApsJ,UAAAiJ,UAAP,WACI/J,KAAKsP,SAAShG,UAAUC,IAAI,SAE5B,IAAIkkJ,GAAiBtkJ,SAASC,eAAe,oBAC7CqkJ,GAAejkJ,UAAYvH,EAAAwH,QAAQjJ,OAC7B4B,EAAAsH,UAAUC,OAAO,aACjB,2CAOHujJ,iBAAApsJ,UAAA2sG,gBAAP,SAAuBhzC,KAIhByyF,iBAAApsJ,UAAA+sG,iBAAP,SAAwB30E,GACS,MAAzBl5B,KAAKqtJ,mBACLrtJ,KAAKqtJ,iBAAiBx7I,MAAMlL,MAAQuyB,EAAW,KAGnB,MAA5Bl5B,KAAKstJ,sBACLttJ,KAAKstJ,oBAAoB/wF,YAAcrjC,EAAW,MAnH5Cg0H,iBAAAC,kBAA4B,SAE5BD,iBAAApqD,aAAuB,EAEtBoqD,iBAAA59I,SAA6B,KAVhD49I,iBAAAtxI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c1I2muCxBojI,mB0I1muC8B51C,EAAAa,qBAAzB93G,GAAA6sJ,iBAAgBA,G1IknuCvB,SAAS5sJ,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G2InouCjEna,EAAAzB,EAA6E,GAM7EuC,EAAAvC,EAA+B,IAC/Bic,EAAAjc,EAA+B,IAE/BqC,EAAArC,EAA2B,GAC3B8zG,EAAA9zG,EAA6B,IAC7BsO,EAAAtO,EAA8B,IAC9BiC,EAAAjC,EAA0B,IAmB1BytJ,EAAA,mBAAAA,mBAuQA,MAjPIA,gBAAA9sJ,UAAAa,OAAA,SAAOmc,GACH9d,KAAKsP,SAAWnG,SAASiiC,gBAAgB,6BAA8BttB,EAAKI,UAE9C,GAA1BJ,EAAKowH,mBAA8C,IAApBpwH,EAAKy+C,cACpCv8D,KAAKsP,SAASitD,YAAcz+C,EAAKy+C,aAGjCz+C,EAAKU,aAAa,SAClBxe,KAAKghE,IAAMljD,EAAKe,aAAa,OAC7Bnc,EAAA0F,eAAe6D,YAAY+G,KAAKhT,MAChCA,KAAKi4F,WAGTj4F,KAAK4pG,OAASgkD,eAAe95F,cAAch2C,EAAM9d,KAEjD,KAAK,GAAID,GAAI,EAAGA,EAAI+d,EAAK25B,WAAWvrC,OAAQnM,IAAK,CAC7C,GAAIs0D,GAAYv2C,EAAK25B,WAAW13C,GAC5B8tJ,EAAgBx5F,EAAUp2C,IAE9B,IAAqB,OAAjB4vI,GAA2C,SAAjBA,EAA9B,CAIA,OAAQA,EAAcjjJ,eAClB,IAAK,WAAWA,cACZijJ,EAAgB,QAIxB7tJ,KAAKsP,SAAShD,aAAauhJ,EAAex5F,EAAUtnD,UAM5D6gJ,eAAA9sJ,UAAAm3F,QAAA,SAAQlrF,GACJ,GAAIm0D,GAAe,EAOnB,IALa,MAATn0D,IACAm0D,EAAOn0D,EACP/M,KAAK+gE,aAAeh0D,GAGH,MAAjB/M,KAAKsP,SAAkB,CAEvB,GAAgB,MAAZtP,KAAKghE,KAC6B,MAA9B5+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,KACtB,GAAKp/D,EAAA4I,YAAYC,cAAcy2D,GAQ3BA,EAAO9+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,SARK,CAClC,GAAIm5C,GAAuBj5C,EAAKl7C,MAAM,IAElCk7C,GADiB,IAAjBi5C,EAAMjuG,OACC9J,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKm5C,EAAM,GAAIA,EAAM,IAE3C/3G,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKE,GAS9B,MAAhBlhE,KAAKihE,UACLC,EAAO9+D,EAAAsH,UAAUg3D,WAAW1gE,KAAKihE,QAASC,IAIxB,MAAlBlhE,KAAKohE,YACLF,EAAO9+D,EAAAsH,UAAUy3D,WAAWnhE,KAAKohE,UAAWF,GAExClhE,KAAKohE,YAAch/D,EAAAsH,UAAU23D,cAAgBrhE,KAAKsP,SAAShG,UAAUiO,SAAS,WACjE,KAAT2pD,EACAlhE,KAAKsP,SAAShG,UAAUC,IAAI,WAE5BvJ,KAAKsP,SAAShG,UAAU6N,OAAO,aAM3CnX,KAAKsP,SAAS9F,UAAY03D,IAQlC0sF,eAAA9sJ,UAAAqL,WAAA,WACI,GAAI+0D,GAAe,EAMnB,IAJyB,MAArBlhE,KAAK+gE,eACLG,EAAOlhE,KAAK+gE,cAGK,MAAjB/gE,KAAKsP,SAAkB,CAEvB,GAAgB,MAAZtP,KAAKghE,KAC6B,MAA9B5+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,KACtB,GAAKp/D,EAAA4I,YAAYC,cAAcy2D,GAQ3BA,EAAO9+D,EAAAsH,UAAUC,OAAO3J,KAAKghE,SARK,CAClC,GAAIm5C,GAAuBj5C,EAAKl7C,MAAM,IAElCk7C,GADiB,IAAjBi5C,EAAMjuG,OACC9J,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKm5C,EAAM,GAAIA,EAAM,IAE3C/3G,EAAAsH,UAAUC,OAAO3J,KAAKghE,IAAKE,GAS9B,MAAhBlhE,KAAKihE,UACLC,EAAO9+D,EAAAsH,UAAUg3D,WAAW1gE,KAAKihE,QAASC,IAIxB,MAAlBlhE,KAAKohE,YACLF,EAAO9+D,EAAAsH,UAAUy3D,WAAWnhE,KAAKohE,UAAWF,GAExClhE,KAAKohE,YAAch/D,EAAAsH,UAAU23D,cAAgBrhE,KAAKsP,SAAShG,UAAUiO,SAAS,WACjE,KAAT2pD,EACAlhE,KAAKsP,SAAShG,UAAUC,IAAI,WAE5BvJ,KAAKsP,SAAShG,UAAU6N,OAAO,aAM3CnX,KAAKsP,SAAS9F,UAAY03D,IAcxB0sF,eAAA9sJ,UAAAsX,IAAV,SAAcC,KAOCu1I,eAAA95F,cAAf,SAA6BC,EAAoBt7B,GAAA,SAAAA,MAAA,KAC7C,IAAMtb,KAEN,IAAK42C,EAyEL,MArEA65F,gBAAe35F,aAAaF,EAAUxqC,sBACjCsN,UACAkV,OACG,SAACjuB,GACG,MAAAA,GAAKU,aAAa,UAClB5c,EAAAsyD,uBAAuBC,SAASr2C,EAAKe,aAAa,SAAUzC,EAAAuK,eAAemD,eAElF0D,QAAQ,SAAC1P,GACN,GAEI61F,GAFEtqG,EAAezH,EAAAsyD,uBAAuBjwD,IAAI6Z,EAAKe,aAAa,UAC5D6b,EAAoBvxB,SAASC,eAAe,OAOlD,IAJI0U,EAAKU,aAAa,YAClBm1F,EAAaxqG,SAASC,eAAe0U,EAAKe,aAAa,YAGvDf,EAAKU,aAAa,OAAQ,CAC1B,IAAKhc,EAAAgC,WAAW2B,eAAeswE,QAAuC,WAA7B34D,EAAKe,aAAa,OACvD,MAGAhe,QAAOitJ,eAAezkJ,YAAoB4qG,GAAAoD,cAC1C5oG,EAAAyB,cAAc4uE,sBAAsBhhE,EAAKe,aAAa,OAAQxV,GAgB9C,MAApBA,EAAQiG,UACM,MAAVmpB,EACAA,EAAOnpB,SAASgC,YAAYjI,EAAQiG,UAElB,MAAdqkG,EACAA,EAAWriG,YAAYjI,EAAQiG,UAChB,MAARorB,EACPA,EAAKppB,YAAYjI,EAAQiG,UAEzBnG,SAASkI,KAAKC,YAAYjI,EAAQiG,UAG1CjG,EAAQ1H,OAAOmc,KAEfzU,EAAQ1H,OAAOmc,GACD,MAAV2a,EACAA,EAAOnpB,SAASgC,YAAYjI,EAAQiG,UAElB,MAAdqkG,EACAA,EAAWriG,YAAYjI,EAAQiG,UAChB,MAARorB,EACPA,EAAKppB,YAAYjI,EAAQiG,UAEzBnG,SAASkI,KAAKC,YAAYjI,EAAQiG,WAK9C6N,EAASW,EAAKI,UAAY7U,IAG3B8T,GAGIywI,eAAA35F,aAAf,SAA4Bn2C,EAAes2C,GACvC,MAAKt2C,IAIDA,EAAK2L,qBACL2qC,EAAWw5F,eAAe35F,aAAan2C,EAAK2L,mBAAoB2qC,IAG7DA,EAAS9yD,OAAOwc,IAPZs2C,GA/PnBw5F,eAAAhyI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c3IqzuCxB8jI,kB2IpzuCKvtJ,GAAAutJ,eAAcA,G3I4zuC3B,IAEM,SAASttJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G4Iz2uCjEna,EAAAzB,EAA0D,GAC1Dic,EAAAjc,EAA+B,IAE/BomE,EAAApmE,EAA2B,IAE3BiC,EAAAjC,EAA0B,IAE1B+kH,EAAA/kH,EAAwC,KAGxC4tJ,EAAA,SAAA5qJ,GAA8C5B,EAAAwsJ,yBAAA5qJ,EAe1C,SAAA4qJ,4BACI5qJ,EAAA1C,KAAAT,MAEAA,KAAKklF,YACLllF,KAAKguJ,iBACLhuJ,KAAKiuJ,gBAwGb,MAjGWF,0BAAAjtJ,UAAAid,aAAP,SAAoBD,GAChB3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAA6tJ,mCAAmCC,aACrDnuJ,KAAKklF,SAAWhvE,SAAS4H,EAAKe,aAAaxe,EAAA6tJ,mCAAmCC,aAG9ErwI,EAAKU,aAAane,EAAA6tJ,mCAAmCE,kBACrDpuJ,KAAKguJ,cAAgB93I,SAAS4H,EAAKe,aAAaxe,EAAA6tJ,mCAAmCE,mBAQpFL,yBAAAjtJ,UAAAkrI,QAAP,WAEQhsI,KAAKguJ,kBAAsBhuJ,KAAKyR,MAAMyN,GAAKlf,KAAKiuJ,cAC5CjuJ,KAAKiuJ,mBACLjuJ,KAAKiuJ,aAAejuJ,KAAKquJ,2BAE7BruJ,KAAK+rI,WAAWt6H,MAAMmL,IAAI5c,KAAKiuJ,eACxBjuJ,KAAKklF,cAEZllF,KAAK+rI,WAAWt6H,MAAMmL,IAAI,GAEtB5c,KAAK+rI,WAAWplI,MAAQ,GACxB3G,KAAK+rI,WAAWt6H,MAAMmL,IAAI5c,KAAKsuJ,qBAIvCnrJ,EAAArC,UAAMkrI,QAAOvrI,KAAAT,OAGP+tJ,yBAAAjtJ,UAAAutJ,wBAAV,WACI,GAA4B,MAAxB9nF,EAAAsD,WAAWiH,UACX,QAGJ,IAAMuN,GAASt/D,KAAKmf,IAAI78B,MAAM,KAAMklE,EAAAsD,WAAWiH,WACzCy9E,EAAgBnsJ,EAAAsH,UAAUg3D,WAC5Bt+D,EAAAsH,UAAUi3D,YACV/+D,EAAA4L,YAAYgvE,SAAS6B,EAAQr+E,KAAKguJ,gBAEhCQ,EAAaxuJ,KAAK+rI,WAAW7qE,KAC/BzvD,EAAQ,CAUZ,OARAzR,MAAK+rI,WAAWt6H,MAAMmL,IAAI,GAC1B5c,KAAK+rI,WAAW7qE,KAAOqtF,EAEF,MAAjBvuJ,KAAKklF,WACLzzE,EAAQzR,KAAKsuJ,mBACbtuJ,KAAK+rI,WAAW7qE,KAAOstF,GAGpB/8I,GAGDs8I,yBAAAjtJ,UAAAwtJ,iBAAV,WACI,GAAM78I,GAAQzR,KAAKklF,SAAWllF,KAAK+rI,WAAWplI,KAC9C,OAAO8K,GAAQ,EAAIA,EAAQ,GAOxBs8I,yBAAAjtJ,UAAAwc,MAAP,WACI,GAAIjU,GAAoC,GAAI0kJ,yBA0B5C,OAzBA1kJ,GAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SAExBrV,EAAQsjI,KAAO3sI,KAAK2sI,KACpBtjI,EAAQ63D,KAAOlhE,KAAKkhE,KACpB73D,EAAQkjI,UAAYvsI,KAAKusI,UACzBljI,EAAQojI,aAAezsI,KAAKysI,aAE5BpjI,EAAQ67E,SAAWllF,KAAKklF,SACxB77E,EAAQ4kJ,aAAejuJ,KAAKiuJ,aAC5B5kJ,EAAQ2kJ,cAAgBhuJ,KAAKguJ,cAE7B3kJ,EAAQ0iI,WAAa,GAAI5hI,MAAKooH,OAAOqa,WAAW5sI,KAAKkhE,MAAQyrE,KAAM3sI,KAAK2sI,OACxEtjI,EAAQ4I,SAAS5I,EAAQ0iI,YAEzB1iI,EAAQ2iI,UACR3iI,EAAQuU,eAEDvU,GA3Hf0kJ,yBAAAnyI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB5Iq7uCxBmnI,2B4Ip7uCsC7oC,EAAAiG,wBAAjC9qH,GAAA0tJ,yBAAwBA,EA8HxB1tJ,EAAA6tJ,oCAMTC,UAAW,WAMXC,eAAgB,kB5IszuCd,SAAS9tJ,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G6Ij9uCjEna,EAAAzB,EAA6E,GAO7Eic,EAAAjc,EAA+B,IAwB/BsuJ,EAAA,mBAAAA,sBAgDA,MAvCIA,mBAAA3tJ,UAAAa,OAAA,SAAOmc,GACH9d,KAAKsP,SAAWnG,SAASkX,cAAcvC,EAAKI,UAEd,GAA1BJ,EAAKowH,mBAA8C,IAApBpwH,EAAKy+C,cACpCv8D,KAAKsP,SAASitD,YAAcz+C,EAAKy+C,YAGrC,KAAK,GAAIx8D,GAAI,EAAGA,EAAI+d,EAAK25B,WAAWvrC,OAAQnM,IAAK,CAC7C,GAAIs0D,GAAYv2C,EAAK25B,WAAW13C,GAC5B8tJ,EAAgBx5F,EAAUp2C,IAE9B,IAAqB,SAAjB4vI,EAAJ,CAIA,OAAQA,GACJ,IAAK,WACDA,EAAgB,QAIxB7tJ,KAAKsP,SAAShD,aAAauhJ,EAAex5F,EAAUtnD,UAYlD0hJ,kBAAA3tJ,UAAAsX,IAAV,SAAcC,KA3ClBo2I,kBAAA7yI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c7Iq9uCxB2kI,qB6Ip9uCKpuJ,GAAAouJ,kBAAiBA,G7I49uCxB,SAASnuJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G8IvgvCjEna,EAAAzB,EAA6C,GAE7Cic,EAAAjc,EAA+B,IAC/BqhH,EAAArhH,EAA8B,KAC9B+B,EAAA/B,EAAgC,GAChCi0H,EAAAj0H,EAAqD,IAGrDuuJ,EAAA,SAAAvrJ,GAAwC5B,EAAAmtJ,mBAAAvrJ,EAOpC,SAAAurJ,oBAAY3/I;AACR5L,EAAA1C,KAAAT,KAAM+O,GACN/O,KAAK2uJ,cAAgBtuJ,EAAAuuJ,6BAA6BC,gBAAgBniB,IAClElrB,EAAAgB,cAAcouB,iBAAiB5wI,MAkFvC,MA/EI0uJ,oBAAA5tJ,UAAAkd,aAAA,SAAaF,GAQT,MAPA3a,GAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAuuJ,6BAA6BE,WAC/C9uJ,KAAK2uJ,cAAgB7wI,EAAKe,aAAaxe,EAAAuuJ,6BAA6BE,UAGxE9uJ,KAAK+uJ,iBACE/uJ,MAGX0uJ,mBAAA5tJ,UAAAowI,eAAA,SAAev5H,GACX3X,KAAK+uJ,kBAGTL,mBAAA5tJ,UAAAiuJ,eAAA,WACI/uJ,KAAKgvJ,0BAGTN,mBAAA5tJ,UAAAkuJ,uBAAA,WACI,GAAI5vI,GAAI,EACJxY,EAAS5G,KAAKivJ,YAAYroJ,OAC1B6rI,EAAevwI,EAAAsD,gBAAgBoJ,SAASm8D,OAAOnkE,MAEnD,QAAQ5G,KAAK2uJ,eACT,IAAKtuJ,GAAAuuJ,6BAA6BC,gBAAgBniB,IAC9C,KACJ,KAAKrsI,GAAAuuJ,6BAA6BC,gBAAgBx7B,OAC1Cof,EAAe7rI,IACfwY,EAAIlJ,SAAStU,EAAA4L,YAAY89D,OAAOmnE,EAAe7rI,EAAQ,IAE3D,MACJ,KAAKvG,GAAAuuJ,6BAA6BC,gBAAgBp7B,OAC9Cr0G,EAAIqzH,EAAe7rI,EAI3B5G,KAAKof,EAAIA,GAGbsvI,mBAAA5tJ,UAAAwc,MAAA,WACI,GAAIjU,GAA8B,GAAIqlJ,mBAuBtC,IAtBArlJ,EAAQqU,iBAERrU,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQqV,SAAW1e,KAAK0e,SACxBrV,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ8U,MAAQne,KAAKme,MACrB9U,EAAQ8nH,OAASnxH,KAAKmxH,OACtB9nH,EAAQqgB,KAAO1pB,KAAK0pB,KACpBrgB,EAAQsgB,UAAY3pB,KAAK2pB,UACzBtgB,EAAQ4U,KAAOje,KAAKie,KAEpB5U,EAAQslJ,cAAgB3uJ,KAAK2uJ,cAET,MAAhB3uJ,KAAK+O,UACL1F,EAAQ0F,QAAU/O,KAAK+O,SAGJ,MAAnB/O,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,MACa,OAArBh+G,KAAKkgB,YAKhB,OAFA7W,GAAQuU,eAEDvU,GA3FfqlJ,mBAAA9yI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB9IilvCxB8nI,qB8IhlvCgCt6B,EAAAkC,aAA3Bj2H,GAAAquJ,mBAAkBA,EA8FlBruJ,EAAAuuJ,8BACTE,QAAS,SACTD,iBACIniB,IAAK,MACLrZ,OAAQ,SACRI,OAAQ,Y9I6/uCV,SAASnzH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G+IpnvCjEna,EAAAzB,EAAgC,GAEhCgc,EAAAhc,EAAqD,IACrDic,EAAAjc,EAA+B,IAC/BqhH,EAAArhH,EAA8B,KAC9B+B,EAAA/B,EAAgC,GAGhC+uJ,EAAA,SAAA/rJ,GAAwC5B,EAAA2tJ,mBAAA/rJ,EASpC,SAAA+rJ,sBACI/rJ,EAAA1C,KAAAT,MACAA,KAAKmvJ,iBACLnvJ,KAAKovJ,kBACL5tC,EAAAgB,cAAcouB,iBAAiB5wI,MA8DvC,MA3DIkvJ,oBAAApuJ,UAAAkd,aAAA,SAAaF,GAGT,GAFA3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAarC,EAAAiL,uBAAuBW,OAAQ,CACjD,GAAIphB,GAAQmX,EAAKe,aAAa1C,EAAAiL,uBAAuBW,MACrD/nB,MAAKgoB,OAAS9R,SAASvP,GAEvB3G,KAAKmvJ,cAAgBxoJ,EAAMwkB,QAAQ,QAAYjV,SAASvP,MACpD3G,KAAKmvJ,mBACLnvJ,KAAKgoB,OAAS9lB,EAAAsD,gBAAgBoJ,SAASm8D,OAAOpkE,OAA8B,IAArB3G,KAAKmvJ,gBAEhEnvJ,KAAKqvJ,aAGT,GAAIvxI,EAAKU,aAAarC,EAAAiL,uBAAuBa,QAAS,CAClD,GAAIrhB,GAASkX,EAAKe,aAAa1C,EAAAiL,uBAAuBa,OACtDjoB,MAAKkoB,QAAUhS,SAAStP,GAExB5G,KAAKovJ,eAAiBxoJ,EAAOukB,QAAQ,QAAYjV,SAAStP,MACtD5G,KAAKovJ,oBACLpvJ,KAAKkoB,QAAUhmB,EAAAsD,gBAAgBoJ,SAASm8D,OAAOnkE,QAAgC,IAAtB5G,KAAKovJ,iBAElEpvJ,KAAKqvJ,eAILH,mBAAApuJ,UAAAuuJ,WAAR,WACIrvJ,KAAKsoB,QACLtoB,KAAKuoB,UAAUvoB,KAAKinB,OAAQjnB,KAAKynB,YACjCznB,KAAKwoB,UAAUxoB,KAAK2nB,WAAY3nB,KAAK6nB,YACrC7nB,KAAK0oB,SAAS,EAAG,EAAG1oB,KAAKgoB,OAAQhoB,KAAKkoB,SACtCloB,KAAKyoB,WAGTymI,mBAAApuJ,UAAAowI,eAAA,SAAev5H,GACP3X,KAAKmvJ,mBACLnvJ,KAAKgoB,OAAS9lB,EAAAsD,gBAAgBoJ,SAASm8D,OAAOpkE,OAA8B,IAArB3G,KAAKmvJ,gBAG5DnvJ,KAAKovJ,oBACLpvJ,KAAKkoB,QAAUhmB,EAAAsD,gBAAgBoJ,SAASm8D,OAAOnkE,QAAgC,IAAtB5G,KAAKovJ,iBAGlEpvJ,KAAKqvJ,cAGTH,mBAAApuJ,UAAAwc,MAAA,WACI,GAAIjU,GAA8B,GAAI6lJ,mBAUtC,OATA7lJ,GAAQ1H,OAAO3B,KAAKmnB,iBAEpB9d,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQ8lJ,cAAgBnvJ,KAAKmvJ,cAC7B9lJ,EAAQ+lJ,eAAiBpvJ,KAAKovJ,eAEvB/lJ,GA1Ef6lJ,mBAAAtzI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gB/I8qvCxBsoI,qB+I7qvCgC/yI,EAAAgE,aAA3B9f,GAAA6uJ,mBAAkBA,G/IqrvCzB,SAAS5uJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GgJzsvCjEna,EAAAzB,EAA6C,GAC7CosH,EAAApsH,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAE/BqhH,EAAArhH,EAA8B,KAE9B6mB,EAAA7mB,EAA6B,IAE7Bkc,EAAAlc,EAAuB,IAEvB+B,EAAA/B,EAAgC,GAGhCmvJ,EAAA,SAAAnsJ,GAAyC5B,EAAA+tJ,oBAAAnsJ,EAqBrC,SAAAmsJ,uBACInsJ,EAAA1C,KAAAT,MAEAA,KAAKuvJ,gBAAiB,EACtB/tC,EAAAgB,cAAcouB,iBAAiB5wI,MAiOvC,MA9NIsvJ,qBAAAxuJ,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAagxI,EAA8B1e,kBAChD9wI,KAAK+wI,cACD/pH,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAa2wI,EAA8B1e,kBAI1D,MAAd9wI,KAAK6R,QACL7R,KAAKyvJ,UAAYzvJ,KAAK6R,QAI9By9I,oBAAAxuJ,UAAAkd,aAAA,SAAaF,GACT3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAa,WAClBxe,KAAK0vJ,UAAYx5I,SAAS4H,EAAKe,aAAa,UAC5C7e,KAAK2vJ,cAGL7xI,EAAKU,aAAa,YAClBxe,KAAK4vJ,WAAa15I,SAAS4H,EAAKe,aAAa,WAC7C7e,KAAK2vJ,cAGL7xI,EAAKU,aAAa,UAClBxe,KAAKyG,KAAOqX,EAAKe,aAAa,QAC9B7e,KAAK2vJ,eAIHL,oBAAAxuJ,UAAA6uJ,WAAV,WACI,GAAiB,MAAb3vJ,KAAKyG,KACL,OAAQzG,KAAKyG,MACT,IAAK,QACDzG,KAAK6vJ,wBAMXP,oBAAAxuJ,UAAA+uJ,oBAAV,WACI,GAAI7vJ,KAAK0vJ,UAAY,GAAK1vJ,KAAK4vJ,WAAa,EAAG,CAC3C,GAAIpd,GAActwI,EAAAsD,gBAAgBoJ,SAASm8D,OAAOpkE,MAC9C8rI,EAAevwI,EAAAsD,gBAAgBoJ,SAASm8D,OAAOnkE,OAE/CkpJ,EAAetd,EAAcxyI,KAAK0vJ,UAClCK,EAAetd,EAAezyI,KAAK4vJ,UAEnCE,GAAeC,EACf/vJ,KAAKyR,MAAMmL,IAAIkzI,GAEf9vJ,KAAKyR,MAAMmL,IAAImzI,KAK3BT,oBAAAxuJ,UAAAowI,eAAA,SAAev5H,GAIX,GAHA3X,KAAK2vJ,aAGDh4I,GAAc3X,KAAKuvJ,eAAvB,CAIA,GAAIS,GAAchwJ,KAAKiwJ,sBAAsBjwJ,KAAKmsH,kBAC9Ct6G,EAAQ8F,EAAa3X,KAAK+wI,cAAgB/wI,KAAKyvJ,SAEnD,IAAa,MAAT59I,EAAe,CACf,GAAIy4G,GAAW9I,EAAAgB,cAAcsvB,kBAAoBke,CACjDhwJ,cAAY,GACZA,KAAK6R,MAAQA,EACb7R,KAAKkwJ,UAAU5lC,GACftqH,KAAKikH,SAASqG,GACdtqH,KAAKmwJ,YAAY7lC,GAEjBtqH,KAAKuvJ,eAAiB53I,KAItB23I,oBAAAxuJ,UAAAmvJ,sBAAR,SAA8B3lC,GAK1B,MAJK1oH,GAAA4I,YAAYC,cAAc+2G,EAAAgB,cAAcsvB,qBACzCxnB,EAAWA,EAASl9G,QAAQo0G,EAAAgB,cAAcwvB,0BAA2B,KAGlE1nB,GAGHglC,oBAAAxuJ,UAAAovJ,UAAR,SAAkB5lC,GAIdtqH,KAAKowJ,gBAEL,IAAItyI,GAAO9d,KAAK6R,MAAM8gG,MAAM2X,EAC5B,IAAY,MAARxsG,EAGA,IAFA,GAAIwL,GAAgBxL,EAAKyL,kBAEV,MAARD,GAAc,CACjB,GAAIixC,GAAOv6D,KAAKyyD,SAASm3C,OAAOtgF,EAAKpL,SAErC,IAAY,MAARq8C,EAAc,CACd,GAAI81F,GAAch0I,EAAAe,OAAOsN,oBAAoB6vC,EAAK/vC,IAElD,IAAmB,MAAf6lI,GAAuBA,EAAYnkJ,OAAS,EAAG,CAC/ClM,KAAKowJ,cAAc71F,EAAK/vC,OACxB,KAAK,GAAIzqB,GAAI,EAAGA,EAAIswJ,EAAYnkJ,OAAQnM,IACpCC,KAAKowJ,cAAc71F,EAAK/vC,KAAKxX,KAAKq9I,EAAoB,OAAEtwJ,GAAGm5B,aAKvE5P,EAAOA,EAAKG,mBAKpBzpB,KAAKswJ,UAAYtwJ,KAAKygH,MACtBzgH,KAAKygH,MAAQ,KAGTzgH,KAAK6R,MAAM8gG,MAAM2X,GAAU9rG,aAAa,cACxCxe,KAAKuwJ,aAAevwJ,KAAK6R,MAAM8gG,MAAM2X,GAAUzrG,aAAa,YAC5D7e,KAAK6R,MAAM8gG,MAAM2X,GAAUhvE,gBAAgB,aAI3Ct7C,KAAK6R,MAAM8gG,MAAM2X,GAAU9rG,aAAa,WACxCxe,KAAKwwJ,cAAgBxwJ,KAAK6R,MAAM8gG,MAAM2X,GAAUzrG,aAAa,SAC7D7e,KAAK6R,MAAM8gG,MAAM2X,GAAUhvE,gBAAgB,WAI3Cg0G,oBAAAxuJ,UAAAqvJ,YAAR,SAAoB7lC,GAIhB,GAA0B,MAAtBtqH,KAAKowJ,cAAuB,CAC5B,IAAK,GAAI/qJ,KAAOrF,MAAKowJ,cAAe,CAChC,GAAIC,GAAch0I,EAAAe,OAAOsN,oBAAoBrlB,EAE7C,IAAmB,MAAfgrJ,GAAuBA,EAAYnkJ,OAAS,EAC5C,IAAK,GAAInM,GAAI,EAAGA,EAAIswJ,EAAYnkJ,OAAQnM,IAKJ,MAA5BswJ,EAAoB,OAAEtwJ,IACtBswJ,EAAoB,OAAEtwJ,GAAGm5B,SAASl5B,KAAKowJ,cAAc/qJ,GAAKtF,IAM1EC,KAAKowJ,cAAgB,KAIzBpwJ,KAAKygH,MAAQzgH,KAAKswJ,UAClBtwJ,KAAKswJ,UAAY,KAGQ,MAArBtwJ,KAAKuwJ,eACLvwJ,KAAK6R,MAAM8gG,MAAM2X,GAAUh+G,aAAa,WAAYtM,KAAKuwJ,cACzDvwJ,KAAKuwJ,aAAe,MAIE,MAAtBvwJ,KAAKwwJ,gBACLxwJ,KAAK6R,MAAM8gG,MAAM2X,GAAUh+G,aAAa,QAAStM,KAAKwwJ,eACtDxwJ,KAAKwwJ,cAAgB,OAI7BlB,oBAAAxuJ,UAAAwc,MAAA,WACI,GAAMjU,GAA+B,GAAIimJ,oBAwBzC,IAtBAjmJ,EAAQwI,MAAQ7R,KAAK6R,MACrBxI,EAAQkW,SAASL,EAAIlf,KAAKuf,SAASL,EACnC7V,EAAQkW,SAASH,EAAIpf,KAAKuf,SAASH,EACnC/V,EAAQsW,MAAMT,EAAIlf,KAAK2f,MAAMT,EAC7B7V,EAAQsW,MAAMP,EAAIpf,KAAK2f,MAAMP,EAC7B/V,EAAQoI,MAAMyN,EAAIlf,KAAKyR,MAAMyN,EAC7B7V,EAAQoI,MAAM2N,EAAIpf,KAAKyR,MAAM2N,EAC7B/V,EAAQyW,QAAU9f,KAAK8f,QACvBzW,EAAQ4U,KAAOje,KAAKie,KAEpB5U,EAAQopD,SAAWzyD,KAAKyyD,SAASn1C,QACjCjU,EAAQ4I,SAAS5I,EAAQopD,UAEzBppD,UAAerJ,aACfqJ,EAAQomJ,UAAYzvJ,KAAKyvJ,UACzBpmJ,EAAQ0nI,cAAgB/wI,KAAK+wI,cAC7B1nI,EAAQkmJ,eAAiBvvJ,KAAKuvJ,eAE9BlmJ,EAAQ5C,KAAOzG,KAAKyG,KACpB4C,EAAQqmJ,UAAY1vJ,KAAK0vJ,UACzBrmJ,EAAQumJ,WAAa5vJ,KAAK4vJ,WAEH,MAAnB5vJ,KAAK+gB,WAAoB,CACzB,GAAIi9F,GAAc,GAAI7zG,MAAK6W,OAAqBhhB,KAAK+gB,WAAYhS,QACjEivG,GAAYz+F,SAASL,EAAIlf,KAAK+gB,WAAWxB,SAASL,EAClD8+F,EAAYz+F,SAASH,EAAIpf,KAAK+gB,WAAWxB,SAASH,EAElD/V,EAAQ0X,WAAai9F,EACrB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,MACZ,IAAyB,MAArBh+G,KAAKkgB,aAAsB,CAClC,GAAI89F,GAA4Bh+G,KAAKkgB,aAAa5C,OAClD0gG,GAAYz+F,SAASL,EAAIlf,KAAKkgB,aAAaX,SAASL,EACpD8+F,EAAYz+F,SAASH,EAAIpf,KAAKkgB,aAAaX,SAASH,EAEpD/V,EAAQ6W,aAAe89F,EACvB30G,EAAQ4I,SAAS+rG,GACjB30G,EAAQuX,KAAOo9F,EAInB,MADA30G,GAAQuU,eACDvU,GAzPfimJ,oBAAA1zI,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBhJm3vCxB0oI,sBgJl3vCiC/iC,EAAAK,cAA5BvsH,GAAAivJ,oBAAmBA,CA4PhC,IAAME,IACF1e,eAAgB,kBhJgovCd,SAASxwI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GiJt5vCjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bi8G,EAAAj8G,EAAiC,IAEjC6mB,EAAA7mB,EAA6B,IAE7B4C,EAAA5C,EAAwB,GAGxBswJ,EAAA,SAAAttJ,GAAoC5B,EAAAkvJ,eAAAttJ,EAehC,SAAAstJ,kBACIttJ,EAAA1C,KAAAT,MAEAA,KAAK0wJ,sBACL1wJ,KAAK2wJ,uBACL3wJ,KAAK4wJ,YAAa,EAyJ1B,MAlJIH,gBAAA3vJ,UAAAa,OAAA,SAAOmc,GACCA,EAAKU,aAAa,WAElBxe,KAAK6R,MAAwBmV,EAAAM,aAAaC,OAAOzJ,EAAKe,aAAa,UACjD,MAAd7e,KAAK6R,OACL7R,KAAK6wJ,0BAA0B7wJ,KAAK6R,MAAMiM,MAG9CA,EAAKw9B,gBAAgB,UAGzBn4C,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,IAOV2yI,eAAA3vJ,UAAAyjC,KAAP,SAAY9L,GACR,GAAMvgB,GAAOlY,IAEbA,MAAK8wJ,2BAA2Br4H,GAChC11B,EAAAuF,QAAQgM,QAAQJ,GAAGnR,EAAAuF,QAAQoP,YAAa,SAACC,GACrCO,EAAK64I,aAAap5I,EAAY8gB,KAGlCz4B,KAAK+wJ,aAAahuJ,EAAAuF,QAAQqP,aAAc8gB,IAGpCg4H,eAAA3vJ,UAAAiwJ,aAAR,SAAqBp5I,EAAqB8gB,GACtC,GAAI9gB,IAAe3X,KAAK4wJ,WAAY,CAChC5wJ,KAAK4wJ,YAAa,CAElB,KAAK,GAAIvrJ,KAAOrF,MAAK0wJ,mBAAoB,CACrC,GAAIrnJ,GAAuBovB,EAAOmxE,OAAOvkG,EACzCrF,MAAKgxJ,gBACDhxJ,KAAK0wJ,mBAAmBrrJ,GAAKwZ,aAAaoyI,EAAyBC,SACnE7nJ,EACAovB,EACAz4B,KAAK4wJ,YAIb,IAAK,GAAIvrJ,KAAOrF,MAAK0wJ,mBAAoB,CACrC,GAAIrnJ,GAAuBovB,EAAOmxE,OAAOvkG,EACzCgE,GAAQ2U,aAAahe,KAAK0wJ,mBAAmBrrJ,SAE9C,KAAKsS,GAAc3X,KAAK4wJ,WAAY,CACvC5wJ,KAAK4wJ,YAAa,CAElB,KAAK,GAAIvrJ,KAAOrF,MAAK2wJ,oBAAqB,CACtC,GAAItnJ,GAAuBovB,EAAOmxE,OAAOvkG,EACzCgE,GAAQ2U,aAAahe,KAAK2wJ,oBAAoBtrJ,IAGlD,IAAK,GAAIA,KAAOrF,MAAK2wJ,oBAAqB,CACtC,GAAItnJ,GAAuBovB,EAAOmxE,OAAOvkG,EACzCrF,MAAKgxJ,gBACDhxJ,KAAK2wJ,oBAAoBtrJ,GAAKwZ,aAAaoyI,EAAyBC,SACpE7nJ,EACAovB,EACAz4B,KAAK4wJ,eAMbH,eAAA3vJ,UAAA+vJ,0BAAR,SAAkC/yI,GAC9B,GAAY,MAARA,GAAoC,MAApBA,EAAe,SAG/B,IAAK,GAFDX,GAA2BW,EAAe,SAErC/d,EAAI,EAAGA,EAAIod,EAASjR,OAAQnM,IAAK,CACtC,GAAI86B,GAAiB1d,EAASo3C,KAAKx0D,EAEnC,IAAa,MAAT86B,EAAe,CAGf,IAAK,GAFDi4E,GAAc3pG,SAASkX,cAAcwa,EAAM3c,UAEtCykB,EAAI,EAAGA,EAAI9H,EAAM4c,WAAWvrC,OAAQy2B,IACzCmwE,EAAYxmG,aAAauuB,EAAM4c,WAAW9U,GAAG1kB,KAAM4c,EAAM4c,WAAW9U,GAAG51B,MAG3E/M,MAAK0wJ,mBAAmB71H,EAAM3c,UAAY40F,KAMlD29C,eAAA3vJ,UAAAkwJ,gBAAR,SACIG,EACA9nJ,EACAovB,EACAm4H,GAEA,IAAKhvJ,EAAA4I,YAAYC,cAAc0mJ,GAAc,CACzC,GAAI35G,GAAY/e,EAAOmxE,OAAOunD,EAE9B,IAAiB,MAAb35G,EACA,GAAIo5G,EACAp5G,EAAUvlC,SAAS5I,OAChB,CACH,GAAI+nJ,GAAiB34H,EAAOmsF,cAAcptE,EAC1C/e,GAAOmxH,WAAWvgJ,EAAS+nJ,EAAiB,MAMpDX,eAAA3vJ,UAAAgwJ,2BAAR,SAAmCr4H,GAC/B,IAAK,GAAIpzB,KAAOrF,MAAK0wJ,mBAAoB,CACrC1wJ,KAAK2wJ,oBAAoBtrJ,GAAgBrF,KAAK0wJ,mBAAmBrrJ,GAAKgsJ,WAAU,EAEhF,IAAIvzI,GAAO9d,KAAK2wJ,oBAAoBtrJ,GAChCgE,EAAUovB,EAAOmxE,OAAOvkG,EAE5B,IAAY,MAARyY,GAA2B,MAAXzU,EAChB,IAAK,GAAItJ,GAAI,EAAGA,EAAI+d,EAAK25B,WAAWvrC,OAAQnM,IACxC,OAAQ+d,EAAK25B,WAAW13C,GAAGke,MACvB,IAAK,IACDH,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQ6V,EAAEhR,UACrC,MACJ,KAAK,IACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQ+V,EAAElR,UACrC,MACJ,KAAK,SACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQsW,MAAMT,EAAEhR,UAC3C,MACJ,KAAK,SACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQsW,MAAMP,EAAElR,UAC3C,MACJ,KAAK,QACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQoI,MAAMyN,EAAEhR,UAC3C,MACJ,KAAK,SACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQoI,MAAMyN,EAAEhR,UAC3C,MACJ,KAAK,SACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQoI,MAAM2N,EAAElR,UAC3C,MACJ,KAAK,UACD4P,EAAK25B,WAAW13C,GAAGgN,MAAQ1D,EAAQyW,QAAQ5R,cAvKvEuiJ,eAAA70I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBjJ2gwCxB6pI,iBiJ1gwC4Br0C,EAAA0B,iBAAvBz9G,GAAAowJ,eAAcA,CA+K3B,IAAMQ,IACFC,QAAS,WjJq2vCP,SAAS5wJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GkJ1iwCjEna,EAAAzB,EAA4C,GAC5Cic,EAAAjc,EAA+B,IAC/Bqb,EAAArb,EAA4B,IAW5BmxJ,EAAA,SAAAnuJ,GAAwC5B,EAAA+vJ,mBAAAnuJ,EAAxC,SAAAmuJ,sBAAwCnuJ,EAAA9B,MAAArB,KAAAoD,WAK5BpD,KAAAuxJ,kBAIAvxJ,KAAAwxJ,gBAAoC,KA2EhD,MAnEWF,oBAAAxwJ,UAAAkd,aAAP,SAAoBF,GAChB3a,EAAArC,UAAMkd,aAAYvd,KAAAT,KAAC8d,GAEfA,EAAKU,aAAane,EAAAoxJ,uBAAuBC,aACrC1xJ,KAAKwxJ,iBACLxxJ,KAAKwxJ,gBAAgBv/I,SAASjS,MAItCA,KAAK2xJ,aACD7zI,EAAKU,aAAane,EAAAoxJ,uBAAuBG,cACzC5xJ,KAAK2xJ,UAAY/vJ,EAAAsgB,WAAWmD,YAAYvH,EAAKe,aAAaxe,EAAAoxJ,uBAAuBG,cAGjF9zI,EAAKU,aAAane,EAAAoxJ,uBAAuBI,aACzC7xJ,KAAK8xJ,qBAGLh0I,EAAKU,aAAane,EAAAoxJ,uBAAuBM,gBACzC/xJ,KAAKgyJ,6BAILV,mBAAAxwJ,UAAAgxJ,mBAAR,WACI,IAAK9xJ,KAAKiyJ,SAAU,CAChB,IAAK,GAAIlyJ,GAAI,EAAGA,EAAIC,KAAKuxJ,eAAerlJ,OAAQnM,IAAK,CACjD,GAAIw6D,GAAOv6D,KAAKuxJ,eAAexxJ,EAEnB,OAARw6D,GACIv6D,KAAK2xJ,UAAUxmI,QAAQovC,EAAc,QAAQ,WAC7Cv6D,KAAKiS,SAASsoD,EAAc,SAKxCv6D,KAAKiyJ,UAAW,IAQjBX,mBAAAxwJ,UAAA6jH,WAAP,SAAkBpqD,GACdv6D,KAAKuxJ,eAAev+I,KAAKunD,IAGtB+2F,mBAAAxwJ,UAAAkxJ,0BAAP,WACI,GAAIhyJ,KAAKiyJ,SAAU,CACf,IAAK,GAAIlyJ,GAAI,EAAGA,EAAIC,KAAKuxJ,eAAerlJ,OAAQnM,IAAK,CACjD,GAAIw6D,GAAOv6D,KAAKuxJ,eAAexxJ,EAE/B,IAAY,MAARw6D,EAAc,CACd,GAAI23F,GAA2B33F,EAAa,OACxClxD,EAAuBkxD,EAAc,OAEzC23F,GAAYtI,WAAWvgJ,EAASkxD,EAAY,QAIpDv6D,KAAKiyJ,UAAW,IAIjBX,mBAAAxwJ,UAAAqxJ,gBAAP,SAAuB53F,GACnBv6D,KAAKwxJ,gBAAkBj3F,GAnF/B+2F,mBAAA11I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBlJ8lwCxB0qI,qBkJ7lwCgC91I,EAAAG,YAA3Btb,GAAAixJ,mBAAkBA,EAsFlBjxJ,EAAAoxJ,wBACTI,WAAY,YACZD,WAAY,YACZG,cAAe,eACfL,WAAY,clJihwCV,SAASpxJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmJpowCjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bqb,EAAArb,EAA4B,IAC5BiT,EAAAjT,EAA2E,GAC3EgiF,EAAAhiF,EAAyB,IAGzBiyJ,EAAA,SAAAjvJ,GAAkC5B,EAAA6wJ,aAAAjvJ,EAgB9B,SAAAivJ,gBACIjvJ,EAAA1C,KAAAT,MAhBIA,KAAAqyJ,UAAoB,KAEpBryJ,KAAAgtI,OAAiB,EACjBhtI,KAAAsyJ,QAAkB,EAElBtyJ,KAAA4Y,UAAoB,EACpB5Y,KAAAuyJ,gBAA0B,EAC1BvyJ,KAAAwyJ,gBAA0B,EAE1BxyJ,KAAAyyJ,YAAsB,EACtBzyJ,KAAA0yJ,aAAuB,EAO3B1yJ,KAAK2yJ,YAAcv/I,EAAAa,iBAAiB,qBACpCjU,KAAK+zI,WAAa3gI,EAAAa,iBAAiB,oBA0K3C,MAvKWm+I,cAAAtxJ,UAAAid,aAAP,SAAoBD,GAChB3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,IAMhBs0I,aAAAtxJ,UAAAkd,aAAP,SAAoBF,GAChB,IAAKA,EAED,WADA9d,MAAK0hB,SAAS,wCAalB,IAAI5D,EAAKU,aAAane,EAAAuyJ,uBAAuBzlB,MAAO,CAGhD,GAAIpgI,GAAgB+Q,EAAKe,aAAaxe,EAAAuyJ,uBAAuBzlB,MACzD0lB,EAAmB38I,SAASnJ,EAChC/M,MAAKgtI,OAAQ,EACC,SAAVjgI,EACA/M,KAAK8yJ,aAAa,GACV/lI,MAAM8lI,IACd7yJ,KAAK8yJ,aAAaD,GAgB1B,GAZI/0I,EAAKU,aAAane,EAAAuyJ,uBAAuBl9B,SACzC11H,KAAKsyJ,OAAS1wJ,EAAA4I,YAAY8D,aAAawP,EAAKe,aAAaxe,EAAAuyJ,uBAAuBl9B,SAGhF53G,EAAKU,aAAane,EAAAuyJ,uBAAuBG,WACzC/yJ,KAAKyyJ,YAAcv8I,SAAS4H,EAAKe,aAAaxe,EAAAuyJ,uBAAuBG,WAGrEj1I,EAAKU,aAAane,EAAAuyJ,uBAAuBI,YACzChzJ,KAAK0yJ,aAAex8I,SAAS4H,EAAKe,aAAaxe,EAAAuyJ,uBAAuBI,YAGtEl1I,EAAKU,aAAane,EAAAuyJ,uBAAuBK,MAAO,CAChD,GAAIC,GAAkBp1I,EAAKe,aAAaxe,EAAAuyJ,uBAAuBK,KAC3DjzJ,MAAKqyJ,WAAaa,IAClBlzJ,KAAK0V,OACL1V,KAAKqyJ,UAAYv0I,EAAKe,aAAaxe,EAAAuyJ,uBAAuBK,OAIlE,GAAIn1I,EAAKU,aAAane,EAAAuyJ,uBAAuBjhC,MAAO,CAChD,GAAI5kH,GAAgB+Q,EAAKe,aAAaxe,EAAAuyJ,uBAAuBjhC,MACzDkhC,EAAmB38I,SAASnJ,EAClB,UAAVA,EACA/M,KAAKmzJ,aAAa,GACVpmI,MAAM8lI,IACd7yJ,KAAKmzJ,aAAaN,GAI1B,GAAI/0I,EAAKU,aAAane,EAAAuyJ,uBAAuBnhC,MAAO,CAChD,GAAI1kH,GAAgB+Q,EAAKe,aAAaxe,EAAAuyJ,uBAAuBnhC,MACzDohC,EAAmB38I,SAASnJ,EAClB,UAAVA,EACA/M,KAAK8yJ,aAAa,GACV/lI,MAAM8lI,IACd7yJ,KAAK8yJ,aAAaD,KAKpBT,aAAAtxJ,UAAAoc,gBAAV,SAA0BlY,KAEnBotJ,aAAAtxJ,UAAAwc,MAAP,WACI,GAAIjU,GAAU,GAAI+oJ,aAWlB,OAVA/oJ,GAAQgpJ,UAAYryJ,KAAKqyJ,UACzBhpJ,EAAQopJ,YAAczyJ,KAAKyyJ,YAC3BppJ,EAAQqpJ,aAAe1yJ,KAAK0yJ,aAC5BrpJ,EAAQ2jI,MAAQhtI,KAAKgtI,MACrB3jI,EAAQipJ,OAAStyJ,KAAKsyJ,OACtBjpJ,EAAQuP,SAAW5Y,KAAK4Y,SACxBvP,EAAQkpJ,eAAiBvyJ,KAAKuyJ,eAC9BlpJ,EAAQmpJ,eAAiBxyJ,KAAKwyJ,eAE9BnpJ,EAAQuU,eACDvU,GAGH+oJ,aAAAtxJ,UAAAgyJ,aAAR,SAAqBvlI,GAAA,SAAAA,MAAA,GACjBvtB,KAAK2yJ,YAAYj9I,OACjB1V,KAAK2yJ,YAAYxhD,qBACb5jF,EAAQ,GACRvtB,KAAKuyJ,gBAAiB,EACtBvyJ,KAAK2yJ,YAAY/gD,KAAKx+F,EAAAe,iBAAiBC,SAAUpU,KAAKq8B,KAAKhoB,KAAKrU,OAChEA,KAAK2yJ,YAAYh9I,MAAM4X,IAEvBvtB,KAAKq8B,QAIL+1H,aAAAtxJ,UAAAqyJ,aAAR,SAAqB5lI,GAAA,SAAAA,MAAA,GACjBvtB,KAAK+zI,WAAWr+H,OAChB1V,KAAK+zI,WAAW5iC,qBACZ5jF,EAAQ,GACRvtB,KAAKwyJ,gBAAiB,EACtBxyJ,KAAK+zI,WAAWniC,KAAKx+F,EAAAe,iBAAiBC,SAAUpU,KAAK0V,KAAKrB,KAAKrU,OAC/DA,KAAK+zI,WAAWp+H,MAAM4X,IAEtBvtB,KAAK0V,QAIL08I,aAAAtxJ,UAAAu7B,KAAR,WACI,GAAsB,MAAlBr8B,KAAKqyJ,UAAT,CAGA,GAAIlwE,EAAAp4D,SAAS5P,UAAUna,KAAKqyJ,WAAY,CACpC,IAAIryJ,KAAKsyJ,OAGL,MAFAtyJ,MAAK0V,OAKb1V,KAAK2yJ,YAAYj9I,OACjB1V,KAAK2yJ,YAAYxhD,qBACjBnxG,KAAK4Y,UAAW,EAChB5Y,KAAKuyJ,gBAAiB,EAClBvyJ,KAAKgtI,MACL7qD,EAAAp4D,SAAS8jE,KAAK7tF,KAAKqyJ,UAAWryJ,KAAKyyJ,YAAazyJ,KAAKsyJ,QAErDnwE,EAAAp4D,SAASsS,KAAKr8B,KAAKqyJ,UAAWryJ,KAAKyyJ,YAAazyJ,KAAKsyJ,UAIrDF,aAAAtxJ,UAAA4U,KAAR,WAC0B,MAAlB1V,KAAKqyJ,YAITryJ,KAAK+zI,WAAWr+H,OAChB1V,KAAK+zI,WAAW5iC,qBAChBhvB,EAAAp4D,SAASrU,KAAK1V,KAAKqyJ,UAAWryJ,KAAK0yJ,cAC/B1yJ,KAAK0yJ,cACL1yJ,KAAK+zI,WAAWniC,KAAKx+F,EAAAe,iBAAiBC,SAAUpU,KAAKk8D,MAAM7nD,KAAKrU,OAChEA,KAAK+zI,WAAWp+H,MAAM3V,KAAK0yJ,eAE3B1yJ,KAAKk8D,UAILk2F,aAAAtxJ,UAAAo7D,MAAR,WACIl8D,KAAK2yJ,YAAYj9I,OACjB1V,KAAK2yJ,YAAYxhD,qBACjBnxG,KAAK+zI,WAAWr+H,OAChB1V,KAAK+zI,WAAW5iC,qBAChBnxG,KAAK4Y,UAAW,EAChB5Y,KAAKuyJ,gBAAiB,EACtBvyJ,KAAKwyJ,gBAAiB,EAClBxyJ,KAAKqyJ,WAAalwE,EAAAp4D,SAAS5P,UAAUna,KAAKqyJ,YAC1ClwE,EAAAp4D,SAASrU,KAAK1V,KAAKqyJ,YA3L/BD,aAAAx2I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBnJ8ywCxBwrI,emJ7ywC0B52I,EAAAG,YAArBtb,GAAA+xJ,aAAYA,EA+LZ/xJ,EAAAuyJ,wBACT9rI,MAAO,QAEPmsI,KAAM,OACN9lB,KAAM,OACNzX,MAAO,QACPq9B,QAAS,SACTC,SAAU,UACVvhC,KAAM,OACNE,KAAM,SnJunwCJ,SAASrxH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoJl1wCjEna,EAAAzB,EAA4C,GAC5Ci8G,EAAAj8G,EAAiC,IACjC4kH,EAAA5kH,EAAoC,KACpC2kH,EAAA3kH,EAAwB,IACxBs5F,EAAAt5F,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAS/BizJ,EAAA,SAAAjwJ,GAA8B5B,EAAA6xJ,SAAAjwJ,EAO1B,SAAAiwJ,YACIjwJ,EAAA1C,KAAAT,MAEAA,KAAK0iH,aA2Jb,MAlJI0wC,UAAAtyJ,UAAAid,aAAA,SAAaD,GAST,GARA3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAQfA,EAAKU,aAAa,WAElB,IAAK,GADD8mG,GAAyBxnG,EAAKe,aAAa,WAAWmH,MAAM,KACvDjmB,EAAY,EAAGA,EAAIulH,EAAQp5G,OAAQnM,IAAK,CAC7C,GAAIivB,GAAkByqE,EAAAO,cAAcvB,eAAe6sB,EAAQvlH,GAC7C,OAAVivB,GACAhvB,KAAKorI,YAAYp8G,GAK7B,GAAmB,MAAfhvB,KAAK4pG,OAAgB,CACrB,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACb5pG,KAAK4pG,OAAOvkG,YAAgBy/G,GAAA6C,SAC5B3nH,KAAK0iH,UAAU1vG,KAAKhT,KAAK4pG,OAAOvkG,GAIxCrF,MAAKmd,SAAS0iB,KAAK,SAAC//B,EAAQsB,GACxB,MAAItB,GAAEiB,eAAe,WAAaK,EAAEL,eAAe,WAC/CjB,EAAE+gD,OAAS/gD,EAAE+gD,QAAU,EACvBz/C,EAAEy/C,OAASz/C,EAAEy/C,QAAU,EAEhB/gD,EAAE+gD,OAASz/C,EAAEy/C,QAGjB,MAKnBuyG,SAAAtyJ,UAAAuyJ,oBAAA,SAAoB77G,GAChBx3C,KAAKszJ,kBAAoB97G,GAS7B47G,SAAAtyJ,UAAAsqI,YAAA,SAAYttH,GAOJA,EAAKU,aAAa,gBAClBxe,KAAKuzJ,YAAc3xJ,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,gBAS5Df,EAAKU,aAAa,uBAClBxe,KAAKwrH,kBAAoB1tG,EAAKe,aAAa,qBAC3CkmG,EAAAsG,oBAAoBof,6BAA6B3sH,EAAKe,aAAa,wBAI3Eu0I,SAAAtyJ,UAAAooH,kBAAA,aAQAkqC,SAAAtyJ,UAAA0yJ,QAAA,SAAQjzJ,GAC0B,MAA1BP,KAAK0iH,UAAUniH,EAAK,KACpBP,KAAKiS,SAASjS,KAAK0iH,UAAUniH,EAAK,IAClCP,KAAK0iH,UAAUniH,EAAK,GAAG0jH,SAASa,EAAA6C,QAAQE,WAahDurC,SAAAtyJ,UAAAo7D,MAAA,WACI,IAAK,GAAIn8D,GAAY,EAAGA,EAAIC,KAAK0iH,UAAUx2G,OAAQnM,IACjB,MAA1BC,KAAKszJ,mBACLtzJ,KAAKszJ,kBAAkBrhJ,SAASjS,KAAK0iH,UAAU3iH,IAEnDC,KAAK0iH,UAAU3iH,GAAGkkH,SAASa,EAAA6C,QAAQqB,aAI3CoqC,SAAAtyJ,UAAA2yJ,YAAA,WACI,MAAOzzJ,MAAK0iH,WAUT0wC,SAAAtyJ,UAAAmjH,SAAP,SAAgBqG,EAAkB/pH,GAC9B,GAAIA,EAC8B,MAA1BP,KAAK0iH,UAAUniH,EAAK,KAChB+pH,IAAaxF,EAAA6C,QAAQE,QACrB7nH,KAAKiS,SAASjS,KAAK0iH,UAAUniH,EAAK,IAEJ,MAA1BP,KAAKszJ,mBACLtzJ,KAAKszJ,kBAAkBrhJ,SAASjS,KAAK0iH,UAAUniH,EAAK,IAI5DP,KAAK0iH,UAAUniH,EAAK,GAAG0jH,SAASqG,QAOpC,KAAK,GAAIvqH,GAAI,EAAGA,EAAIC,KAAK0iH,UAAUx2G,OAAQnM,IACnCuqH,IAAaxF,EAAA6C,QAAQE,QACrB7nH,KAAKiS,SAASjS,KAAK0iH,UAAU3iH,IAEC,MAA1BC,KAAKszJ,mBACLtzJ,KAAKszJ,kBAAkBrhJ,SAASjS,KAAK0iH,UAAU3iH,IAGvDC,KAAK0iH,UAAU3iH,GAAGkkH,SAASqG,IAlK3C8oC,SAAAx3I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBpJo7wCxBwsI,WoJn7wCsBh3C,EAAA0B,iBAAjBz9G,GAAA+yJ,SAAQA,GpJ27wCf,SAAS9yJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GqJr9wCjEna,EAAAzB,EAA4C,GAC5Ci8G,EAAAj8G,EAAiC,IACjC2kH,EAAA3kH,EAAwB,IACxBs5F,EAAAt5F,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAS/BuzJ,EAAA,SAAAvwJ,GAAsC5B,EAAAmyJ,iBAAAvwJ,EAIlC,SAAAuwJ,oBACIvwJ,EAAA1C,KAAAT,MAEAA,KAAK0iH,aAsEb,MA7DIgxC,kBAAA5yJ,UAAAid,aAAA,SAAaD,GAST,GARA3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,GAQfA,EAAKU,aAAa,WAElB,IAAK,GADD8mG,GAAyBxnG,EAAKe,aAAa,WAAWmH,MAAM,KACvDjmB,EAAY,EAAGA,EAAIulH,EAAQp5G,OAAQnM,IAAK,CAC7C,GAAIivB,GAAkByqE,EAAAO,cAAcvB,eAAe6sB,EAAQvlH,GAC7C,OAAVivB,GACAhvB,KAAKorI,YAAYp8G,GAK7B,GAAmB,MAAfhvB,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACb5pG,KAAK4pG,OAAOvkG,YAAgBy/G,GAAA6C,SAC5B3nH,KAAK0iH,UAAU1vG,KAAKhT,KAAK4pG,OAAOvkG,KAYhDquJ,iBAAA5yJ,UAAAsqI,YAAA,SAAYttH,GAOJA,EAAKU,aAAa,gBAClBxe,KAAKuzJ,YAAc3xJ,EAAAsgB,WAAWC,YAAYrE,EAAKe,aAAa,iBASpE60I,iBAAA5yJ,UAAAo7D,MAAA,WACIl8D,KAAK8f,SAAU,GAGnB4zI,iBAAA5yJ,UAAA41G,OAAA,WACI12G,KAAK8f,SAAU,CACf,KAAK,GAAI/f,GAAY,EAAGA,EAAIC,KAAK0iH,UAAUx2G,OAAQnM,IAC/CC,KAAK0iH,UAAU3iH,GAAGkkH,SAASa,EAAA6C,QAAQ+E,aA3E/CgnC,iBAAA93I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBrJy/wCxB8sI,mBqJx/wC8Bt3C,EAAA0B,iBAAzBz9G,GAAAqzJ,iBAAgBA,GrJggxCvB,SAASpzJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsJzhxCjEna,EAAAzB,EAAwC,GACxCi8G,EAAAj8G,EAAiC,IACjC6kH,EAAA7kH,EAAuB,KAEvB6mB,EAAA7mB,EAA6B,IAC7Bs5F,EAAAt5F,EAA8B,IAC9Bic,EAAAjc,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAQhCwzJ,EAAA,SAAAxwJ,GAA6B5B,EAAAoyJ,QAAAxwJ,EAMzB,SAAAwwJ,WACIxwJ,EAAA1C,KAAAT,MAEAA,KAAKkoG,WACLloG,KAAK4zJ,eA4Ob,MAnOID,SAAA7yJ,UAAAid,aAAA,SAAaD,GACT3a,EAAArC,UAAMid,aAAYtd,KAAAT,KAAC8d,EAEnB,IAAIwnG,EAMJ,IAJIxnG,EAAKU,aAAaq1I,EAAkBxuC,WACpCC,EAAUxnG,EAAKe,aAAag1I,EAAkBxuC,SAASr/F,MAAM,MAG9C,MAAfhmB,KAAK4pG,OACL,IAAK,GAAIvkG,KAAOrF,MAAK4pG,OACjB,GAAI5pG,KAAK4pG,OAAOvkG,YAAgB2/G,GAAAwC,OAAQ,CACpC,GAAe,MAAXlC,EACA,IAAK,GAAIvlH,GAAY,EAAGA,EAAIulH,EAAQp5G,OAAQnM,IACxCC,KAAK4pG,OAAOvkG,GAAK+lI,YAAY3xC,EAAAO,cAAcvB,eAAe6sB,EAAQvlH,IAG1EC,MAAKkoG,QAAQl1F,KAAKhT,KAAK4pG,OAAOvkG,IAKtB,MAAhBrF,KAAKkoG,SACLloG,KAAK8zJ,oBAOT9zJ,KAAK0d,iBAEL1d,KAAK8f,SAAU,EAEf9f,KAAK+zJ,oBASTJ,QAAA7yJ,UAAAgzJ,kBAAA,WAKI,IAAK,GAAI/zJ,GAAY,EAAGA,GAAKC,KAAKkoG,QAAQh8F,OAAQnM,IAC9C,GAAIC,KAAKkoG,QAAQnoG,EAAI,GAAGwtH,YAAa,CACjC,GAAIymC,GAAW,OACXC,EAA+B,KAC/BC,EAA2B,IAG3Bl0J,MAAKkoG,QAAQnoG,EAAI,GAAG4tH,QAAQ3I,EAAAwC,OAAO2kB,cACnC6nB,EAAch0J,KAAKkoG,QAAQnoG,EAAI,GAAG6tH,QAAQ5I,EAAAwC,OAAO2kB,cAE7CnsI,KAAKkoG,QAAQnoG,EAAI,GAAG4tH,QAAQ3I,EAAAwC,OAAO4kB,UACnC4nB,EAAch0J,KAAKkoG,QAAQnoG,EAAI,GAAG6tH,QAAQ5I,EAAAwC,OAAO4kB,UAE7CpsI,KAAKkoG,QAAQnoG,EAAI,GAAG4tH,QAAQ3I,EAAAwC,OAAOwB,cACnCgrC,EAAch0J,KAAKkoG,QAAQnoG,EAAI,GAAG6tH,QAAQ5I,EAAAwC,OAAOwB,aAS7DirC,EAAiBj0J,KAAKm0J,wBAAwBH,GAY1Ch0J,KAAKkoG,QAAQnoG,EAAI,GAAG4tH,QAAQ3I,EAAAwC,OAAO4kB,YACnC4nB,EAAch0J,KAAKkoG,QAAQnoG,EAAI,GAAG6tH,QAAQ5I,EAAAwC,OAAO4kB,WAGrD8nB,EAAal0J,KAAKm0J,wBAAwBH,EAS1C,IAAIjpI,KAEkB,OAAlBkpI,IACAlpI,EAAOi6F,EAAAwC,OAAO2kB,cAAgB8nB,GAGhB,MAAdC,EACAnpI,EAAOi6F,EAAAwC,OAAO4kB,UAAY8nB,EAEJ,MAAlBD,IACAlpI,EAAOi6F,EAAAwC,OAAO4kB,UAAY6nB,GAIpB,MAAVlpI,IACAA,EAAe,OAAI/qB,KAAKkoG,QAAQnoG,EAAI,GAAG8gD,OACvC7gD,KAAK4zJ,YAAY5gJ,KAAK+X,MAa9B4oI,QAAA7yJ,UAAAqzJ,wBAAR,SAAgCH,GAC5B,GAAmB,MAAfA,EACA,GAAIA,EAAYzqI,kBAAkB/K,aAAa,UAW3C,GAAgG,MAA5EwI,EAAAM,aAAaC,OAAOysI,EAAYzqI,kBAAkB1K,aAAa,WAItE,MADDmI,EAAAM,aAAaC,OAAOysI,EAAYzqI,kBAAkB1K,aAAa,UAAmB,UAGtF,MAAO3c,GAAAsD,gBAAgByJ,uBAEf+X,EAAAM,aAAaC,OAAOysI,EAAYzqI,kBAAkB1K,aAAa,UAAmB,UAClF,YAIb,KAAIm1I,EAAYzqI,kBAAkB/K,aAAa,aAM/C,MAAIw1I,GAAYzqI,kBAAkB/K,aAAa,SAC3Ctc,EAAAsD,gBAAgByJ,uBAAuB+kJ,EAAYzqI,kBAAkB1K,aAAa,UAElF,IARP,IAA+D,MAA3Dm1I,EAAYzqI,kBAAkB1K,aAAa,aAC3C,MAAO3c,GAAAsD,gBAAgByJ,uBACnB+kJ,EAAYzqI,kBAAkB1K,aAAa,cAS3D,MAAO,OAcD80I,QAAA7yJ,UAAAizJ,iBAAV,WACI/zJ,KAAKo0J,aAEL,KAAK,GAAIr0J,GAAI,EAAGA,EAAIC,KAAKkoG,QAAQh8F,OAAQnM,IACrCC,KAAKo0J,WAAWphJ,QAGpBhT,MAAKq0J,gBAAkB,GAAIj4C,GAAA0B,iBAC3B99G,KAAKq0J,gBAAgBp2I,KAAO,mBASzB01I,QAAA7yJ,UAAA8oH,UAAP,SAAiBrpH,EAAY+pH,GACzB,GAAI5iB,EAgBJ,OAdmC,KAA/B1nG,KAAKo0J,WAAW7zJ,GAAI2L,QACpBw7F,EAAS1nG,KAAKkoG,QAAQ3nG,GAAI+c,QAC1BoqF,EAAOzpF,KAAO,SAAW1d,EACzBmnG,EAAOnnG,GAAKA,GAEZmnG,EAAS1nG,KAAKo0J,WAAW7zJ,GAAI6gD,MAGjCsmD,EAAOgkC,gBAEPhkC,EAAO5nF,SAAU,EACjB4nF,EAAOvpF,MAAQ,EACfupF,EAAOuc,SAASqG,GAET5iB,GAOJisD,QAAA7yJ,UAAAupH,aAAP,SAAoB3iB,GAChBA,EAAO5nF,SAAU,EACjB4nF,EAAOuc,SAASe,EAAAwC,OAAOyB,WACvBvhB,EAAOukC,cAEPjsI,KAAKq0J,gBAAgBpiJ,SAASy1F,GAE9B1nG,KAAKo0J,WAAW1sD,EAAOnnG,IAAIyS,KAAK00F,IArPxCisD,QAAA/3I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeC,gBtJurxCxB+sI,UsJtrxCqBv3C,EAAA0B,iBAAhBz9G,GAAAszJ,QAAOA,CAwPpB,IAAME,IAOFxuC,QAAS,YtJk8wCP,SAAS/kH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GuJ5txCjEna,EAAAzB,EAAoD,GACpDic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrComE,EAAApmE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAG5Bm0J,EAAA,SAAAnxJ,GAAqD5B,EAAA+yJ,gCAAAnxJ,EAQjD,SAAAmxJ,mCACInxJ,EAAA1C,KAAAT,MAEAumE,EAAAsD,WAAWmT,mBAAqBh9E,KAgKxC,MA7JIs0J,iCAAAxzJ,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAKu0J,OAAyBprJ,SAASkX,cAAc,OACrDrgB,KAAKu0J,OAAOjrJ,UAAUC,IAAI,WAC1BvJ,KAAKu0J,OAAOjrJ,UAAUC,IAAI,YAEL,MAAjBvJ,KAAKsP,UACLtP,KAAKsP,SAASgC,YAAYtR,KAAKu0J,QAGnCv0J,KAAKw0J,OAAQ,EACbx0J,KAAKy0J,iBAGTH,gCAAAxzJ,UAAAi8E,UAAA,WACI,GACIv6E,EAAAgC,WAAWC,kBAAkBiJ,UACT,MAApB64D,EAAAsD,WAAWgS,OACY,MAAvBtV,EAAAsD,WAAWwB,UACI,MAAfrrE,KAAKu0J,OACP,CACEv0J,KAAK00J,WACL10J,KAAKu0J,OAAO/qJ,UAAY,EACxB,IAAIzJ,GAAY,CAChB,KAAK,GAAIsF,KAAOkhE,GAAAsD,WAAWgS,MACvB,GAAItV,EAAAsD,WAAWwB,WAAazsD,WAAWvZ,GACnC,IAAK,GAAIs9B,GAAY,EAAGA,EAAI4jC,EAAAsD,WAAWgS,MAAMx2E,GAAK6G,OAAQy2B,IAAK,CAC3D4jC,EAAAsD,WAAWgS,MAAMx2E,GAAKw6B,KAAK0mC,EAAAsD,WAAW8T,YACtCpX,EAAAsD,WAAWgS,MAAMx2E,GAAKwxB,SAEtB,IAAI89H,GAA4CxrJ,SAASkX,cAAc,MACvEs0I,GAAUrrJ,UAAUC,IAAI,aACxBorJ,EAAUpyE,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,MAC3C20J,EAAUroJ,aAAa,YAAai6D,EAAAsD,WAAWgS,MAAMx2E,GAAKs9B,GAAGz0B,YACjC,MAAxBq4D,EAAAsD,WAAW0S,WAAqBhW,EAAAsD,WAAW0S,WAAahW,EAAAsD,WAAWgS,MAAMx2E,GAAKs9B,IAC9EgyH,EAAUrrJ,UAAUC,IAAI,UAE5B,IAAIsrJ,GAAiD1rJ,SAASkX,cAAc,MAC5Ew0I,GAAevrJ,UAAUC,IAAI,cAC7BsrJ,EAAepyD,UAAYl8B,EAAAsD,WAAWgS,MAAMx2E,GAAKs9B,GAAGz0B,WAEpDymJ,EAAUrjJ,YAAYujJ,GACtB70J,KAAK00J,QAAQ1hJ,KAAK2hJ,GAClB30J,KAAKu0J,OAAOjjJ,YAAYqjJ,GACxB50J,IAKZC,KAAKkoB,QAAU,GAAKnoB,EAAI,GAAK,OAI7Bu0J,gCAAAxzJ,UAAA8zJ,aAAR,SAAqB/0J,GACjB,IAAIG,KAAKw0J,QAITx0J,KAAKsV,aAEI,MAALzV,GACmB,MAAnBA,EAAEi1J,eACFj1J,EAAEi1J,cAAct2I,aAAa,cACL,MAAxB+nD,EAAAsD,WAAW0S,WACb,CACE,GAAID,GAAoB19D,WAAW/e,EAAEi1J,cAAcj2I,aAAa,aAChE,IAAIy9D,IAAc/V,EAAAsD,WAAW0S,UACzBv8E,KAAK4/E,cAEL,IAAoB,MAAhB5/E,KAAK00J,QAAiB,CACtB,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,eACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,gBAAkBy9D,EAC1Dt8E,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,WAI7CzU,GAAA0F,eAAe+wD,eAAe+5B,EAAAU,YAAYgB,2BAA6BtY,GACvEt8E,KAAK4/E,aAMrB00E,gCAAAxzJ,UAAAi0J,YAAA,WACI,GAAoB,MAAhB/0J,KAAK00J,QACL,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,eACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,gBAAkB0nD,EAAAsD,WAAW0S,UACrEv8E,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,aAOrDm9I,gCAAAxzJ,UAAAotF,OAAA,WACwB,MAAhBluF,KAAK00J,SAAmB10J,KAAK00J,QAAQxoJ,QAAU,GAI9B,MAAjBlM,KAAKsP,WACDtP,KAAKsP,SAAShG,UAAUiO,SAAS,cACjCvX,KAAKw0J,OAAQ,EACbx0J,KAAKsV,aACe,MAAhBtV,KAAKkoB,UACLloB,KAAKsP,SAASuC,MAAMjL,OAAS5G,KAAKkoB,SAEtCloB,KAAKsP,SAAShG,UAAU6N,OAAO,eAE/BnX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAKxC+qJ,gCAAAxzJ,UAAA8+E,QAAA,WACyB,MAAjB5/E,KAAKsP,WACAtP,KAAKsP,SAAShG,UAAUiO,SAAS,eAClCvX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAK9B+qJ,gCAAAxzJ,UAAA2zJ,cAAV,WACIz0J,KAAKi1J,QAAU,MAGTX,gCAAAxzJ,UAAAwU,WAAV,cAAAkE,GAAAxZ,IACIA,MAAKg1J,cAEL,IAAMz7I,GAAW/W,EAAAgC,WAAWC,kBAAkBywJ,uBAE1C37I,GAAW,IACXvZ,KAAKi1J,QAAU3/I,WAAW,WACtBkE,EAAKomE,WACK,IAAXrmE,KAID+6I,gCAAAxzJ,UAAAk0J,aAAV,WACSpzJ,EAAAqG,MAAMC,kBAAkBlI,KAAKi1J,WAC9Bh7I,aAAaja,KAAKi1J,SAElBj1J,KAAKi1J,QAAU,OAzK3BX,gCAAA14I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cvJg3xCxBwqI,kCuJ/2xC6Ch9C,EAAAa,qBAAxC93G,GAAAi0J,gCAA+BA,GvJu3xCtC,SAASh0J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwJ54xCjEna,EAAAzB,EAAoD,GACpDic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrComE,EAAApmE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAG1Bg1J,EAAA,SAAAhyJ,GAAsD5B,EAAA4zJ,iCAAAhyJ,EAQlD,SAAAgyJ,oCACIhyJ,EAAA1C,KAAAT,MAEAumE,EAAAsD,WAAWoT,aAAej9E;CAmJlC,MAhJIm1J,kCAAAr0J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAKu0J,OAAyBprJ,SAASkX,cAAc,OACrDrgB,KAAKu0J,OAAOjrJ,UAAUC,IAAI,WAC1BvJ,KAAKu0J,OAAOjrJ,UAAUC,IAAI,YAEL,MAAjBvJ,KAAKsP,UACLtP,KAAKsP,SAASgC,YAAYtR,KAAKu0J,QAGnCv0J,KAAKw0J,OAAQ,EACbx0J,KAAKy0J,iBAGTU,iCAAAr0J,UAAAi8E,UAAA,WACI,IAAKv6E,EAAAgC,WAAWC,kBAAkBiJ,UAAoC,MAAxB64D,EAAAsD,WAAWiH,WAAoC,MAAf9wE,KAAKu0J,OAAgB,CAC/Fv0J,KAAK00J,WACL10J,KAAKu0J,OAAO/qJ,UAAY,EAExB,KAAK,GADDmQ,GAAgB,EACX5Z,EAAYwmE,EAAAsD,WAAWiH,UAAU5kE,OAAS,EAAGnM,GAAK,EAAGA,IAAK,CAC/D,GAAI40J,GAA4CxrJ,SAASkX,cAAc,MACvEs0I,GAAUrrJ,UAAUC,IAAI,aACxBorJ,EAAUpyE,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,MAC3C20J,EAAUroJ,aAAa,MAAOi6D,EAAAsD,WAAWiH,UAAU/wE,GAAGmO,YAChC,MAAlBq4D,EAAAsD,WAAWK,KAAe3D,EAAAsD,WAAWK,KAAO3D,EAAAsD,WAAWiH,UAAU/wE,IACjE40J,EAAUrrJ,UAAUC,IAAI,UAE5B,IAAIsrJ,GAAiD1rJ,SAASkX,cAAc,MAC5Ew0I,GAAevrJ,UAAUC,IAAI,cAE7BsrJ,EAAepyD,UAAYrgG,EAAAsH,UAAUg3D,WACjCt+D,EAAAsH,UAAUi3D,YACV4F,EAAAsD,WAAWiH,UAAU/wE,GAAGmO,YAG5BymJ,EAAUrjJ,YAAYujJ,GACtB70J,KAAK00J,QAAQ1hJ,KAAK2hJ,GAClB30J,KAAKu0J,OAAOjjJ,YAAYqjJ,GACxBh7I,IAGJ3Z,KAAKkoB,QAAU,GAAKvO,EAAQ,GAAK,OAIjCw7I,iCAAAr0J,UAAA8zJ,aAAR,SAAqB/0J,GACjB,IAAIG,KAAKw0J,QAITx0J,KAAKsV,aACI,MAALzV,GAAgC,MAAnBA,EAAEi1J,eAAyBj1J,EAAEi1J,cAAct2I,aAAa,QAA4B,MAAlB+nD,EAAAsD,WAAWK,KAAa,CACvG,GAAI0B,GAAchtD,WAAW/e,EAAEi1J,cAAcj2I,aAAa,OAC1D,IAAI+sD,IAAQrF,EAAAsD,WAAWK,IACnBlqE,KAAK4/E,cAEL,IAAoB,MAAhB5/E,KAAK00J,QAAiB,CACtB,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,SACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,UAAY+sD,EACpD5rE,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,WAI7CzU,GAAA0F,eAAe+wD,eAAe+5B,EAAAU,YAAYkB,qBAAuBlpB,GACjE5rE,KAAK4/E,aAMrBu1E,iCAAAr0J,UAAAi0J,YAAA,WACI,GAAoB,MAAhB/0J,KAAK00J,QACL,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,SACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,UAAY0nD,EAAAsD,WAAWK,IAC/DlqE,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,aAOrDg+I,iCAAAr0J,UAAAotF,OAAA,WACwB,MAAhBluF,KAAK00J,SAAmB10J,KAAK00J,QAAQxoJ,QAAU,GAI9B,MAAjBlM,KAAKsP,WACDtP,KAAKsP,SAAShG,UAAUiO,SAAS,cACjCvX,KAAKw0J,OAAQ,EACbx0J,KAAKsV,aACe,MAAhBtV,KAAKkoB,UACLloB,KAAKsP,SAASuC,MAAMjL,OAAS5G,KAAKkoB,SAEtCloB,KAAKsP,SAAShG,UAAU6N,OAAO,eAE/BnX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAKxC4rJ,iCAAAr0J,UAAA8+E,QAAA,WACyB,MAAjB5/E,KAAKsP,WACAtP,KAAKsP,SAAShG,UAAUiO,SAAS,eAClCvX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAK9B4rJ,iCAAAr0J,UAAA2zJ,cAAV,WACIz0J,KAAKi1J,QAAU,MAGTE,iCAAAr0J,UAAAwU,WAAV,cAAAkE,GAAAxZ,IACIA,MAAKg1J,cAEL,IAAMz7I,GAAW/W,EAAAgC,WAAWC,kBAAkBywJ,uBAE1C37I,GAAW,IACXvZ,KAAKi1J,QAAU3/I,WAAW,WACtBkE,EAAKomE,WACK,IAAXrmE,KAID47I,iCAAAr0J,UAAAk0J,aAAV,WACSpzJ,EAAAqG,MAAMC,kBAAkBlI,KAAKi1J,WAC9Bh7I,aAAaja,KAAKi1J,SAElBj1J,KAAKi1J,QAAU,OA5J3BE,iCAAAv5I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cxJohyCxBqrI,mCwJnhyC8C79C,EAAAa,qBAAzC93G,GAAA80J,iCAAgCA,GxJ2hyCvC,SAAS70J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GyJjjyCjEna,EAAAzB,EAAoD,GACpDic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrComE,EAAApmE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B+yF,EAAA/yF,EAA4B,IAG5Bi1J,EAAA,SAAAjyJ,GAA+C5B,EAAA6zJ,0BAAAjyJ,EAQ3C,SAAAiyJ,6BACIjyJ,EAAA1C,KAAAT,MAEAumE,EAAAsD,WAAWiT,eAAiB98E,KA+IpC,MA5IIo1J,2BAAAt0J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAKu0J,OAAyBprJ,SAASkX,cAAc,OACrDrgB,KAAKu0J,OAAOjrJ,UAAUC,IAAI,WAC1BvJ,KAAKu0J,OAAOjrJ,UAAUC,IAAI,YAEL,MAAjBvJ,KAAKsP,UACLtP,KAAKsP,SAASgC,YAAYtR,KAAKu0J,QAGnCv0J,KAAKw0J,OAAQ,EACbx0J,KAAKy0J,iBAGTW,0BAAAt0J,UAAAi8E,UAAA,WACI,GACoB,MAAhB/8E,KAAK00J,SACLlyJ,EAAAgC,WAAWC,kBAAkBiJ,UACT,MAApB64D,EAAAsD,WAAWgS,OACI,MAAf77E,KAAKu0J,OACP,CACEv0J,KAAK00J,UACL,IAAI30J,GAAY,EACZm+E,IACJ,KAAK,GAAI74E,KAAOkhE,GAAAsD,WAAWgS,MACvBqC,EAAUlrE,KAAK3N,EAKnB,KAHA64E,EAAUr+C,KAAK0mC,EAAAsD,WAAW8T,YAC1BO,EAAUrnD,UAEL92B,EAAI,EAAGA,EAAIm+E,EAAUhyE,OAAQnM,IAAK,CACnC,GAAI40J,GAA4CxrJ,SAASkX,cAAc,MACvEs0I,GAAUrrJ,UAAUC,IAAI,aACxBorJ,EAAUpyE,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,MAC3C20J,EAAUroJ,aAAa,WAAY4xE,EAAUn+E,IAClB,MAAvBwmE,EAAAsD,WAAWwB,UAAoB9E,EAAAsD,WAAWwB,UAAYzsD,WAAWs/D,EAAUn+E,KAC3E40J,EAAUrrJ,UAAUC,IAAI,UAE5B,IAAIsrJ,GAAiD1rJ,SAASkX,cAAc,MAC5Ew0I,GAAevrJ,UAAUC,IAAI,cAC7BsrJ,EAAepyD,UAAYvkB,EAAUn+E,GAErC40J,EAAUrjJ,YAAYujJ,GACtB70J,KAAK00J,QAAQ1hJ,KAAK2hJ,GAClB30J,KAAKu0J,OAAOjjJ,YAAYqjJ,GAG5B30J,KAAKkoB,QAAU,GAAKnoB,EAAI,GAAK,OAI7Bq1J,0BAAAt0J,UAAA8zJ,aAAR,SAAqB/0J,GACjB,IAAIG,KAAKw0J,QAITx0J,KAAKsV,aAEI,MAALzV,GACmB,MAAnBA,EAAEi1J,eACFj1J,EAAEi1J,cAAct2I,aAAa,aACN,MAAvB+nD,EAAAsD,WAAWwB,UACb,CACE,GAAIgR,GAAmBz9D,WAAW/e,EAAEi1J,cAAcj2I,aAAa,YAC/D,IAAIw9D,IAAa9V,EAAAsD,WAAWwB,SACxBrrE,KAAK4/E,cAEL,IAAoB,MAAhB5/E,KAAK00J,QAAiB,CACtB,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,cACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,eAAiBw9D,EACzDr8E,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,WAI7CzU,GAAA0F,eAAe+wD,eAAe+5B,EAAAU,YAAYc,uBAAyBrY,GACnEr8E,KAAK4/E,aAMrBw1E,0BAAAt0J,UAAAotF,OAAA,WACwB,MAAhBluF,KAAK00J,SAAmB10J,KAAK00J,QAAQxoJ,QAAU,GAG9B,MAAjBlM,KAAKsP,WACDtP,KAAKsP,SAAShG,UAAUiO,SAAS,cACjCvX,KAAKw0J,OAAQ,EACbx0J,KAAKsV,aACe,MAAhBtV,KAAKkoB,UACLloB,KAAKsP,SAASuC,MAAMjL,OAAS5G,KAAKkoB,SAEtCloB,KAAKsP,SAAShG,UAAU6N,OAAO,eAE/BnX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAKxC6rJ,0BAAAt0J,UAAA8+E,QAAA,WACyB,MAAjB5/E,KAAKsP,WACAtP,KAAKsP,SAAShG,UAAUiO,SAAS,eAClCvX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAK9B6rJ,0BAAAt0J,UAAA2zJ,cAAV,WACIz0J,KAAKi1J,QAAU,MAGTG,0BAAAt0J,UAAAwU,WAAV,cAAAkE,GAAAxZ,IACIA,MAAKg1J,cAEL,IAAMz7I,GAAW/W,EAAAgC,WAAWC,kBAAkBywJ,uBAE1C37I,GAAW,IACXvZ,KAAKi1J,QAAU3/I,WAAW,WACtBkE,EAAKomE,WACK,IAAXrmE,KAID67I,0BAAAt0J,UAAAk0J,aAAV,WACSpzJ,EAAAqG,MAAMC,kBAAkBlI,KAAKi1J,WAC9Bh7I,aAAaja,KAAKi1J,SAElBj1J,KAAKi1J,QAAU,OAxJ3BG,0BAAAx5I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,czJqryCxBsrI,4ByJpryCuC99C,EAAAa,qBAAlC93G,GAAA+0J,0BAAyBA,GzJ4ryChC,SAAS90J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G0JjtyCjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bk1J,EAAAl1J,EAAkC,KAClCgiF,EAAAhiF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAG/Bm1J,EAAA,SAAAnyJ,GAA2C5B,EAAA+zJ,sBAAAnyJ,EAKvC,SAAAmyJ,yBACInyJ,EAAA1C,KAAAT,MAHIA,KAAAu1J,WAAqB,GA+JjC,MAzJID,uBAAAx0J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEbpb,EAAA0F,eAAek2E,YAAYtrE,KAAKhT,MAE5B8d,EAAKU,aAAa,eAClBxe,KAAKu1J,WAAaz3I,EAAKe,aAAa,aACkB,MAAlDy2I,sBAAsBE,QAAQx1J,KAAKu1J,cACnCD,sBAAsBE,QAAQx1J,KAAKu1J,gBAEvCD,sBAAsBE,QAAQx1J,KAAKu1J,YAAYviJ,KAAKhT,OAGnC,MAAjBA,KAAKsP,WACA9M,EAAAgC,WAAWC,kBAAkB2J,oBAC9BpO,KAAKsP,SAAShG,UAAUC,IAAI,WAEhCvJ,KAAKsP,SAASizE,QAAUviF,KAAKkuF,OAAO75E,KAAKrU,QAI1Cs1J,sBAAAx0J,UAAAy9E,OAAP,SAAcJ,GACV,GADU,SAAAA,OAAA,GAEW,MAAjBn+E,KAAKsP,UACc,IAAnBtP,KAAKu1J,aACgB,aAApBv1J,KAAKu1J,YAA8Bp3E,GAA8B,gBAApBn+E,KAAKu1J,YACrD,CACE,GAAI9iG,GAAsCtpD,SAASmzD,uBAAuBt8D,KAAKu1J,YAC3EzjJ,EAAkB,OAEtB,IACsD,MAAlDwjJ,sBAAsBE,QAAQx1J,KAAKu1J,aACnCD,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAS,EAExD,IAAK,GAAIy2B,GAAY,EAAGA,EAAI2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAQy2B,IACb,MAA9D2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,UAC9CgmJ,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,UAC9E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAU6N,OAAO,QACvEm+I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,QAC/E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUC,IAAI,OAO7F,KAAK,GAAIxJ,GAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQwI,MAAMC,QAAUA,GAIR,gBAApB9R,KAAKu1J,aACW,UAAZzjJ,EACAtP,EAAAgC,WAAWsD,QAAQiG,gBAAe,GAElCvL,EAAAgC,WAAWsD,QAAQiG,gBAAe,MAM3CunJ,sBAAAx0J,UAAA09E,KAAP,SAAYL,GACR,GADQ,SAAAA,OAAA,GAEa,MAAjBn+E,KAAKsP,UACc,IAAnBtP,KAAKu1J,aACgB,aAApBv1J,KAAKu1J,YAA8Bp3E,GAA8B,gBAApBn+E,KAAKu1J,YACrD,CACE,GAAI9iG,GAAsCtpD,SAASmzD,uBAAuBt8D,KAAKu1J,YAC3EzjJ,EAAkB,MAEtB,IACsD,MAAlDwjJ,sBAAsBE,QAAQx1J,KAAKu1J,aACnCD,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAS,EAExD,IAAK,GAAIy2B,GAAY,EAAGA,EAAI2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAQy2B,IACb,MAA9D2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,UAC9CgmJ,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,SAC9E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAU6N,OAAO,OAEvEm+I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,SAE/E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUC,IAAI,QAO7F,KAAK,GAAIxJ,GAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQwI,MAAMC,QAAUA,GAIR,gBAApB9R,KAAKu1J,aACW,UAAZzjJ,EACAtP,EAAAgC,WAAWsD,QAAQiG,gBAAe,GAElCvL,EAAAgC,WAAWsD,QAAQiG,gBAAe,MAM3CunJ,sBAAAx0J,UAAAotF,OAAP,WACI,GAAqB,MAAjBluF,KAAKsP,UAAuC,IAAnBtP,KAAKu1J,WAAkB,CAChDpzE,EAAAp4D,SAASsS,KAAK,YACd,IAAIo2B,GAAsCtpD,SAASmzD,uBAAuBt8D,KAAKu1J,YAC3EzjJ,EAAkB,MAEtB,IACsD,MAAlDwjJ,sBAAsBE,QAAQx1J,KAAKu1J,aACnCD,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAS,EAExD,IAAK,GAAIy2B,GAAY,EAAGA,EAAI2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAYrpJ,OAAQy2B,IACb,MAA9D2yH,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,WAC9CgmJ,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,QAC9E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAU6N,OAAO,OAEvEm+I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,SAE/E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUC,IAAI,UAG7E+rJ,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAU6N,OAAO,QACvEm+I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUiO,SAAS,SAC/E+9I,sBAAsBE,QAAQx1J,KAAKu1J,YAAY5yH,GAAGrzB,SAAShG,UAAUC,IAAI,OACzEuI,EAAU,UAO9B,KAAK,GAAI/R,GAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,IACAA,EAAQwI,MAAMC,QAAUA,GAIR,gBAApB9R,KAAKu1J,aACW,UAAZzjJ,EACAtP,EAAAgC,WAAWsD,QAAQiG,gBAAe,GAElCvL,EAAAgC,WAAWsD,QAAQiG,gBAAe,MA5J3CunJ,sBAAAE,WAFXF,sBAAA15I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c1J61yCxBwrI,wB0J51yCmCD,EAAAI,kBAA9Bp1J,GAAAi1J,sBAAqBA,G1Jo2yC5B,SAASh1J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G2Jx3yCjEna,EAAAzB,EAAgC,GAChCm3G,EAAAn3G,EAAqC,IACrCuC,EAAAvC,EAA+B,IAC/Bic,EAAAjc,EAA+B,IAC/B4C,EAAA5C,EAAwB,GACxBqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAY5Bs1J,EAAA,SAAAtyJ,GAAuC5B,EAAAk0J,kBAAAtyJ,EAYnC,SAAAsyJ,qBACItyJ,EAAA1C,KAAAT,MA2MR,MAlMIy1J,mBAAA30J,UAAAa,OAAA,SAAOmc,GASH,GARA3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAQTA,EAAKU,aAAa,YAAa,CAC/Bxe,KAAK01J,SAAW53I,EAAKe,aAAa,YAAYmH,MAAM,KAC/ClI,EAAKU,aAAa,QAGnBxe,KAAKsP,SAAS0pG,QAAc,KAAIl7F,EAAKe,aAAa,QAFlD7e,KAAK21J,kBAAkB73I,EAAKe,aAAa,YAI7C,KAAK,GAAI9e,GAAY,EAAGA,EAAIC,KAAK01J,SAASxpJ,OAAQnM,IAC9C2C,EAAA0F,eAAe4sF,wBAAwBh1F,KAAK01J,SAAS31J,GAAIC,MAU7D8d,EAAKU,aAAa,YAClBxe,KAAKkgF,OAASpiE,EAAKe,aAAa,UAChC7e,KAAK21J,kBAAkB73I,EAAKe,aAAa,WAEzCnc,EAAA0F,eAAe2sF,sBAAsBj3E,EAAKe,aAAa,UAAW7e,OASlE8d,EAAKU,aAAa,UAClBxe,KAAKsP,SAAS0pG,QAAc,KAAIl7F,EAAKe,aAAa,SAGnC,MAAf7e,KAAKkgF,QAAmC,MAAjBlgF,KAAK01J,WAC5B11J,KAAKsP,SAASyC,iBAAiB0jJ,kBAAkBG,MAAO51J,KAAKqrG,QAAQh3F,KAAKrU,OACvD,MAAfA,KAAKkgF,QACLlgF,KAAKsP,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,eAI/C/iF,KAAKsP,SAASyC,iBAAiB0jJ,kBAAkBz7C,WAAYh6G,KAAK61J,aAAaxhJ,KAAKrU,OACpFA,KAAKsP,SAASyC,iBAAiB0jJ,kBAAkBx7C,SAAUj6G,KAAK81J,WAAWzhJ,KAAKrU,OAEhFA,KAAKsP,SAASyC,iBAAiB,eAAgBhP,EAAAuF,QAAQsP,oBACvD5X,KAAKsP,SAASyC,iBAAiB,gBAAiBhP,EAAAuF,QAAQsP,oBACxD5X,KAAKsP,SAASyC,iBAAiB,aAAchP,EAAAuF,QAAQsP,oBACrD5X,KAAKsP,SAASyC,iBAAiB,YAAahP,EAAAuF,QAAQsP,oBAEH,WAA7CpV,EAAAgC,WAAW2B,eAAe0O,gBAC1B7U,KAAKsP,SAASyC,iBAAiB0jJ,kBAAkBM,UAAW/1J,KAAKg2J,YAAY3hJ,KAAKrU,SAK9Fy1J,kBAAA30J,UAAA60J,kBAAA,SAAkBz1E,GACdlgF,KAAKsP,SAAS0pG,QAAc,KAAIh5G,KAAKi2J,yBAAyB/1E,IAElEu1E,kBAAA30J,UAAAm1J,yBAAA,SAAyB/1E,GACrB,GAAIg2E,GACAh2E,EAAO/0D,QAAQ,gBAAoBnrB,KAAKsP,SAAShG,UAAUiO,SAAS,YAExE,QADA2oE,EAASg2E,EAA4Bh2E,EAAM,YAAcA,GAErD,IAAK,uBACD,MAAIlgF,MAAKsP,SAAShG,UAAUiO,SAAS,iBAAyB,yBACvD,qBACX,KAAK,wCACD,MAAO,sBACX,KAAK,eACD,MAAIvX,MAAKsP,SAAShG,UAAUiO,SAAS,iBAAyB,iBAE1DvX,KAAKsP,SAAShG,UAAUiO,SAAS,cACjCvX,KAAKsP,SAAShG,UAAUiO,SAAS,mBAE1B,cACJ,eACX,KAAK,mBACD,MAAO,iBACX,KAAK,QACD,MAAO,oBACX,KAAK,QACD,MAAO,WACX,KAAK,OACD,MAAO,MACX,KAAK,WACD,MAAIvX,MAAKsP,SAAShG,UAAUiO,SAAS,YAAoB,aAClD,WACX,KAAK,eACD,MAAIvX,MAAKsP,SAAShG,UAAUiO,SAAS,YAAoB,iBAClD,eACX,KAAK,cACD,MAAO,UACX,KAAK,UACD,MAAO,MACX,KAAK,cACD,MAAO,UACX,SACI,MAAO2oE,KAInBu1E,kBAAA30J,UAAAq1J,eAAA,WACuB,MAAfn2J,KAAKkgF,QAAmC,MAAjBlgF,KAAK01J,WAC5B11J,KAAKsP,SAASyC,iBAAiB0jJ,kBAAkBG,MAAO51J,KAAKqrG,QAAQh3F,KAAKrU,OACvD,MAAfA,KAAKkgF,QACLlgF,KAAKsP,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,iBAWvD0yE,kBAAA30J,UAAAuqG,QAAA,SAAQxrG,GAKJ,GAAqB,MAAjBG,KAAKsP,WAAqBtP,KAAKsP,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,eAAgB,CAC1F,GAAIljF,IAAMA,EAAEu2J,WAAa5zJ,EAAAgC,WAAWC,kBAAkB4xJ,wBAED,WAA7C7zJ,EAAAgC,WAAW2B,eAAe0O,eAE1B,WADA7U,MAAKoY,IAAI,qBAAqBpY,KAAKkgF,OAAM,SAASlgF,KAAKkgF,OAW/D,IAPIrgF,GAAKA,EAAEu2J,WACPxzJ,EAAA6F,YAAYkpE,qBAAqB3xE,KAAKkgF,QAEvB,MAAflgF,KAAKkgF,QACLx9E,EAAA0F,eAAe+wD,eAAen5D,KAAKkgF,QAGlB,MAAjBlgF,KAAK01J,SACL,IAAK,GAAI31J,GAAY,EAAGA,EAAIC,KAAK01J,SAASxpJ,OAAQnM,IAC9C2C,EAAA0F,eAAewtF,iBAAiB51F,KAAK01J,SAAS31J,MAM9D01J,kBAAA30J,UAAA+0J,aAAA,WACI57I,aAAaja,KAAKs2J,gBAClBt2J,KAAKu2J,WAAY,EAEI,MAAjBv2J,KAAKsP,UAAqBtP,KAAKsP,SAAShG,UAAUiO,SAAS,YAC3DvX,KAAKsP,SAAShG,UAAUC,IAAI,YAIpCksJ,kBAAA30J,UAAAg1J,WAAA,cAAAt8I,GAAAxZ,IACIA,MAAKs2J,eAAiBhhJ,WAAW,WAC7BkE,EAAK+8I,WAAY,GAClB,KAGPd,kBAAA30J,UAAAk1J,YAAA,WACyB,MAAjBh2J,KAAKsP,UAAoBtP,KAAKsP,SAAShG,UAAUiO,SAAS,aAAevX,KAAKu2J,WAC9Ev2J,KAAKsP,SAAShG,UAAU6N,OAAO,YAUvCs+I,kBAAA30J,UAAAy3F,YAAA,SAAYxrF,GACa,MAAjB/M,KAAKsP,WACDvC,EACA/M,KAAKsP,SAAShG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAE9C/iF,KAAKsP,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,iBA/MhD0yE,kBAAAG,MAAgB,QAChBH,kBAAAz7C,WAAqB,aACrBy7C,kBAAAx7C,SAAmB,WACnBw7C,kBAAAM,UAAoB,YAL/BN,kBAAA75I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c3JghzCxB2rI,oB2J/gzC+Bn+C,EAAAa,qBAA1B93G,GAAAo1J,kBAAiBA,G3JuhzCxB,SAASn1J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G4JrjzCjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IAErCqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAE/BgiF,EAAAhiF,EAAyB,IAGzBq2J,EAAA,SAAArzJ,GAAiD5B,EAAAi1J,4BAAArzJ,EAI7C,SAAAqzJ,+BACIrzJ,EAAA1C,KAAAT,MAJIA,KAAAy2J,UACAz2J,KAAA00J,WAuGZ,MAjGI8B,6BAAA11J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK+8E,aAGTy5E,4BAAA11J,UAAAi8E,UAAA,WACI,GAAI25E,GAA2Bl0J,EAAAgC,WAAWsD,QAAQ6uJ,qBAClD,IAAqB,MAAjB32J,KAAKsP,UAAiC,MAAbonJ,EACzB,IAAK,GAAI32J,GAAY,EAAGA,EAAI22J,EAAUxqJ,OAAQnM,IAAK,CAC/C,GAAI62J,GAAuCztJ,SAASkX,cAAc,MAClEu2I,GAAKttJ,UAAUC,IAAI,QACnBqtJ,EAAKttJ,UAAUC,IAAImtJ,EAAU32J,IAC7B62J,EAAK/kJ,MAAMC,QAAU,OACrB8kJ,EAAKtqJ,aAAa,MAAOoqJ,EAAU32J,IACnC62J,EAAKr0E,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,KACtC,IAAI+M,GAAwC5D,SAASkX,cAAc,MACnEtT,GAAMzD,UAAUC,IAAI,SACpBwD,EAAM8E,MAAMC,QAAU,OACtB/E,EAAMT,aAAa,MAAOoqJ,EAAU32J,IAEpCgN,EAAMw1E,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,MAGQ,MAA3CwC,EAAAgC,WAAWsD,QAAQ+uJ,sBACnBH,EAAU32J,IAAMyC,EAAAgC,WAAWsD,QAAQ+uJ,uBAEnCD,EAAK/kJ,MAAMC,QAAU,QACrB/E,EAAM8E,MAAMC,QAAU,SAG1B9R,KAAKy2J,OAAOC,EAAU32J,IAAM62J,EAC5B52J,KAAK00J,QAAQgC,EAAU32J,IAAMgN,EAC7B/M,KAAKsP,SAASgC,YAAYslJ,GAC1B52J,KAAKsP,SAASgC,YAAYvE,KAK9BypJ,4BAAA11J,UAAA8zJ,aAAR,SAAqB/0J,GACjB,GAAS,MAALA,GAAgC,MAAnBA,EAAEi1J,eAAyBj1J,EAAEi1J,cAAct2I,aAAa,OAAQ,CAC7E2jE,EAAAp4D,SAASsS,KAAK,YACKx8B,GAAEi1J,cAAcj2I,aAAa,MAEhD,IAAmB,MAAf7e,KAAKy2J,OACL,IAAK,GAAIpxJ,KAAOrF,MAAKy2J,OACjBz2J,KAAKy2J,OAAOpxJ,GAAKwM,MAAMC,QAAU,MAIzC,IAAoB,MAAhB9R,KAAK00J,QACL,IAAK,GAAIrvJ,KAAOrF,MAAK00J,QACjB10J,KAAK00J,QAAQrvJ,GAAKwM,MAAMC,QAAU,MAG1CpP,GAAA0F,eAAewtF,iBAAiB,IAChC51F,KAAK82J,mBAIbN,4BAAA11J,UAAAg2J,eAAA,WACI,GAAIC,GAAiBv0J,EAAAgC,WAAWsD,QAAQ+uJ,qBACpCH,EAA2Bl0J,EAAAgC,WAAWsD,QAAQ6uJ,sBAC9CrtI,EAAe,EAEnB,IAAc,MAAVytI,GAA+B,MAAbL,EAAmB,CAErC,IAAK,GADD/yH,GAAgB,EACX5jC,EAAY,EAAGA,EAAI22J,EAAUxqJ,OAAQnM,IACtC22J,EAAU32J,KAAOg3J,IACjBpzH,EAAQ5jC,EAKZupB,GADwB,MAAxBotI,EAAU/yH,EAAQ,GACX+yH,EAAU/yH,EAAQ,GAElB+yH,EAAU,GAIA,MAArB12J,KAAKy2J,OAAOntI,KACZtpB,KAAKy2J,OAAOntI,GAAMzX,MAAMC,QAAU,SAEZ,MAAtB9R,KAAK00J,QAAQprI,KACbtpB,KAAK00J,QAAQprI,GAAMzX,MAAMC,QAAU,SAEvCtP,EAAAgC,WAAWsD,QAAQkvJ,YAAY1tI,IAGnCktI,4BAAA11J,UAAA8+E,QAAA,WACyB,MAAjB5/E,KAAKsP,WACAtP,KAAKsP,SAAShG,UAAUiO,SAAS,eAClCvX,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAtG5CitJ,4BAAA56I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c5JgpzCxB0sI,8B4J/ozCyCl/C,EAAAa,qBAApC93G,GAAAm2J,4BAA2BA,G5JupzClC,SAASl2J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G6J7qzCjEna,EAAAzB,EAAoD,GACpDic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IAErCuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IAGzB82J,EAAA,SAAA9zJ,GAA+C5B,EAAA01J,0BAAA9zJ,EAgB3C,SAAA8zJ,6BACI9zJ,EAAA1C,KAAAT,MAfIA,KAAAk3J,SAA0B,GAAI,GAAI,GAAI,IACtCl3J,KAAAm3J,gBAAiC,OAAQ,OAAQ,OAAQ,QACzDn3J,KAAA2pC,OAAiB,EAerBjnC,EAAA0F,eAAeutF,eAAiB31F,KA0NxC,MAvNIi3J,2BAAAn2J,UAAAa,OAAA,SAAOmc,GASH,GARA3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAKo3J,aAA+BjuJ,SAASC,eAAe,eAE5DpJ,KAAKu0J,OAAyBprJ,SAASkX,cAAc,OACrDrgB,KAAKu0J,OAAOjrJ,UAAUC,IAAI,WAC1BvJ,KAAKu0J,OAAOjrJ,UAAUC,IAAI,cAEtB/G,EAAAgC,WAAWsD,QAAQqtE,yBAA0B,CAC7Cn1E,KAAKq3J,iBAAmCluJ,SAASkX,cAAc,OAC/DrgB,KAAKq3J,iBAAiB/tJ,UAAUC,IAAI,YACpC,IAAI+tJ,GAAuDnuJ,SAASkX,cAAc,MAClFi3I,GAAqBhuJ,UAAUC,IAAI,cACnC+tJ,EAAqBhuJ,UAAUC,IAAI,WAC/B/G,EAAAgC,WAAWsD,QAAQstE,qBACnBkiF,EAAqBhuJ,UAAUC,IAAI,QAEnC+tJ,EAAqBhuJ,UAAUC,IAAI,QACnC3G,EAAA6F,YAAY6rE,2BAA4B,EACxC6N,EAAAp4D,SAASikE,eAAe,oBAE5BspE,EAAqB/0E,QAAUviF,KAAKu3J,kBAAkBljJ,KAAKrU,MAC3DA,KAAKq3J,iBAAiB/lJ,YAAYgmJ,GAGjB,MAAjBt3J,KAAKsP,WACLtP,KAAKsP,SAASgC,YAAYtR,KAAKu0J,QACF,MAAzBv0J,KAAKq3J,kBACLr3J,KAAKu0J,OAAOjjJ,YAAYtR,KAAKq3J,kBAE7B70J,EAAAgC,WAAWsD,QAAQqtE,0BACnBn1E,KAAKu0J,OAAOz8I,cAAcxO,UAAUC,IAAI,SAIhDvJ,KAAK+8E,YAEL/8E,KAAKw0J,OAAQ,EACbx0J,KAAKy0J,iBAGTwC,0BAAAn2J,UAAAi8E,UAAA,WACI,GAAoB,MAAhB/8E,KAAK00J,SAAkC,MAAf10J,KAAKu0J,OAAgB,CAC7Cv0J,KAAK00J,UAEL,KAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAKk3J,QAAQhrJ,OAAQnM,IAAK,CAClD,GAAI40J,GAA4CxrJ,SAASkX,cAAc,MACvEs0I,GAAUrrJ,UAAUC,IAAI,aACxBorJ,EAAUpyE,QAAUviF,KAAK40J,aAAavgJ,KAAKrU,MAC3C20J,EAAUroJ,aAAa,QAASvM,EAAEmO,WAClC,IAAI2mJ,GAAiD1rJ,SAASkX,cAAc,MAC5Ew0I,GAAevrJ,UAAUC,IAAI,cAC7BsrJ,EAAepyD,UAAYziG,KAAKk3J,QAAQn3J,GACxC40J,EAAUrjJ,YAAYujJ,GAEb,GAAL90J,GAAWyC,EAAAgC,WAAWsD,QAAQ0vJ,sBAC9B7C,EAAU9iJ,MAAMC,QAAU,QAG9B9R,KAAK00J,QAAQ1hJ,KAAK2hJ,GAClB30J,KAAKu0J,OAAOjjJ,YAAYqjJ,GAEvBnyJ,EAAAgC,WAAWsD,QAAQ0vJ,oBAOhBh1J,EAAAgC,WAAWsD,QAAQqtE,yBACnBn1E,KAAKkoB,QAAU,IAA4B,GAAtBloB,KAAKk3J,QAAQhrJ,OAAc,IAAM,KAEtDlM,KAAKkoB,QAAgC,GAAtBloB,KAAKk3J,QAAQhrJ,OAAc,GAAK,KAT/C1J,EAAAgC,WAAWsD,QAAQqtE,yBACnBn1E,KAAKkoB,QAAU,IAAkC,IAA3BloB,KAAKk3J,QAAQhrJ,OAAS,GAAU,IAAM,KAE5DlM,KAAKkoB,QAAsC,IAA3BloB,KAAKk3J,QAAQhrJ,OAAS,GAAU,GAAK,OAY7D+qJ,0BAAAn2J,UAAA8zJ,aAAR,SAAqB/0J,GACjB,IAAIG,KAAKw0J,MAAT,CAKA,GADAx0J,KAAKsV,aACI,MAALzV,GAAgC,MAAnBA,EAAEi1J,eAAyBj1J,EAAEi1J,cAAct2I,aAAa,SAAU,CAC/E2jE,EAAAp4D,SAASsS,KAAK,YACd,IAAI8/B,GAAgBv9C,WAAW/e,EAAEi1J,cAAcj2I,aAAa,SAC5D,IAAIs9C,IAAUn8D,KAAK2pC,YACZ,CAEH,GADA3pC,KAAK2pC,OAASwyB,EACM,MAAhBn8D,KAAK00J,QACL,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCC,KAAK00J,QAAQ30J,GAAGye,aAAa,WACzBI,WAAW5e,KAAK00J,QAAQ30J,GAAG8e,aAAa,YAAcs9C,EACtDn8D,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAE9BvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,WAKjD3U,GAAAgC,WAAWsD,QAAQsmF,UAAUjyB,IAGrCn8D,KAAKy3J,sBAGDR,0BAAAn2J,UAAAy2J,kBAAR,SAA0B13J,GAClBG,KAAKw0J,QAITx0J,KAAKsV,aACI,MAALzV,GAAgC,MAAnBA,EAAEi1J,gBACf3yE,EAAAp4D,SAASsS,KAAK,aACVx8B,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,QACnC1X,EAAEi1J,cAAcxrJ,UAAU6N,OAAO,OAC5BtX,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,SACpC1X,EAAEi1J,cAAcxrJ,UAAUC,IAAI,QAElC3G,EAAA6F,YAAY6rE,2BAA4B,EACxC9xE,EAAAgC,WAAWsD,QAAQ4vJ,oBAAmB,GACtCv1E,EAAAp4D,SAASikE,eAAe,qBAExBnuF,EAAEi1J,cAAcxrJ,UAAU6N,OAAO,QAC5BtX,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,QACpC1X,EAAEi1J,cAAcxrJ,UAAUC,IAAI,OAElC3G,EAAA6F,YAAY6rE,2BAA4B,EACxC9xE,EAAAgC,WAAWsD,QAAQ4vJ,oBAAmB,GACtCv1E,EAAAp4D,SAASikE,eAAe,mBAAmB,OAKvDipE,0BAAAn2J,UAAA+0F,SAAA,SAAS15B,GAEL,GADAn8D,KAAK2pC,OAASwyB,EACM,MAAhBn8D,KAAK00J,QACL,IAAK,GAAI30J,GAAY,EAAGA,EAAIC,KAAK00J,QAAQxoJ,OAAQnM,IACzCA,IAAMo8D,EACDn8D,KAAK00J,QAAQ30J,GAAGuJ,UAAUiO,SAAS,YACpCvX,KAAK00J,QAAQ30J,GAAGuJ,UAAUC,IAAI,WAGlCvJ,KAAK00J,QAAQ30J,GAAGuJ,UAAU6N,OAAO,UAI7CnX,MAAKy3J,qBAGTR,0BAAAn2J,UAAA22J,kBAAA,WACI,GAAyB,MAArBz3J,KAAKo3J,cACmC,MAApCp3J,KAAKm3J,eAAen3J,KAAK2pC,QAAiB,CAC1C,IAAK,GAAI5pC,GAAY,EAAGA,EAAIC,KAAKm3J,eAAejrJ,OAAQnM,IACpDC,KAAKo3J,aAAa9tJ,UAAU6N,OAAOnX,KAAKm3J,eAAep3J,GAE3DC,MAAKo3J,aAAa9tJ,UAAUC,IAAIvJ,KAAKm3J,eAAen3J,KAAK2pC,WAKrEstH,0BAAAn2J,UAAAotF,OAAA,WACyB,MAAjBluF,KAAKsP,WACDtP,KAAKsP,SAAShG,UAAUiO,SAAS,cACjCvX,KAAKw0J,OAAQ,EACbx0J,KAAKsV,aACe,MAAhBtV,KAAKkoB,UACLloB,KAAKsP,SAASuC,MAAMjL,OAAS5G,KAAKkoB,SAEtCloB,KAAKsP,SAAShG,UAAU6N,OAAO,eAE/BnX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAKxC0tJ,0BAAAn2J,UAAA8+E,QAAA,WACyB,MAAjB5/E,KAAKsP,WACAtP,KAAKsP,SAAShG,UAAUiO,SAAS,eAClCvX,KAAKw0J,OAAQ,EACbx0J,KAAKg1J,eACLh1J,KAAKsP,SAASgsC,gBAAgB,SAC9Bt7C,KAAKsP,SAAShG,UAAUC,IAAI,gBAK9B0tJ,0BAAAn2J,UAAA2zJ,cAAV,WACIz0J,KAAKi1J,QAAU,MAGTgC,0BAAAn2J,UAAAwU,WAAV,cAAAkE,GAAAxZ,IACIA,MAAKg1J,cAEL,IAAMz7I,GAAW/W,EAAAgC,WAAWC,kBAAkBywJ,uBAE1C37I,GAAW,IACXvZ,KAAKi1J,QAAU3/I,WAAW,WACtBkE,EAAKomE,WACK,IAAXrmE,KAID09I,0BAAAn2J,UAAAk0J,aAAV,WACSpzJ,EAAAqG,MAAMC,kBAAkBlI,KAAKi1J,WAC9Bh7I,aAAaja,KAAKi1J,SAElBj1J,KAAKi1J,QAAU,OA3O3BgC,0BAAAr7I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c7Ji4zCxBmtI,4B6Jh4zCuC3/C,EAAAa,qBAAlC93G,GAAA42J,0BAAyBA,G7Jw4zChC,SAAS32J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G8J95zCjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAC/Bk1J,EAAAl1J,EAAkC,KAClCqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/Bw3J,EAAAx3J,EAA8C,KAG9Cy3J,EAAA,SAAAz0J,GAA+C5B,EAAAq2J,0BAAAz0J,EAG3C,SAAAy0J,6BACIz0J,EAAA1C,KAAAT,MAoFR,MAjFI43J,2BAAA92J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEqC,UAA9Ctb,EAAAgC,WAAWC,kBAAkB2sE,aAC7BpxE,KAAK63J,kBACgD,WAA9Cr1J,EAAAgC,WAAWC,kBAAkB2sE,aACpCpxE,KAAK83J,mBACgD,aAA9Ct1J,EAAAgC,WAAWC,kBAAkB2sE,aACpCpxE,KAAK+3J,qBAEL/3J,KAAK63J,kBAGY,MAAjB73J,KAAKsP,UACLtP,KAAKsP,SAASwI,cAAc2O,YAAYzmB,KAAKsP,WAI7CsoJ,0BAAA92J,UAAA+2J,gBAAR,WACI73J,KAAKg4J,gBAAgB,wBACrBh4J,KAAKg4J,gBAAgB,2BAGjBJ,0BAAA92J,UAAAg3J,iBAAR,WACI93J,KAAKg4J,gBAAgB,uBACrBh4J,KAAKg4J,gBAAgB,0BAErBh4J,KAAKi4J,wBACL,IAAI1hG,GAAsBptD,SAASC,eAAe,yBAClD,IAAc,MAAVmtD,GAEmD,MAA/C/zD,EAAAgC,WAAWC,kBAAkByzJ,gBAC7B11J,EAAAgC,WAAWC,kBAAkByzJ,eAAehsJ,OAAS,EACvD,CACE1J,EAAAgC,WAAWC,kBAAkByzJ,eAAerhI,SAC5C,KAAK,GAAI92B,GAAY,EAAGA,EAAIyC,EAAAgC,WAAWC,kBAAkByzJ,eAAehsJ,OAAQnM,IAAK,CACjF,GAAIqlF,GAAwC,GAAIuyE,GAAAQ,8BAC5Cj3F,EAAuC/3D,SAASkX,cAAc,MAClE+kE,GAAOlF,OAAS,WAChBkF,EAAO+wE,iBACPj1F,EAAK53D,UAAUC,IAAI,eACf/G,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,QAC5CmhE,EAAKuhC,UAAY,IACjBrd,EAAOle,cAAgB,MAEvBhG,EAAKuhC,UAAYjgG,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,GAAK,GAClEqlF,EAAOle,cAAgB1kE,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,GAAK,IAE5EqlF,EAAO91E,SAAS0pG,QAAc,KAAI,qBAAoBj5G,EAAI,GAEnC,MAAnBqlF,EAAO91E,WACP81E,EAAO91E,SAAShG,UAAUC,IAAI,gBAC9B67E,EAAO91E,SAASgC,YAAY4vD,GAC5Bx+D,EAAA0F,eAAe2sF,sBAAsB,WAAY3P,GACnC,MAAV7uB,GACAA,EAAOjlD,YAAY8zE,EAAO91E,cAY1CsoJ,0BAAA92J,UAAAi3J,mBAAR,WACI/3J,KAAKg4J,gBAAgB,uBACrBh4J,KAAKg4J,gBAAgB,yBAGjBJ,0BAAA92J,UAAAk3J,gBAAR,SAAwBxmF,GAEpB,IAAK,GADD/e,GAAsCtpD,SAASmzD,uBAAuBkV,GACjEzxE,EAAY,EAAGA,EAAI0yD,EAASvmD,OAAQnM,IAAK,CAC9C,GAAIsJ,GAAoCopD,EAAS1yD,EAClC,OAAXsJ,GACAA,EAAQ8N,WArFxBygJ,0BAAAh8I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c9J6+zCxB8tI,4B8J5+zCuCvC,EAAAI,kBAAlCp1J,GAAAu3J,0BAAyBA,G9Jo/zChC,SAASt3J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,G+Jxg0CjEna,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAC/Bk1J,EAAAl1J,EAAkC,KAElCgiF,EAAAhiF,EAAyB,IACzByC,EAAAzC,EAA4B,IAG5Bg4J,EAAA,SAAAh1J,GAAmD5B,EAAA42J,8BAAAh1J,EAG/C,SAAAg1J,iCACIh1J,EAAA1C,KAAAT,MAHJA,KAAAknE,cAAwB,IA2B5B,MAfIixF,+BAAAr3J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAETA,EAAKU,aAAa,oBAClBxe,KAAKknE,cAAgBppD,EAAKe,aAAa,oBAI/Cs5I,8BAAAr3J,UAAAuqG,QAAA,WAC8B,MAAtBrrG,KAAKknE,gBACLtkE,EAAA6F,YAAY0+D,cAAgBnnE,KAAKknE,eAErCib,EAAAp4D,SAASsS,KAAK,aACdl5B,EAAArC,UAAMuqG,QAAO5qG,KAAAT,OA3BrBm4J,8BAAAv8I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,c/J6h0CxBquI,gC+J5h0C2C9C,EAAAI,kBAAtCp1J,GAAA83J,8BAA6BA,G/Joi0CpC,SAAS73J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GgKxj0CjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrCuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3BomE,EAAApmE,EAA2B,IAC3BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BgiF,EAAAhiF,EAAyB,IAGzBi4J,EAAA,SAAAj1J,GAAwD5B,EAAA62J,mCAAAj1J,EAcpD,SAAAi1J,sCACIj1J,EAAA1C,KAAAT,MAdIA,KAAAq4J,yBACAr4J,KAAAs4J,4BACAt4J,KAAAu4J,2BAOAv4J,KAAA29H,OAAiB,IACjB39H,KAAAw4J,MAAgB,IAChBx4J,KAAAy4J,KAAe,IAmX3B,MA9WIL,oCAAAt3J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAEb9d,KAAK04J,eACL14J,KAAK24J,mBACL34J,KAAK44J,kBAEL54J,KAAK64J,kBAAoB1vJ,SAASC,eAAe,gCACjDpJ,KAAK84J,iBAAmB3vJ,SAASC,eAAe,+BAChDpJ,KAAK+4J,QAAU5vJ,SAASC,eAAe,wBACvCpJ,KAAK+4J,QAAQx2E,QAAUviF,KAAKg5J,YAAY3kJ,KAAKrU,MAE7CA,KAAKk8D,SAGDk8F,mCAAAt3J,UAAA43J,aAAR,WACI,GAAoE,MAAhEh2J,EAAA0F,eAAe+tF,sBAA4C,qBAAW,CACtE,GAAI9sF,GAAgC3G,EAAA0F,eAAe+tF,sBAA4C,oBAC/F,IAAe,MAAX9sF,GAAuC,MAApBA,EAAQiG,UAEwB,MAA/C9M,EAAAgC,WAAWC,kBAAkByzJ,gBAC7B11J,EAAAgC,WAAWC,kBAAkByzJ,eAAehsJ,OAAS,EAErD,IAAK,GAAInM,GAAY,EAAGA,EAAIyC,EAAAgC,WAAWC,kBAAkByzJ,eAAehsJ,OAAQnM,IAAK,CACjF,GAAIw0D,GAAuCprD,SAASkX,cAAc,OAC9D44I,EAA4C9vJ,SAASkX,cAAc,OACvEk0C,GAAKjrD,UAAUC,IAAI,eACnB0vJ,EAAU3vJ,UAAUC,IAAI,gBACpB/G,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,QAC5Ck5J,EAAUx2D,UAAY,IACtBluC,EAAKjoD,aAAa,MAAO,OAEzB2sJ,EAAUx2D,UAAYjgG,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,GAAK,GACvEw0D,EAAKjoD,aAAa,MAAO9J,EAAAgC,WAAWC,kBAAkByzJ,eAAen4J,GAAK;AAE9Ew0D,EAAKykD,QAAc,KAAI,iBAAgBj5G,EAAI,GAC3Cw0D,EAAKjjD,YAAY2nJ,GACjB1kG,EAAKguB,QAAUviF,KAAKk5J,aAAa7kJ,KAAKrU,MACtCqJ,EAAQiG,SAASgC,YAAYijD,GAC7Bv0D,KAAKq4J,sBAAsBrlJ,KAAKuhD,MAO5C6jG,mCAAAt3J,UAAA63J,iBAAR,WACI,GAAuE,MAAnEj2J,EAAA0F,eAAe+tF,sBAA+C,wBAAW,CACzE,GAAI9sF,GAAgC3G,EAAA0F,eAAe+tF,sBAA+C,uBAClG,IAAe,MAAX9sF,GAAuC,MAApBA,EAAQiG,UAE2B,MAAlD9M,EAAAgC,WAAWC,kBAAkB4iE,mBAC7B7kE,EAAAgC,WAAWC,kBAAkB4iE,kBAAkBn7D,OAAS,EAExD,IAAK,GAAInM,GAAY,EAAGA,EAAIyC,EAAAgC,WAAWC,kBAAkB4iE,kBAAkBn7D,OAAQnM,IAAK,CACpF,GAAIw0D,GAAuCprD,SAASkX,cAAc,OAC9D44I,EAA4C9vJ,SAASkX,cAAc,OACvEk0C,GAAKjrD,UAAUC,IAAI,eACnB0vJ,EAAU3vJ,UAAUC,IAAI,gBACpB/G,EAAAgC,WAAWC,kBAAkB4iE,kBAAkBtnE,QAC/Ck5J,EAAUx2D,UAAY,IACtBluC,EAAKjoD,aAAa,MAAO,OAEzB2sJ,EAAUx2D,UAAY,IAAMjgG,EAAAgC,WAAWC,kBAAkB4iE,kBAAkBtnE,GAC3Ew0D,EAAKjoD,aAAa,MAAO9J,EAAAgC,WAAWC,kBAAkB4iE,kBAAkBtnE,GAAK,KAEjFw0D,EAAKykD,QAAc,KAAI,sBAAqBj5G,EAAI,GAChDw0D,EAAKjjD,YAAY2nJ,GACjB1kG,EAAKguB,QAAUviF,KAAKm5J,YAAY9kJ,KAAKrU,MACrCqJ,EAAQiG,SAASgC,YAAYijD,GAC7Bv0D,KAAKs4J,yBAAyBtlJ,KAAKuhD,MAO/C6jG,mCAAAt3J,UAAA83J,gBAAR,WACI,GAAsE,MAAlEl2J,EAAA0F,eAAe+tF,sBAA8C,uBAAW,CACxE,GAAI9sF,GAAgC3G,EAAA0F,eAAe+tF,sBAA8C,sBACjG,IAAe,MAAX9sF,GAAuC,MAApBA,EAAQiG,UAEgC,MAAvD9M,EAAAgC,WAAWC,kBAAkB20J,wBAC7B52J,EAAAgC,WAAWC,kBAAkB20J,uBAAuBltJ,OAAS,EAE7D,IAAK,GAAInM,GAAY,EAAGA,EAAIyC,EAAAgC,WAAWC,kBAAkB20J,uBAAuBltJ,OAAQnM,IAAK,CACzF,GAAIw0D,GAAuCprD,SAASkX,cAAc,OAC9D44I,EAA4C9vJ,SAASkX,cAAc,OACvEk0C,GAAKjrD,UAAUC,IAAI,eACnB0vJ,EAAU3vJ,UAAUC,IAAI,gBACpB/G,EAAAgC,WAAWC,kBAAkB20J,uBAAuBr5J,QACpDk5J,EAAUx2D,UAAY,IACtBluC,EAAKjoD,aAAa,MAAO,OAEzB2sJ,EAAUx2D,UAAY,IAAMjgG,EAAAgC,WAAWC,kBAAkB20J,uBAAuBr5J,GAChFw0D,EAAKjoD,aAAa,MAAO9J,EAAAgC,WAAWC,kBAAkB20J,uBAAuBr5J,GAAK,KAEtFw0D,EAAKykD,QAAc,KAAI,qBAAoBj5G,EAAI,GAC/Cw0D,EAAKjjD,YAAY2nJ,GACjB1kG,EAAKguB,QAAUviF,KAAKq5J,WAAWhlJ,KAAKrU,MACpCqJ,EAAQiG,SAASgC,YAAYijD,GAC7Bv0D,KAAKu4J,wBAAwBvlJ,KAAKuhD,MAOtD6jG,mCAAAt3J,UAAAo7D,MAAA,WACIl8D,KAAKs5J,cACLt5J,KAAKu5J,kBACLv5J,KAAKw5J,iBACLx5J,KAAKy5J,eACyB,MAA1Bz5J,KAAK64J,oBACL74J,KAAK64J,kBAAkBp2D,UAAY,IAEV,MAAzBziG,KAAK84J,mBACL94J,KAAK84J,iBAAiBr2D,UAAY,IAElB,MAAhBziG,KAAK+4J,SAAoB/4J,KAAK+4J,QAAQzvJ,UAAUiO,SAAS,cACzDvX,KAAK+4J,QAAQzvJ,UAAUC,IAAI,aAE/BvJ,KAAK29H,OAAS,IACd39H,KAAKw4J,MAAQ,IACbx4J,KAAKy4J,KAAO,IAEZ71J,EAAA6F,YAAY0+D,cAAgB,IAC5BvkE,EAAA6F,YAAY4+D,kBAAoB,IAChCzkE,EAAA6F,YAAY8+D,iBAAmB,KAG3B6wF,mCAAAt3J,UAAAw4J,YAAR,WACI,GAAkC,MAA9Bt5J,KAAKq4J,uBAAiCr4J,KAAKq4J,sBAAsBnsJ,OAAS,EAC1E,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKq4J,sBAAsBnsJ,OAAQnM,IACvDC,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAUiO,SAAS,YACjDvX,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAU6N,OAAO,WAE9CnX,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAUiO,SAAS,cAClDvX,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAUC,IAAI,cAMpD6uJ,mCAAAt3J,UAAAy4J,gBAAR,WACI,GAAqC,MAAjCv5J,KAAKs4J,0BAAoCt4J,KAAKs4J,yBAAyBpsJ,OAAS,EAChF,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKs4J,yBAAyBpsJ,OAAQnM,IAC1DC,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAUiO,SAAS,YACpDvX,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAU6N,OAAO,WAEjDnX,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAUiO,SAAS,cACrDvX,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAUC,IAAI,cAMvD6uJ,mCAAAt3J,UAAA04J,eAAR,WACI,GAAoC,MAAhCx5J,KAAKu4J,yBAAmCv4J,KAAKu4J,wBAAwBrsJ,OAAS,EAC9E,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKu4J,wBAAwBrsJ,OAAQnM,IACzDC,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAUiO,SAAS,YACnDvX,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAU6N,OAAO,WAEhDnX,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAUiO,SAAS,cACpDvX,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAUC,IAAI,cAMtD6uJ,mCAAAt3J,UAAA24J,aAAR,WACI,GAAkC,MAA9Bz5J,KAAKq4J,uBAAiCr4J,KAAKq4J,sBAAsBnsJ,OAAS,EAC1E,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKq4J,sBAAsBnsJ,OAAQnM,IACvDC,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAUiO,SAAS,cACjDvX,KAAKq4J,sBAAsBt4J,GAAGuJ,UAAU6N,OAAO,cAMvDihJ,mCAAAt3J,UAAA44J,iBAAR,WACI,GAAqC,MAAjC15J,KAAKs4J,0BAAoCt4J,KAAKs4J,yBAAyBpsJ,OAAS,EAChF,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKs4J,yBAAyBpsJ,OAAQnM,IAC1DC,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAUiO,SAAS,cACpDvX,KAAKs4J,yBAAyBv4J,GAAGuJ,UAAU6N,OAAO,cAM1DihJ,mCAAAt3J,UAAA64J,gBAAR,SAAwBC,GAAA,SAAAA,OAAA,EACpB,IACIC,GADAC,GAA0B,CAG9B,IAAoC,MAAhC95J,KAAKu4J,yBAAmCv4J,KAAKu4J,wBAAwBrsJ,OAAS,EAC9E,IAAK,GAAInM,GAAY,EAAGA,EAAIC,KAAKu4J,wBAAwBrsJ,OAAQnM,IACzDC,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAUiO,SAAS,aACnDuiJ,GAAiB,GAGsC,KAAvD95J,KAAKu4J,wBAAwBx4J,GAAG8e,aAAa,SAC7Cg7I,EAAU75J,KAAKu4J,wBAAwBx4J,IAGvCC,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAUiO,SAAS,cACnDvX,KAAKu4J,wBAAwBx4J,GAAGuJ,UAAU6N,OAAO,YAKzD2iJ,KAAmBF,GACJ,MAAXC,IACKA,EAAQvwJ,UAAUiO,SAAS,aAC5BsiJ,EAAQvwJ,UAAUC,IAAI,WACO,MAAzBvJ,KAAK84J,mBACL94J,KAAK84J,iBAAiBr2D,UAAY,OAM9Cm3D,GACe,MAAXC,GACIA,EAAQvwJ,UAAUiO,SAAS,YAC3BsiJ,EAAQvwJ,UAAU6N,OAAO,YAMjCihJ,mCAAAt3J,UAAAo4J,aAAR,SAAqBr5J,GACjB,GACS,MAALA,GACmB,MAAnBA,EAAEi1J,eACFj1J,EAAEi1J,cAAct2I,aAAa,SAC5B3e,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,aACtC,CACE4qE,EAAAp4D,SAASsS,KAAK,YACd,IAAI/uB,GAAczN,EAAEi1J,cAAcj2I,aAAa,MAC/C7e,MAAKs5J,cACLt5J,KAAKy5J,eACA55J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,YACpC1X,EAAEi1J,cAAcxrJ,UAAUC,IAAI,WAE9B1J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,cACnC1X,EAAEi1J,cAAcxrJ,UAAU6N,OAAO,aAErCnX,KAAK29H,OAASrwH,EACdtN,KAAK05J,mBACyD,MAA1DvwJ,SAASC,eAAe,iCACxBD,SAASC,eAAe,+BAA+BwyF,gBAAe,GAErB,WAA7Cp5F,EAAAgC,WAAW2B,eAAe0O,iBAC1B1L,SAASC,eAAe,UAAUoO,UAAY,EAC9CrO,SAASC,eAAe,QAAQoO,UAAY,MAMpD4gJ,mCAAAt3J,UAAAq4J,YAAR,SAAoBt5J,GAChB,GACS,MAALA,GACmB,MAAnBA,EAAEi1J,eACFj1J,EAAEi1J,cAAct2I,aAAa,SAC5B3e,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,aACtC,CACE4qE,EAAAp4D,SAASsS,KAAK,YACd,IAAI/uB,GAAczN,EAAEi1J,cAAcj2I,aAAa,MAC/C,IAA8B,MAA1B7e,KAAK64J,kBACL,GAAW,KAAPvrJ,GAAgC,MAAlBi5D,EAAAsD,WAAWK,IAAa,CACtC,GAAI6vF,GAA0Bn4J,EAAA4L,YAAYgvE,SAASlvE,EAAKi5D,EAAAsD,WAAWK,IACnElqE,MAAK64J,kBAAkBp2D,UACnBs3D,EAAkB,IAAMn3J,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,kBAE7D/1D,MAAK64J,kBAAkBp2D,UAAY,GAI3CziG,MAAKu5J,kBACLv5J,KAAK05J,mBACA75J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,YACpC1X,EAAEi1J,cAAcxrJ,UAAUC,IAAI,WAE9B1J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,cACnC1X,EAAEi1J,cAAcxrJ,UAAU6N,OAAO,aAEjB,MAAhBnX,KAAK+4J,SAAmB/4J,KAAK+4J,QAAQzvJ,UAAUiO,SAAS,cACxDvX,KAAK+4J,QAAQzvJ,UAAU6N,OAAO,aAElCnX,KAAKw4J,MAAQlrJ,EACbtN,KAAK25J,kBACwD,MAAzDxwJ,SAASC,eAAe,+BACxBD,SAASC,eAAe,8BAA8BwyF,gBAAe,GAGxB,WAA7Cp5F,EAAAgC,WAAW2B,eAAe0O,iBAC1B1L,SAASC,eAAe,UAAUoO,UAAY,EAC9CrO,SAASC,eAAe,QAAQoO,UAAY,KAKhD4gJ,mCAAAt3J,UAAAu4J,WAAR,SAAmBx5J,GACf,GACS,MAALA,GACmB,MAAnBA,EAAEi1J,eACFj1J,EAAEi1J,cAAct2I,aAAa,SAC5B3e,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,aACtC,CACE4qE,EAAAp4D,SAASsS,KAAK,YACd,IAAI/uB,GAAczN,EAAEi1J,cAAcj2I,aAAa,MAC/C,IAA6B,MAAzB7e,KAAK84J,iBACL,GAAW,KAAPxrJ,GAAgC,MAAlBi5D,EAAAsD,WAAWK,IAAa,CACtC,GAAI6vF,GAA0Bn4J,EAAA4L,YAAYgvE,SAASlvE,EAAKi5D,EAAAsD,WAAWK,IACnElqE,MAAK84J,iBAAiBr2D,UAClBs3D,EAAkB,IAAMn3J,EAAA6F,YAAYqtD,YAAYrzD,EAAAkG,SAASotD,kBAE7D/1D,MAAK84J,iBAAiBr2D,UAAY,GAG1CziG,MAAKw5J,iBACLx5J,KAAK25J,iBAAgB,GAChB95J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,YACpC1X,EAAEi1J,cAAcxrJ,UAAUC,IAAI,WAE9B1J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,cACnC1X,EAAEi1J,cAAcxrJ,UAAU6N,OAAO,aAErCnX,KAAKy4J,KAAOnrJ,EAEqC,WAA7C9K,EAAAgC,WAAW2B,eAAe0O,gBAC6B,MAAnD1L,SAASC,eAAe,0BACxBD,SAASC,eAAe,wBAAwBwyF,gBAAe,GAC/DzyF,SAASC,eAAe,UAAUoO,UAAY,EAC9CrO,SAASC,eAAe,QAAQoO,UAAY,KAMpD4gJ,mCAAAt3J,UAAAk4J,YAAR,SAAoBn5J,GACP,MAALA,GAAgC,MAAnBA,EAAEi1J,eAA0Bj1J,EAAEi1J,cAAcxrJ,UAAUiO,SAAS,eACxB,MAAhDpO,SAASC,eAAe,uBACxBD,SAASC,eAAe,qBAAqBoO,UAAY,GAE1C,MAAfxX,KAAK29H,SACL/6H,EAAA6F,YAAY0+D,cAAgBnnE,KAAK29H,QAEnB,MAAd39H,KAAKw4J,OAAmC,MAAlBjyF,EAAAsD,WAAWK,MACf,KAAdlqE,KAAKw4J,MACL51J,EAAA6F,YAAY4+D,kBAAoBrnE,KAAKw4J,MAErC51J,EAAA6F,YAAY4+D,kBAAoBzlE,EAAA4L,YAAYgvE,SAASx8E,KAAKw4J,MAAOjyF,EAAAsD,WAAWK,MAGnE,MAAblqE,KAAKy4J,MAAkC,MAAlBlyF,EAAAsD,WAAWK,MACf,KAAblqE,KAAKy4J,KACL71J,EAAA6F,YAAY8+D,iBAAmBvnE,KAAKy4J,KAEpC71J,EAAA6F,YAAY8+D,iBAAmB3lE,EAAA4L,YAAYgvE,SAASx8E,KAAKy4J,KAAMlyF,EAAAsD,WAAWK,MAGlFxnE,EAAA0F,eAAe+wD,eAAe,cA7X1Ci/F,mCAAAx8I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,chKq50CxBsuI,qCgKp50CgD9gD,EAAAa,qBAA3C93G,GAAA+3J,mCAAkCA,GhK450CzC,SAAS93J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GiKn70CjEna,EAAAzB,EAAgC,GAChCi4G,EAAAj4G,EAA4B,IAC5Bic,EAAAjc,EAA+B,IAW/B65J,EAAA,SAAA72J,GAAuC5B,EAAAy4J,kBAAA72J,EACnC,SAAA62J,qBAEI72J,EAAA1C,KAAAT,KAAM,IA+Bd,MAtBIg6J,mBAAAl5J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAQTA,EAAKU,aAAa,cAClBxe,KAAKsP,SAAWnG,SAASC,eAAe0U,EAAKe,aAAa,aACrC,MAAjB7e,KAAKsP,WAxBrB0qJ,kBAAAp+I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cjKm80CxBkwI,oBiKl80C+B5hD,EAAAtuF,YAA1BzpB,GAAA25J,kBAAiBA,GjK080CxB,SAAS15J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GkKn+0CjEs5I,EAAAl1J,EAAkC,KAClCyB,EAAAzB,EAAgC,GAChCic,EAAAjc,EAA+B,IAE/BuC,EAAAvC,EAA+B,IAG/B85J,EAAA,SAAA92J,GAAyC5B,EAAA04J,oBAAA92J,EAGrC,SAAA82J,uBACI92J,EAAA1C,KAAAT,MAHIA,KAAAk6J,SAA6B,KA+DzC,MAzDID,qBAAAn5J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GACb9d,KAAKm6J,kBAGDF,oBAAAn5J,UAAAq5J,eAAR,WACIn6J,KAAKk6J,SAA6B/wJ,SAASkX,cAAc,SACzDrgB,KAAKk6J,SAASnmI,KAAO,WACrB/zB,KAAKk6J,SAAS5wJ,UAAUC,IAAI,YAC5BvJ,KAAKk6J,SAASnoJ,iBAAiB,QAAS/R,KAAKo6J,WAAW/lJ,KAAKrU,OAExC,MAAjBA,KAAKsP,UACLtP,KAAKsP,SAASgC,YAAYtR,KAAKk6J,UAGnCl6J,KAAKsP,SAAShG,UAAUC,IAAI,mBAGhC0wJ,oBAAAn5J,UAAAuqG,QAAA,aAIA4uD,oBAAAn5J,UAAAs5J,WAAA,WAKI,GAAqB,MAAjBp6J,KAAKsP,WAAqBtP,KAAKsP,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,iBACvD,MAAf/iF,KAAKkgF,QACLx9E,EAAA0F,eAAe+wD,eAAen5D,KAAKkgF,QAGlB,MAAjBlgF,KAAK01J,UACL,IAAK,GAAI31J,GAAY,EAAGA,EAAIC,KAAK01J,SAASxpJ,OAAQnM,IAC9C2C,EAAA0F,eAAewtF,iBAAiB51F,KAAK01J,SAAS31J,KAM9Dk6J,oBAAAn5J,UAAAm3F,QAAA,SAAQlrF,GACJ,GAAcie,SAAVje,GAAiC,OAAVA,EAEvB,YADA/M,KAAKk6J,SAASG,SAAWr6J,KAAKk6J,SAASG,QAG3C,IAAa,QAATttJ,EAAiB,CACjB,GAAI/M,KAAKk6J,SAASG,QACd,MAEJr6J,MAAKk6J,SAASG,SAAU,MACrB,CACH,IAAKr6J,KAAKk6J,SAASG,QACf,MAEJr6J,MAAKk6J,SAASG,SAAU,IA9DpCJ,oBAAAr+I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,clK4h1CxBmwI,sBkK3h1CiC5E,EAAAI,kBAA5Bp1J,GAAA45J,oBAAmBA,GlKmi1C1B,SAAS35J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GmKtj1CjEna,EAAAzB,EAAgC,GAChCuC,EAAAvC,EAA+B,IAC/Bic,EAAAjc,EAA+B,IAC/Bm3G,EAAAn3G,EAAqC,IACrCqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAQ5Bm6J,EAAA,SAAAn3J,GAAgD5B,EAAA+4J,2BAAAn3J,EAI5C,SAAAm3J,8BACIn3J,EAAA1C,KAAAT,MAkDR,MAzCIs6J,4BAAAx5J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,IAGjBw8I,2BAAAx5J,UAAAy3F,YAAA,SAAYxrF,GACgB,MAApB/M,KAAKu6J,cACLv6J,KAAKu6J,YAAcpxJ,SAASC,eAAe,eAEpB,MAAvBpJ,KAAKw6J,iBACLx6J,KAAKw6J,eAAiBrxJ,SAASC,eAAe,kBAG7B,MAAjBpJ,KAAKsP,WACDvC,GAASnK,EAAA6F,YAAYmH,UACrB5P,KAAKsP,SAAShG,UAAU6N,OAAOzU,EAAA0F,eAAe26E,eAC1CvgF,EAAAgC,WAAW2B,eAAeswE,QACF,MAApBz2E,KAAKu6J,cACLv6J,KAAKu6J,YAAY1oJ,MAAMC,QAAU,SAEV,MAAvB9R,KAAKw6J,iBACLx6J,KAAKw6J,eAAe3oJ,MAAMC,QAAU,UAGhB,MAApB9R,KAAKu6J,cACLv6J,KAAKu6J,YAAY1oJ,MAAMC,QAAU,QAEV,MAAvB9R,KAAKw6J,iBACLx6J,KAAKw6J,eAAe3oJ,MAAMC,QAAU,WAIvC9R,KAAKsP,SAAShG,UAAUiO,SAAS7U,EAAA0F,eAAe26E,gBACjD/iF,KAAKsP,SAAShG,UAAUC,IAAI7G,EAAA0F,eAAe26E,iBA/C/Du3E,2BAAA1+I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cnKmm1CxBwwI,6BmKlm1CwChjD,EAAAa,qBAAnC93G,GAAAi6J,2BAA0BA,GnK0m1CjC,SAASh6J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GoKno1CjEna,EAAAzB,EAAgC,GAChCi4G,EAAAj4G,EAA4B,IAC5Bic,EAAAjc,EAA+B,IAQ/Bs6J,EAAA,SAAAt3J,GAA2C5B,EAAAk5J,sBAAAt3J,EACvC,SAAAs3J,yBACIt3J,EAAA1C,KAAAT,MA2BR,MAlBIy6J,uBAAA35J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,IASjB28I,sBAAA35J,UAAAm3F,QAAA,SAAQlrF,GACJ,GAAa,MAATA,EAAe,CACf,GAAIorF,GAA6BprF,EAAMiZ,MAAM,IACxB,OAAjBhmB,KAAKsP,UAA2C,IAAvB6oF,EAAYjsF,SACrClM,KAAKsP,SAASuC,MAAMlL,MAASuP,SAASiiF,EAAY,IAAMjiF,SAASiiF,EAAY,IAAO,IAAM,OA1B1GsiE,sBAAA7+I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,cpKip1CxB2wI,wBoKhp1CmCriD,EAAAtuF,YAA9BzpB,GAAAo6J,sBAAqBA,GpKwp1C5B,SAASn6J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GqK9q1CjEna,EAAAzB,EAA6C,GAC7Cic,EAAAjc,EAA+B,IAC/Bi4G,EAAAj4G,EAA4B,IAK5Bu6J,EAAA,SAAAv3J,GAAsC5B,EAAAm5J,iBAAAv3J,EAIlC,SAAAu3J,oBACIv3J,EAAA1C,KAAAT,MA8BR,MA3BI06J,kBAAA55J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAETA,EAAKU,aAAa,SAClBxe,YAAW8d,EAAKe,aAAa,QAGjC7e,KAAK26J,cAEgB,MAAjB36J,KAAKsP,UACLtP,KAAKsP,SAASwI,cAAc2O,YAAYzmB,KAAKsP,WAI7CorJ,iBAAA55J,UAAA65J,YAAR,WACI,GAAIpkG,GAASv2D,KAAKsP,SAASwI,cACvB8iJ,EAA+CzxJ,SAASkX,cAAc,OACtEqb,EAA4CvyB,SAASkX,cAAc,QACvEu6I,GAAatxJ,UAAUC,IAAI,gBAC3BmyB,EAAMm/H,QAAU76J,YAChB07B,EAAMlyB,UAAYxJ,KAAKsP,SAAS9F,UAChCoxJ,EAAatpJ,YAAYoqB,GAEJ,MAAjB17B,KAAKsP,UACLinD,EAAOsvB,WAAWv0E,YAAYspJ,IAjC1CF,iBAAA9+I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,crK0s1CxB4wI,mBqKzs1C8BtiD,EAAAtuF,YAAzBzpB,GAAAq6J,iBAAgBA,GrKit1CvB,SAASp6J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GsKpu1CjEna,EAAAzB,EAAgC,GAChCi4G,EAAAj4G,EAA4B,IAC5Bic,EAAAjc,EAA+B,IAW/B26J,EAAA,SAAA33J,GAA8B5B,EAAAu5J,SAAA33J,EAG1B,SAAA23J,YACI33J,EAAA1C,KAAAT,KAAM,IAwCd,MA/BI86J,UAAAh6J,UAAAa,OAAA,SAAOmc,GACH9d,KAAKsP,SAAWnG,SAASkX,cAAcvC,EAAKI,UAEpB,MAApBJ,EAAKy+C,cACLv8D,KAAKsP,SAASitD,YAAcz+C,EAAKy+C,aAGjCz+C,EAAKU,aAAa,YAClBxe,KAAKmsC,QAAUruB,EAAKe,aAAa,WASjCf,EAAKU,aAAa,UAClBxe,KAAKsP,SAAS0pG,QAAc,KAAIl7F,EAAKe,aAAa,SAGtD1b,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,IAGjBg9I,SAAAh6J,UAAAm3F,QAAA,SAAQlrF,GACJ5J,EAAArC,UAAMm3F,QAAOx3F,KAAAT,KAAC+M,GAEM,MAAhB/M,KAAKmsC,SAA8C,MAA3BnsC,KAAKsP,SAAS9F,WAAgD,IAA3BxJ,KAAKsP,SAAS9F,YACzExJ,KAAKsP,SAAS9F,UAAY,IAAMxJ,KAAKsP,SAAS9F,YA1C1DsxJ,SAAAl/I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAemD,ctKuv1CxBgxI,WsKtv1CsB1iD,EAAAtuF,YAAjBzpB,GAAAy6J,SAAQA,GtK8v1Cf,SAASx6J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/Ema,EAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GuKvx1CjEna,EAAAzB,EAAgC,GAChC46J,EAAA56J,EAA0B,KAC1Bic,EAAAjc,EAA+B,IAa/B66J,EAAA,SAAA73J,GAAwC5B,EAAAy5J,mBAAA73J,EAGpC,SAAA63J,sBACI73J,EAAA1C,KAAAT,MAeR,MANIg7J,oBAAAl6J,UAAAa,OAAA,SAAOmc,GACH3a,EAAArC,UAAMa,OAAMlB,KAAAT,KAAC8d,GAGb9d,KAAK8d,KAAOA,GAlBpBk9I,mBAAAp/I,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeuD,YvKyx1CxB8wI,qBuKxx1CgCD,EAAA7wI,UAA3B7pB,GAAA26J,mBAAkBA,GvKgy1CzB,SAAS16J,EAAQD,EAASF,GAE/B,YACA,IAAIyb,GAAc5b,MAAQA,KAAK4b,YAAe,SAAUC,EAAY9Q,EAAQ1F,EAAKyW,GAC7E,GAA2Hta,GAAvHb,EAAIyC,UAAU8I,OAAQ6P,EAAIpb,EAAI,EAAIoK,EAAkB,OAAT+Q,EAAgBA,EAAOjb,OAAOmb,yBAAyBjR,EAAQ1F,GAAOyW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY9Q,EAAQ1F,EAAKyW,OACpH,KAAK,GAAI/b,GAAI8b,EAAW3P,OAAS,EAAGnM,GAAK,EAAGA,KAASyB,EAAIqa,EAAW9b,MAAIgc,GAAKpb,EAAI,EAAIa,EAAEua,GAAKpb,EAAI,EAAIa,EAAEuJ,EAAQ1F,EAAK0W,GAAKva,EAAEuJ,EAAQ1F,KAAS0W,EAChJ,OAAOpb,GAAI,GAAKob,GAAKlb,OAAOmD,eAAe+G,EAAQ1F,EAAK0W,GAAIA,GwKtz1CjEna,EAAAzB,EAAwC,GACxCic,EAAAjc,EAA+B,IAO/B+pB,EAAA,mBAAAA,cAqBA,MAdIA,WAAAppB,UAAAa,OAAA,SAAOmc,KAQGoM,UAAAppB,UAAAsX,IAAV,SAAcC,KAhBlB6R,UAAAtO,GAACha,EAAA8kB,gBAAgBtK,EAAAuK,eAAeuD,YxK+z1CxBA,awK9z1CK7pB,GAAA6pB,UAASA,GxKs01ChB,SAAS5pB,EAAQD,GyK501CvB,GAAI46J,KAAQtnJ,UAAUC,UAAY,4BAA4BF,KAAKC,UAAUC,SACzEqnJ,KACA9wJ,KAAK8G,SAASiqJ,UAAY/wJ,KAAK+wJ,UAAUxrC,MAE7CvlH,KAAK8G,SAASC,QAAU/G,KAAKgH,SAASC","file":"c:\\Agent2\\_work\\93\\s\\wwwroot\\scripts\\neo-mastersOfEclipse.min.js","sourcesContent":["/*! Synot Games (c) 2025, Masters Of Eclipse Game, version: 1.0.0 */\n(function(e, a) { for(var i in a) e[i] = a[i]; }(this, /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1);\n\t__webpack_require__(10);\n\t__webpack_require__(7);\n\t__webpack_require__(11);\n\t__webpack_require__(76);\n\t__webpack_require__(47);\n\t__webpack_require__(118);\n\t__webpack_require__(77);\n\t__webpack_require__(84);\n\t__webpack_require__(38);\n\t__webpack_require__(36);\n\t__webpack_require__(23);\n\t__webpack_require__(28);\n\t__webpack_require__(27);\n\t__webpack_require__(43);\n\t__webpack_require__(34);\n\t__webpack_require__(35);\n\t__webpack_require__(37);\n\t__webpack_require__(39);\n\t__webpack_require__(55);\n\t__webpack_require__(50);\n\t__webpack_require__(44);\n\t__webpack_require__(24);\n\t__webpack_require__(62);\n\t__webpack_require__(26);\n\t__webpack_require__(52);\n\t__webpack_require__(59);\n\t__webpack_require__(54);\n\t__webpack_require__(72);\n\t__webpack_require__(73);\n\t__webpack_require__(83);\n\t__webpack_require__(116);\n\t__webpack_require__(115);\n\t__webpack_require__(119);\n\t__webpack_require__(121);\n\t__webpack_require__(69);\n\t__webpack_require__(14);\n\t__webpack_require__(53);\n\t__webpack_require__(19);\n\t__webpack_require__(16);\n\t__webpack_require__(15);\n\t__webpack_require__(92);\n\t__webpack_require__(12);\n\t__webpack_require__(125);\n\t__webpack_require__(126);\n\t__webpack_require__(82);\n\t__webpack_require__(96);\n\t__webpack_require__(127);\n\t__webpack_require__(107);\n\t__webpack_require__(95);\n\t__webpack_require__(106);\n\t__webpack_require__(98);\n\t__webpack_require__(13);\n\t__webpack_require__(89);\n\t__webpack_require__(103);\n\t__webpack_require__(128);\n\t__webpack_require__(130);\n\t__webpack_require__(131);\n\t__webpack_require__(132);\n\t__webpack_require__(133);\n\t__webpack_require__(134);\n\t__webpack_require__(97);\n\t__webpack_require__(135);\n\t__webpack_require__(136);\n\t__webpack_require__(91);\n\t__webpack_require__(90);\n\t__webpack_require__(137);\n\t__webpack_require__(104);\n\t__webpack_require__(102);\n\t__webpack_require__(93);\n\t__webpack_require__(120);\n\t__webpack_require__(68);\n\t__webpack_require__(70);\n\t__webpack_require__(71);\n\t__webpack_require__(65);\n\t__webpack_require__(41);\n\t__webpack_require__(20);\n\t__webpack_require__(67);\n\t__webpack_require__(138);\n\t__webpack_require__(66);\n\t__webpack_require__(40);\n\t__webpack_require__(105);\n\t__webpack_require__(6);\n\t__webpack_require__(139);\n\t__webpack_require__(140);\n\t__webpack_require__(141);\n\t__webpack_require__(142);\n\t__webpack_require__(143);\n\t__webpack_require__(108);\n\t__webpack_require__(144);\n\t__webpack_require__(145);\n\t__webpack_require__(146);\n\t__webpack_require__(51);\n\t__webpack_require__(147);\n\t__webpack_require__(112);\n\t__webpack_require__(99);\n\t__webpack_require__(148);\n\t__webpack_require__(149);\n\t__webpack_require__(60);\n\t__webpack_require__(113);\n\t__webpack_require__(85);\n\t__webpack_require__(46);\n\t__webpack_require__(86);\n\t__webpack_require__(79);\n\t__webpack_require__(117);\n\t__webpack_require__(61);\n\t__webpack_require__(114);\n\t__webpack_require__(78);\n\t__webpack_require__(80);\n\t__webpack_require__(81);\n\t__webpack_require__(110);\n\t__webpack_require__(88);\n\t__webpack_require__(150);\n\t__webpack_require__(100);\n\t__webpack_require__(151);\n\t__webpack_require__(111);\n\t__webpack_require__(101);\n\t__webpack_require__(152);\n\t__webpack_require__(87);\n\t__webpack_require__(153);\n\t__webpack_require__(154);\n\t__webpack_require__(155);\n\t__webpack_require__(156);\n\t__webpack_require__(158);\n\t__webpack_require__(159);\n\t__webpack_require__(160);\n\t__webpack_require__(162);\n\t__webpack_require__(161);\n\t__webpack_require__(157);\n\t__webpack_require__(163);\n\t__webpack_require__(164);\n\t__webpack_require__(74);\n\t__webpack_require__(165);\n\t__webpack_require__(166);\n\t__webpack_require__(75);\n\t__webpack_require__(167);\n\t__webpack_require__(168);\n\t__webpack_require__(48);\n\t__webpack_require__(169);\n\t__webpack_require__(170);\n\t__webpack_require__(49);\n\t__webpack_require__(33);\n\t__webpack_require__(31);\n\t__webpack_require__(29);\n\t__webpack_require__(30);\n\t__webpack_require__(109);\n\t__webpack_require__(45);\n\t__webpack_require__(32);\n\t__webpack_require__(56);\n\t__webpack_require__(124);\n\t__webpack_require__(171);\n\t__webpack_require__(63);\n\t__webpack_require__(21);\n\t__webpack_require__(94);\n\t__webpack_require__(64);\n\t__webpack_require__(9);\n\t__webpack_require__(22);\n\t__webpack_require__(25);\n\t__webpack_require__(42);\n\t__webpack_require__(8);\n\t__webpack_require__(129);\n\t__webpack_require__(57);\n\tmodule.exports = __webpack_require__(58);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tneo_common_1.libraryInitialize();\r\n\tvar neo_common_2 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Strings_1 = __webpack_require__(4);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar PreloaderProvider_1 = __webpack_require__(65);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ClientHostConsumer_1 = __webpack_require__(121);\r\n\tvar GameDefinition_1 = __webpack_require__(122);\r\n\tvar GameConfiguration_1 = __webpack_require__(123);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlatformsManager_1 = __webpack_require__(124);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar SplashScreen_1 = __webpack_require__(60);\r\n\tif (false) {\r\n\t    require(\"./Utils/PerfDebug/PerfDebug\");\r\n\t    require(\"./Utils/PerfDebug/PerfDebugWindow\");\r\n\t}\r\n\tvar gameApp;\r\n\tvar GameApp = (function (_super) {\r\n\t    __extends(GameApp, _super);\r\n\t    function GameApp() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    GameApp.main = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Application\", \"start main\");\r\n\t        }\r\n\t        var urlInfo = neo_common_2.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo[\"query\"][\"lang\"] != null) {\r\n\t            GameApp.language = urlInfo[\"query\"][\"lang\"];\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.initialize();\r\n\t        gameApp = new GameApp();\r\n\t        gameApp.load();\r\n\t    };\r\n\t    Object.defineProperty(GameApp, \"gameClient\", {\r\n\t        get: function () {\r\n\t            return gameApp._gameClient;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameApp.exit = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameClosing();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ExitUrl != \"\") {\r\n\t            neo_games_1.Platforms.Platforms.userAction(\"exit\", { url: AppContext_1.AppContext.gameConfiguration.ExitUrl });\r\n\t        }\r\n\t        return gameApp.exit();\r\n\t    };\r\n\t    GameApp.history = function () {\r\n\t        return gameApp.history();\r\n\t    };\r\n\t    GameApp.continue = function () {\r\n\t        return gameApp.continue();\r\n\t    };\r\n\t    GameApp.closeRealityCheck = function () {\r\n\t        return gameApp.closeRealityCheck();\r\n\t    };\r\n\t    GameApp.prototype.createGameClient = function (options) {\r\n\t        var gameClient = new neo_games_1.Communication.Game.GameClient(GameApp.key, options);\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.initialize(gameClient);\r\n\t        return gameClient;\r\n\t    };\r\n\t    GameApp.prototype.pauseAnimations = function () {\r\n\t        StageController_1.StageController.pauseAnimations();\r\n\t    };\r\n\t    GameApp.prototype.resumeAnimations = function () {\r\n\t        StageController_1.StageController.resumeAnimations();\r\n\t    };\r\n\t    GameApp.prototype.createPreloaderProvider = function () {\r\n\t        return new PreloaderProvider_1.PreloaderProvider();\r\n\t    };\r\n\t    GameApp.prototype.createGameDefinition = function (definition) {\r\n\t        return new GameDefinition_1.GameDefinition(definition);\r\n\t    };\r\n\t    GameApp.prototype.createGameConfiguration = function (configuration) {\r\n\t        return new GameConfiguration_1.GameConfiguration(configuration);\r\n\t    };\r\n\t    GameApp.prototype.createAppContext = function () {\r\n\t        return new AppContext_1.AppContext(this.gameConfiguration, this.gameDefinition);\r\n\t    };\r\n\t    GameApp.prototype.createClientHostConsumer = function () {\r\n\t        return new ClientHostConsumer_1.GameClientHostConsumer(this);\r\n\t    };\r\n\t    GameApp.prototype.requireStrings = function () {\r\n\t        __webpack_require__(4);\r\n\t    };\r\n\t    GameApp.prototype.createStage = function (quality, size) {\r\n\t        var color = 0x000000;\r\n\t        StageController_1.StageController.createStage(size.width, size.height, color, \"canvas\");\r\n\t    };\r\n\t    GameApp.prototype.initClientHost = function () {\r\n\t        PlatformsManager_1.PlatformsManager.create();\r\n\t        return Promise.resolve();\r\n\t    };\r\n\t    GameApp.prototype.parseLoadResult = function (loadResult) {\r\n\t        var result = null;\r\n\t        if (loadResult != null) {\r\n\t            if (loadResult.status == neo_games_1.GameEngine.Types.AppLoadStatus.Failure) {\r\n\t                if (loadResult.error != null) {\r\n\t                    result = {\r\n\t                        message: loadResult.error.message,\r\n\t                        stack: loadResult.error.stack,\r\n\t                    };\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    GameApp.prototype.finalizeLoad = function () {\r\n\t        if (this.loadingSucceed) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.current != null) {\r\n\t                var volume = AppContext_1.AppContext.current.getVolume();\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(volume)) {\r\n\t                    if (!neo_common_1.Utils.isNullOrUndefined(volume.CurrentStepNo)) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(this.loggerGroup, \"Updating sound volume by step \" + volume.CurrentStepNo + \".\");\r\n\t                        }\r\n\t                        HtmlController_1.HtmlController.setSound(volume.CurrentStepNo);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(this.loggerGroup, \"client host does not return valid value for volume 'CurrentStepNo'!\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        neo_common_1.Logger.debugGroup(this.loggerGroup, \"client host does not returns volume data, sound volume was not updated.\");\r\n\t                    }\r\n\t                }\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t            var versionBuild = \"\";\r\n\t            if (false) {\r\n\t                var versionBuildValues = neo_common_1.Preloader.getVersionBuild().split(\"_\");\r\n\t                versionBuild = neo_common_1.Utils.valueOrDefault(versionBuildValues && versionBuildValues.length > 0\r\n\t                    ? versionBuildValues[versionBuildValues.length - 1]\r\n\t                    : \"\", \"\");\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBuildVersion, versionBuild);\r\n\t            DataManager_1.DataManager.configureGameData();\r\n\t            if (neo_games_1.Platforms.Platforms.canPlay) {\r\n\t                GameManager_1.GameManager.startGame(this._gameClient, this);\r\n\t                neo_games_1.Platforms.Platforms.gameReady();\r\n\t            }\r\n\t            else {\r\n\t                var loadingScreen = document.getElementById(\"loading\");\r\n\t                var element = document.getElementById(\"progressNumber\");\r\n\t                if (loadingScreen != null) {\r\n\t                    loadingScreen.classList.add(\"_error\");\r\n\t                }\r\n\t                if (element != null) {\r\n\t                    element.innerHTML = Strings_1.Strings.loaded\r\n\t                        ? Languages_1.Languages.getRid(\"ERROR_404\")\r\n\t                        : \"Internal error. Please contact support.\";\r\n\t                    GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\r\n\t                }\r\n\t                SplashScreen_1.SplashScreen.showError();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            neo_games_1.Platforms.Platforms.gameFailed();\r\n\t            window.onblur = null;\r\n\t            window.onfocus = null;\r\n\t            PIXI.sound.muteAll();\r\n\t            var loadingScreen = document.getElementById(\"loading\");\r\n\t            var element = document.getElementById(\"progressNumber\");\r\n\t            if (loadingScreen != null) {\r\n\t                loadingScreen.classList.add(\"_error\");\r\n\t            }\r\n\t            if (element != null) {\r\n\t                element.innerHTML = Strings_1.Strings.loaded\r\n\t                    ? Languages_1.Languages.getRid(\"ERROR_404\")\r\n\t                    : \"Internal error. Please contact support.\";\r\n\t                GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\r\n\t            }\r\n\t            SplashScreen_1.SplashScreen.showError();\r\n\t            if (false) {\r\n\t                var err = \"\";\r\n\t                if (!neo_common_1.PreloaderInfo.instance.loadSucceed) {\r\n\t                    err += \" Preloader does not load successfully!\";\r\n\t                }\r\n\t                neo_common_1.Logger.errorGroup(this.loggerGroup, err);\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            PerfDebug.setup(StageController_1.StageController.Stage);\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistory = function (isGUI) {\r\n\t        if (isGUI === void 0) { isGUI = false; }\r\n\t        if (isGUI) {\r\n\t            if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl) &&\r\n\t                AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl !== \"\") {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n\t                    !neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                    neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl });\r\n\t                    if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                        return;\r\n\t                    }\r\n\t                    window.open(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n\t                }\r\n\t                else if (AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n\t                    neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                    GameApp.openGameRoundHistoryHome();\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl });\r\n\t                    if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                        return;\r\n\t                    }\r\n\t                    window.open(AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl, \"_blank\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                GameApp.openGameRoundHistoryHome();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            GameApp.openGameRoundHistoryHome();\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistoryHome = function () {\r\n\t        var gameKey = neo_common_2.UriHelper.getGameKey();\r\n\t        var urlInfo = neo_common_2.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        var timeZoneOffset = new Date().getTimezoneOffset();\r\n\t        if (gameKey != null && urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t            var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t            var token = urlInfo[\"hash\"].substring(1);\r\n\t            var lang = urlInfo[\"query\"][\"lang\"] ? urlInfo[\"query\"][\"lang\"] : GameApp.language;\r\n\t            var historyUrl = serverUrl + \"GameRounds/\" + GameApp.key + \"?culture=\" + lang + \"&tzo=\" + timeZoneOffset + \"&\" + token;\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: historyUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(historyUrl, \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistoryFromUrl = function () {\r\n\t        if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n\t        }\r\n\t        else if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.HistoryUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.HistoryUrl, \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    GameApp.prototype.beforeExit = function () {\r\n\t        return this._gameClient.leaveGame();\r\n\t    };\r\n\t    GameApp.prototype.handleStringsLoadCompleted = function (lang) {\r\n\t        if (HtmlController_1.HtmlController.RidElements != null && HtmlController_1.HtmlController.RidElements.length > 0) {\r\n\t            for (var i = 0; i < HtmlController_1.HtmlController.RidElements.length; i++) {\r\n\t                HtmlController_1.HtmlController.RidElements[i].updateText();\r\n\t            }\r\n\t        }\r\n\t        var languageElements = document.querySelectorAll(\"[language]\");\r\n\t        for (var i = 0; i < languageElements.length; i++) {\r\n\t            languageElements[i].setAttribute(\"language\", lang);\r\n\t        }\r\n\t    };\r\n\t    GameApp.language = \"en-US\";\r\n\t    GameApp.key = \"MastersOfEclipse\";\r\n\t    return GameApp;\r\n\t}(neo_games_1.GameEngine.GameAppBase));\r\n\texports.GameApp = GameApp;\r\n\tGameApp.main();\r\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t(function() { module.exports = this[\"NeoCommon\"]; }());\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t(function() { module.exports = this[\"NeoGames\"]; }());\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tfunction checkInitialized() {\r\n\t    neo_common_1.StringsFactory.checkInitialized();\r\n\t}\r\n\tvar Strings = (function () {\r\n\t    function Strings(json) {\r\n\t        neo_common_1.ArgValidator.ensureIsNotNullOrUndefined(json, \"json\");\r\n\t        Strings._json = json;\r\n\t    }\r\n\t    Object.defineProperty(Strings, \"loaded\", {\r\n\t        get: function () {\r\n\t            return !neo_common_1.Utils.isNullOrUndefined(Strings._json);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Strings.get = function (key) {\r\n\t        return Strings._json && Strings._json.hasOwnProperty(key) ? Strings._json[key] : \"@@\" + key + \"@@\";\r\n\t    };\r\n\t    Strings.getWithValues = function (key) {\r\n\t        var tmpl = [];\r\n\t        for (var _i = 1; _i < arguments.length; _i++) {\r\n\t            tmpl[_i - 1] = arguments[_i];\r\n\t        }\r\n\t        if (Strings._json && Strings._json.hasOwnProperty(key)) {\r\n\t            var value = Strings._json[key];\r\n\t            var regexFormat = /(\\%m|\\%s)/gm;\r\n\t            var matchCnt = 0;\r\n\t            while (regexFormat.exec(value)) {\r\n\t                matchCnt++;\r\n\t            }\r\n\t            var args = tmpl;\r\n\t            if (matchCnt !== args.length) {\r\n\t                throw \"Provided argument count (\" + args.length + \") does not match required string params count (\" + matchCnt + \")\";\r\n\t            }\r\n\t            var idx = -1;\r\n\t            return value.replace(regexFormat, function (match) {\r\n\t                var val = args[++idx];\r\n\t                if (neo_common_1.StringUtils.equals(match, \"%m\", true)) {\r\n\t                    val = neo_common_1.NumberUtils.valueToNumber(val, AppContext_1.AppContext.gameConfiguration.UseCoins ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t                }\r\n\t                else if (!neo_common_1.StringUtils.equals(match, \"%s\", true)) {\r\n\t                    throw \"Unknown formatter \\\"\" + match + \" !\\\"\";\r\n\t                }\r\n\t                return val;\r\n\t            });\r\n\t        }\r\n\t        return \"@@\" + key + \"@@\";\r\n\t    };\r\n\t    return Strings;\r\n\t}());\r\n\texports.Strings = Strings;\r\n\twindow[\"Strings\"] = Strings;\r\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar AppContext = (function (_super) {\r\n\t    __extends(AppContext, _super);\r\n\t    function AppContext(gameConfiguration, gameDefinition) {\r\n\t        _super.call(this, gameConfiguration, gameDefinition, GameApp_1.GameApp.key);\r\n\t        AppContext._current = this;\r\n\t    }\r\n\t    Object.defineProperty(AppContext, \"current\", {\r\n\t        get: function () {\r\n\t            return AppContext._current;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"gameConfiguration\", {\r\n\t        get: function () {\r\n\t            return AppContext._current == null ? null : AppContext._current.gameConfiguration;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"gameDefinition\", {\r\n\t        get: function () {\r\n\t            return AppContext._current.gameDefinition;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"clientHost\", {\r\n\t        get: function () {\r\n\t            return AppContext._current.clientHost;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AppContext.prototype.setHideAmounts = function (hideAmounts) {\r\n\t        if (AppContext.clientHost != null) {\r\n\t            AppContext.clientHost.updateSharedSetting(\"HideAmounts\", hideAmounts.toString());\r\n\t        }\r\n\t    };\r\n\t    AppContext.prototype.getHideAmounts = function () {\r\n\t        if (AppContext.clientHost != null) {\r\n\t            if (AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                var hideAmounts = AppContext.clientHost.getSharedSetting(\"HideAmounts\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(hideAmounts)) {\r\n\t                    return neo_common_1.StringUtils.parseBoolean(hideAmounts);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    AppContext._current = null;\r\n\t    return AppContext;\r\n\t}(neo_games_1.GameEngine.AppContextBase));\r\n\texports.AppContext = AppContext;\r\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Pool_1 = __webpack_require__(7);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Focus_1 = __webpack_require__(64);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(51);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar StageController = (function () {\r\n\t    function StageController() {\r\n\t    }\r\n\t    StageController.pauseAnimations = function () {\r\n\t        if (false) {\r\n\t            StageController._pauseAnimations = true;\r\n\t            neo_common_1.Logger.debugGroup(\"StageController\", \"Animations was paused\");\r\n\t        }\r\n\t    };\r\n\t    StageController.resumeAnimations = function () {\r\n\t        if (false) {\r\n\t            if (StageController._pauseAnimations) {\r\n\t                StageController._pauseAnimations = false;\r\n\t                StageController.redrawStage();\r\n\t                neo_common_1.Logger.debugGroup(\"StageController\", \"Animations was resumed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(StageController, \"textureManager\", {\r\n\t        get: function () {\r\n\t            return StageController.Renderer.textureManager;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    StageController.updateTexture = function (texture) {\r\n\t        return this._noWebGL ? null : StageController.Renderer.textureManager.updateTexture(texture);\r\n\t    };\r\n\t    StageController.getTextureByResourceId = function (id) {\r\n\t        var texture = PIXI.utils.TextureCache[id];\r\n\t        var resourcePath = \"\";\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(texture)) {\r\n\t            resourcePath = neo_common_1.PreloaderInfo.instance.getResourcePathById(id);\r\n\t            if (resourcePath) {\r\n\t                texture = PIXI.utils.TextureCache[resourcePath];\r\n\t                if (neo_common_1.Utils.isNullOrUndefined(texture)) {\r\n\t                    neo_common_1.Logger.errorGroup(\"StageController\", \"Could not find texture by id '\" + id + \"' (resourcePath: \" + resourcePath + \")\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                neo_common_1.Logger.errorGroup(\"StageController\", \"Could not find resource path for id '\" + id + \"' !\");\r\n\t            }\r\n\t        }\r\n\t        return texture;\r\n\t    };\r\n\t    StageController.handleLostWebGLContext = function () {\r\n\t        if (StageController._contextLost) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        var modules = neo_games_1.Communication.Game.GameModules;\r\n\t        for (var key in modules) {\r\n\t            if (modules.hasOwnProperty(key)) {\r\n\t                ModuleManager_1.ModuleManager.disableChannelModule(modules[key]);\r\n\t            }\r\n\t        }\r\n\t        GameManager_1.GameManager.gameClient.sendPlayerLogError(\"ERROR - WebGL\");\r\n\t        AppContext_1.AppContext.current.showDialog(Languages_1.Languages.getRid(\"ERROR_WEBGL\"), false, \"\", \"\", \"\", { special: true });\r\n\t        StageController._contextLost = true;\r\n\t    };\r\n\t    StageController.createStage = function (width, height, color, canvasId) {\r\n\t        StageController.Width = width;\r\n\t        StageController.Height = height;\r\n\t        var canvas = document.getElementById(canvasId);\r\n\t        var loading = document.getElementById(\"loading\");\r\n\t        var rendererOptions = { view: canvas, roundPixels: false };\r\n\t        rendererOptions.backgroundColor = color;\r\n\t        this.Renderer = PIXI.autoDetectRenderer(width, height, rendererOptions, this._noWebGL);\r\n\t        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            StageController._noWebGL = true;\r\n\t        }\r\n\t        PIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\t        document.body.appendChild(this.Renderer.view);\r\n\t        this.Stage = new PIXI.Container();\r\n\t        Scaling_1.Scaling.scale();\r\n\t        Focus_1.Focus.focus();\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.handle();\r\n\t        loading.style.display = \"block\";\r\n\t        canvas.style.display = \"none\";\r\n\t        canvas.addEventListener(\"webglcontextlost\", StageController.handleLostWebGLContext);\r\n\t        window[\"__PIXI_STAGE__\"] = this.Stage;\r\n\t        window[\"__PIXI_RENDERER__\"] = this.Renderer;\r\n\t        this.redrawStage();\r\n\t    };\r\n\t    StageController.addChild = function (element) {\r\n\t        this.Stage.addChild(element);\r\n\t    };\r\n\t    StageController.redrawStage = function () {\r\n\t        if (StageController._pauseAnimations) {\r\n\t            return;\r\n\t        }\r\n\t        Pool_1.AnimationFramePool.draw();\r\n\t        StageController.Renderer.render(StageController.Stage);\r\n\t        requestAnimationFrame(StageController.redrawStage);\r\n\t    };\r\n\t    StageController.UpdatedTextures = {};\r\n\t    StageController.FPS = 60;\r\n\t    StageController.baseStage = false;\r\n\t    StageController.freespinStage = false;\r\n\t    StageController._noWebGL = false;\r\n\t    StageController._pauseAnimations = false;\r\n\t    StageController._contextLost = false;\r\n\t    return StageController;\r\n\t}());\r\n\texports.StageController = StageController;\r\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar AnimationFramePool = (function () {\r\n\t    function AnimationFramePool() {\r\n\t    }\r\n\t    AnimationFramePool.registerFrame = function (frame) {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            if (pool[i].frame_uid === frame.frame_uid) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        pool.push(frame);\r\n\t        return true;\r\n\t    };\r\n\t    AnimationFramePool.unregisterFrame = function (frame) {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        var idx = -1;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            if (pool[i].frame_uid === frame.frame_uid) {\r\n\t                idx = i;\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t        var result = idx > -1;\r\n\t        if (result) {\r\n\t            if (pool[idx].frame_uid === frame.frame_uid) {\r\n\t                pool.splice(idx, 1);\r\n\t            }\r\n\t            else {\r\n\t                result = false;\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    AnimationFramePool.draw = function () {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            var frame = pool[i];\r\n\t            frame.frame_draw();\r\n\t        }\r\n\t    };\r\n\t    AnimationFramePool.framesPool = [];\r\n\t    return AnimationFramePool;\r\n\t}());\r\n\texports.AnimationFramePool = AnimationFramePool;\r\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar EventEmitter = PIXI.utils.EventEmitter;\r\n\tvar Scaling = (function () {\r\n\t    function Scaling() {\r\n\t    }\r\n\t    Scaling.scale = function () {\r\n\t        Scaling.Root = document.getElementById(\"root\");\r\n\t        Scaling.Screen = document.getElementById(\"screen\");\r\n\t        Scaling.IsIOs = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t        Scaling.IsIOsTablet = /iPad/.test(navigator.platform);\r\n\t        Scaling.IsIOsWebview = Scaling.IsIOs && window.indexedDB !== null;\r\n\t        Scaling.IOsResizeTimer = FrameTimer_1.CreateFrameTimer(\"scalingTimer\");\r\n\t        Scaling.IOsResizeTimer.on(FrameTimer_1.FrameTimerEvents.Complete, Scaling.resizeRoot.bind(this, true));\r\n\t        Scaling.Emitter = new EventEmitter();\r\n\t        Scaling.resizeRoot();\r\n\t        window.onresize = Scaling.onResizeRoot;\r\n\t        document.body.classList.add(window[\"CHANNEL\"] === \"mobile\" ? \"mobile\" : \"desktop\");\r\n\t        document.body.classList.add(\"ui-v\" + window[\"UI-VERSION\"]);\r\n\t        if (Scaling.isSafari()) {\r\n\t            document.body.classList.add(\"safari\");\r\n\t        }\r\n\t        if (Scaling.isIosChrome()) {\r\n\t            document.body.classList.add(\"iOsChrome\");\r\n\t        }\r\n\t        if (Scaling.IsIOs) {\r\n\t            Scaling.setupIOs();\r\n\t        }\r\n\t        document.addEventListener(\"touchend\", function (event) {\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                return;\r\n\t            }\r\n\t            var diff = event.timeStamp - Scaling.lastTouch;\r\n\t            Scaling.lastTouch = event.timeStamp;\r\n\t            if (!diff || diff > 400) {\r\n\t                return;\r\n\t            }\r\n\t            event.preventDefault();\r\n\t            event.stopPropagation();\r\n\t            var evt = new MouseEvent(\"click\");\r\n\t            event.target.dispatchEvent(evt);\r\n\t        }, false);\r\n\t    };\r\n\t    Scaling.onResizeRoot = function () {\r\n\t        Scaling.resizeRoot();\r\n\t        if (Scaling.IsIOsWebview) {\r\n\t            setTimeout(function () { return Scaling.resizeRoot(); }, 500);\r\n\t        }\r\n\t    };\r\n\t    Scaling.resizeRoot = function (delayed, preventEmitEvent) {\r\n\t        if (delayed === void 0) { delayed = false; }\r\n\t        if (preventEmitEvent === void 0) { preventEmitEvent = true; }\r\n\t        if (!delayed && Scaling.IsIOs && Scaling.IOsResizeTimer && (Scaling.inIframe() || Scaling.isIosChrome())) {\r\n\t            Scaling.IOsResizeTimer.stop();\r\n\t            Scaling.IOsResizeTimer.start(Scaling.IOsResizeDelay);\r\n\t        }\r\n\t        document.body.style.overflow = \"hidden\";\r\n\t        neo_games_1.Plugins.StatusBar.updateHeight();\r\n\t        var sab = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\") || \"0\");\r\n\t        var innerHeight = window.innerHeight + neo_games_1.Plugins.StatusBar.StatusBarHeight - sab;\r\n\t        var innerWidth = window.innerWidth + neo_games_1.Plugins.StatusBar.StatusBarWidth;\r\n\t        if (Scaling.IsIOs && neo_games_1.Plugins.StatusBar.StatusBarHeight != 0) {\r\n\t            document.documentElement.style.width = sab > 0 ? window.innerWidth + \"px\" : \"\";\r\n\t            document.documentElement.style.height = sab > 0 ? window.innerHeight - sab + \"px\" : \"\";\r\n\t            document.documentElement.style.overflow = sab > 0 ? \"visible\" : \"\";\r\n\t        }\r\n\t        var ratioWidth = innerWidth / (StageController_1.StageController.Width + Scaling.LeftPanelWidth);\r\n\t        var ratioHeight = innerHeight / (StageController_1.StageController.Height + Jackpot_1.Jackpot.Height);\r\n\t        var top = -(StageController_1.StageController.Height + Jackpot_1.Jackpot.Height - innerHeight) / 2;\r\n\t        var left = -(StageController_1.StageController.Width - innerWidth) / 2;\r\n\t        if (ratioWidth < ratioHeight) {\r\n\t            Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n\t            left += (Scaling.LeftPanelWidth / 2) * ratioWidth;\r\n\t        }\r\n\t        else {\r\n\t            Scaling.Root.style.transform = \"scale(\" + ratioHeight + \")\";\r\n\t            left += (Scaling.LeftPanelWidth / 2) * ratioHeight;\r\n\t        }\r\n\t        Scaling.Root.style.top = top.toString() + \"px\";\r\n\t        Scaling.Root.style.left = left.toString() + \"px\";\r\n\t        var enabledPortrait = true;\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.current != null) {\r\n\t            enabledPortrait = AppContext_1.AppContext.gameConfiguration.UsePortraitMode;\r\n\t            if (Scaling.IsIOsTablet) {\r\n\t                enabledPortrait = false;\r\n\t            }\r\n\t            if (!enabledPortrait) {\r\n\t                document.body.classList.remove(\"portrait\", \"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n\t                Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            }\r\n\t        }\r\n\t        if (enabledPortrait && window[\"CHANNEL\"] === \"mobile\") {\r\n\t            var portraitRatio = innerWidth / innerHeight;\r\n\t            if (innerHeight > innerWidth && portraitRatio < Scaling.PortraitRatio) {\r\n\t                document.body.classList.add(\"portrait\");\r\n\t                document.body.classList.remove(\"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n\t                if (portraitRatio > Scaling.PortraitMobileRatio && portraitRatio < Scaling.PortraitRatio) {\r\n\t                    document.body.classList.add(\"tablet\");\r\n\t                    if (portraitRatio > 0.85) {\r\n\t                        document.body.classList.add(\"tablet-xs\");\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (portraitRatio > 0.61) {\r\n\t                        document.body.classList.add(\"mobile-xs\");\r\n\t                    }\r\n\t                }\r\n\t                ratioWidth = innerWidth / StageController_1.StageController.Height;\r\n\t                left = -(StageController_1.StageController.Height - innerWidth) / 2;\r\n\t                Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n\t                Scaling.Root.style.top = \"0\";\r\n\t                Scaling.Root.style.left = left.toString() + \"px\";\r\n\t                Scaling.Root.style.height = (StageController_1.StageController.Height / innerWidth) * innerHeight + \"px\";\r\n\t            }\r\n\t            else {\r\n\t                document.body.classList.remove(\"portrait\", \"tablet\");\r\n\t                Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            }\r\n\t            if (document.body.classList.contains(\"portrait\")) {\r\n\t                Scaling.Root.classList.remove(\"gameShadow\");\r\n\t                Scaling.Screen.classList.add(\"gameShadow\");\r\n\t            }\r\n\t            else {\r\n\t                Scaling.Root.classList.add(\"gameShadow\");\r\n\t                Scaling.Screen.classList.remove(\"gameShadow\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            Scaling.Root.classList.add(\"gameShadow\");\r\n\t        }\r\n\t        if (document.documentElement.scrollTop != 0) {\r\n\t            document.documentElement.scrollTop = 0;\r\n\t        }\r\n\t        document.body.style.overflow = \"\";\r\n\t        if (Scaling.Emitter && preventEmitEvent) {\r\n\t            Scaling.Emitter.emit(Scaling.EventResize, Scaling.isPortrait(), innerWidth / (innerHeight - Jackpot_1.Jackpot.Height), innerWidth, innerHeight, ratioWidth, ratioHeight);\r\n\t        }\r\n\t    };\r\n\t    Scaling.setupIOs = function () {\r\n\t        document.addEventListener(\"gesturestart\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"gesturechange\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"gestureend\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"touchmove\", this.preventMovePropagation, true);\r\n\t    };\r\n\t    Scaling.preventPropagation = function (e) {\r\n\t        e.stopPropagation();\r\n\t        e.preventDefault();\r\n\t    };\r\n\t    Scaling.preventMovePropagation = function (e) {\r\n\t        var target = e.target;\r\n\t        while (target) {\r\n\t            if (target == document.documentElement) {\r\n\t                target = null;\r\n\t            }\r\n\t            else if (target.classList.contains(\"mask\") || target.classList.contains(\"dialogContent\")) {\r\n\t                return;\r\n\t            }\r\n\t            else {\r\n\t                if (target.parentElement != null) {\r\n\t                    target = target.parentElement;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        e.stopPropagation();\r\n\t        e.preventDefault();\r\n\t    };\r\n\t    Scaling.isSafari = function () {\r\n\t        var ua = navigator.userAgent;\r\n\t        var vendor = navigator.vendor;\r\n\t        return /Safari/i.test(ua) && /Apple Computer/.test(vendor);\r\n\t    };\r\n\t    Scaling.isIosChrome = function () {\r\n\t        return !!(Scaling.IsIOs && (navigator.userAgent.match(\"CriOS\") || navigator.userAgent.match(\"FxiOS\")));\r\n\t    };\r\n\t    Scaling.inIframe = function () {\r\n\t        try {\r\n\t            return window.self !== window.top;\r\n\t        }\r\n\t        catch (e) {\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    Scaling.onLoadComplete = function () {\r\n\t        document.body.classList.add(\"loaded\");\r\n\t    };\r\n\t    Scaling.isPortrait = function () {\r\n\t        return document.body.classList.contains(\"portrait\");\r\n\t    };\r\n\t    Scaling.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Scaling\", s);\r\n\t        }\r\n\t    };\r\n\t    Scaling.EventResize = \"eventResize\";\r\n\t    Scaling.PortraitRatio = 0.9;\r\n\t    Scaling.PortraitMobileRatio = 0.72;\r\n\t    Scaling.LeftPanelWidth = 0;\r\n\t    Scaling.IsIOs = false;\r\n\t    Scaling.IsIOsTablet = false;\r\n\t    Scaling.IsIOsWebview = false;\r\n\t    Scaling.IOsResizeDelay = 60;\r\n\t    return Scaling;\r\n\t}());\r\n\texports.Scaling = Scaling;\r\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AnimationFrame_1 = __webpack_require__(10);\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\texports.FrameTimerEvents = {\r\n\t    Progress: \"progress\",\r\n\t    Complete: \"complete\",\r\n\t};\r\n\tvar FrameTimer = (function (_super) {\r\n\t    __extends(FrameTimer, _super);\r\n\t    function FrameTimer(timerName) {\r\n\t        _super.call(this);\r\n\t        this._useFrames = false;\r\n\t        this._playing = false;\r\n\t        this._paused = false;\r\n\t        timerName = neo_common_1.Utils.valueOrDefault(timerName, neo_common_1.Utils.generateUuid());\r\n\t        this._timerName = \"FrameTimer-\" + timerName;\r\n\t        this._uid = \"FrameTimer_\" + timerName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        this._timerCounter = 0;\r\n\t        this._finalTimerCounter = 0;\r\n\t    }\r\n\t    FrameTimer.prototype.frame_onFrame = function () {\r\n\t        if (this._timerCounter === this._finalTimerCounter) {\r\n\t            this.stop();\r\n\t            this.conclude();\r\n\t        }\r\n\t        else {\r\n\t            this.super2.emit(exports.FrameTimerEvents.Progress);\r\n\t            this._timerCounter++;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(FrameTimer.prototype, \"frame_name\", {\r\n\t        get: function () {\r\n\t            return this._timerName;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    FrameTimer.prototype.start = function (duration) {\r\n\t        var _this = this;\r\n\t        if (!this._playing) {\r\n\t            FrameTimerPool_1.FrameTimerPool.add(this._uid, this);\r\n\t        }\r\n\t        this._playing = true;\r\n\t        if (this._useFrames) {\r\n\t            this._timerCounter = 0;\r\n\t            this._finalTimerCounter = duration;\r\n\t            this.frame_stop();\r\n\t            this.count();\r\n\t        }\r\n\t        else {\r\n\t            this._startTime = new Date().getTime();\r\n\t            this._finalTimerCounter = duration * 16.7;\r\n\t            this._timer = setTimeout(function () { return _this.conclude(); }, this._finalTimerCounter);\r\n\t            if (FrameTimerPool_1.FrameTimerPool.paused) {\r\n\t                this.pause();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FrameTimer.prototype.stop = function () {\r\n\t        if (this._playing) {\r\n\t            FrameTimerPool_1.FrameTimerPool.remove(this._uid);\r\n\t        }\r\n\t        this._playing = false;\r\n\t        if (this._useFrames) {\r\n\t            this.frame_stop();\r\n\t        }\r\n\t        else {\r\n\t            if (this._timer != null) {\r\n\t                clearTimeout(this._timer);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FrameTimer.prototype.conclude = function () {\r\n\t        clearTimeout(this._timer);\r\n\t        FrameTimerPool_1.FrameTimerPool.remove(this._uid);\r\n\t        this._playing = false;\r\n\t        this.super2.emit(exports.FrameTimerEvents.Complete);\r\n\t    };\r\n\t    FrameTimer.prototype.pause = function () {\r\n\t        if (!this._playing || this._paused) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._useFrames) {\r\n\t            this.frame_stop();\r\n\t        }\r\n\t        else {\r\n\t            clearTimeout(this._timer);\r\n\t            var currentTime = new Date().getTime();\r\n\t            this._finalTimerCounter -= currentTime - this._startTime;\r\n\t        }\r\n\t        this._paused = true;\r\n\t    };\r\n\t    FrameTimer.prototype.isPlaying = function () {\r\n\t        return this._playing;\r\n\t    };\r\n\t    FrameTimer.prototype.unpause = function () {\r\n\t        var _this = this;\r\n\t        if (!this._playing || !this._paused) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._useFrames) {\r\n\t            this.count();\r\n\t        }\r\n\t        else {\r\n\t            this._startTime = new Date().getTime();\r\n\t            window.clearTimeout(this._timer);\r\n\t            this._timer = setTimeout(function () { return _this.conclude(); }, this._finalTimerCounter);\r\n\t        }\r\n\t        this._paused = false;\r\n\t    };\r\n\t    FrameTimer.prototype.count = function () {\r\n\t        this.frame_start();\r\n\t    };\r\n\t    FrameTimer.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"FrameTimer\", s);\r\n\t        }\r\n\t    };\r\n\t    return FrameTimer;\r\n\t}(AnimationFrame_1.AnimationFrameEventEmitter));\r\n\texports.FrameTimer = FrameTimer;\r\n\texports.CreateFrameTimer = function (timerName) {\r\n\t    return new FrameTimer(timerName);\r\n\t};\r\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Types_1 = __webpack_require__(11);\r\n\tvar Pool_1 = __webpack_require__(7);\r\n\tfunction AnimationFrameClass(Superclass) {\r\n\t    var sc = (Superclass || Object);\r\n\t    return (function (_super) {\r\n\t        __extends(AnimationFrame, _super);\r\n\t        function AnimationFrame() {\r\n\t            _super.call(this);\r\n\t            this._frame_stopped = true;\r\n\t            this._frame_starting = null;\r\n\t            this._frame_stopping = null;\r\n\t            this._frame_uid = null;\r\n\t            this.frame_draw = this.frame_draw.bind(this);\r\n\t        }\r\n\t        AnimationFrame.prototype.frame_onFrame = function () {\r\n\t            throw new Error(\"method \\\"frame_onFrame\\\" is not implemented!\");\r\n\t        };\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"frame_name\", {\r\n\t            get: function () {\r\n\t                throw new Error(\"property \\\"frame_name\\\" is not implemented!\");\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"isFrameStopped\", {\r\n\t            get: function () {\r\n\t                return this._frame_stopped;\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"frame_uid\", {\r\n\t            get: function () {\r\n\t                if (this._frame_uid === null) {\r\n\t                    this._frame_uid = this.frame_name + neo_common_1.Utils.generateUuid();\r\n\t                }\r\n\t                return this._frame_uid;\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        AnimationFrame.prototype.frame_draw = function () {\r\n\t            if (this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            this.frame_onFrame();\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_log = function (msg, isError) {\r\n\t            isError = neo_common_1.Utils.valueOrDefault(isError, false);\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"AnimationFrame\", (\"[\" + this.frame_name + \"-AnimationFrame] \") + msg);\r\n\t            }\r\n\t            if (isError) {\r\n\t                neo_common_1.Logger.errorGroup(\"AnimationFrame\", (\"[\" + this.frame_name + \"-AnimationFrame] \") + msg);\r\n\t            }\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_start = function () {\r\n\t            if (!this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            if (this._frame_starting) {\r\n\t                return;\r\n\t            }\r\n\t            this._frame_starting = true;\r\n\t            try {\r\n\t                if (Pool_1.AnimationFramePool.registerFrame(this)) {\r\n\t                    this._frame_stopped = false;\r\n\t                }\r\n\t                else {\r\n\t                    this.frame_log(\"failed to start (already registered in stage pool!)\", true);\r\n\t                }\r\n\t            }\r\n\t            finally {\r\n\t                this._frame_starting = null;\r\n\t            }\r\n\t            this.frame_draw();\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_stop = function () {\r\n\t            if (this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            if (this._frame_stopping) {\r\n\t                return;\r\n\t            }\r\n\t            this._frame_stopping = true;\r\n\t            try {\r\n\t                if (Pool_1.AnimationFramePool.unregisterFrame(this)) {\r\n\t                    this._frame_stopped = true;\r\n\t                }\r\n\t                else {\r\n\t                    this.frame_log(\"failed to stop (not registered in stage pool!)\", true);\r\n\t                }\r\n\t            }\r\n\t            finally {\r\n\t                this._frame_stopping = null;\r\n\t            }\r\n\t        };\r\n\t        return AnimationFrame;\r\n\t    }(sc));\r\n\t}\r\n\texports.AnimationFrameClass = AnimationFrameClass;\r\n\tvar AnimationFrameEventEmitter = (function (_super) {\r\n\t    __extends(AnimationFrameEventEmitter, _super);\r\n\t    function AnimationFrameEventEmitter() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(AnimationFrameEventEmitter.prototype, \"super2\", {\r\n\t        get: function () {\r\n\t            return this;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AnimationFrameEventEmitter;\r\n\t}(AnimationFrameClass(Types_1.EventEmmiterClass())));\r\n\texports.AnimationFrameEventEmitter = AnimationFrameEventEmitter;\r\n\tvar AnimationFrameBaseElement = (function (_super) {\r\n\t    __extends(AnimationFrameBaseElement, _super);\r\n\t    function AnimationFrameBaseElement() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(AnimationFrameBaseElement.prototype, \"super2\", {\r\n\t        get: function () {\r\n\t            return this;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AnimationFrameBaseElement;\r\n\t}(AnimationFrameClass(Types_1.BaseElementClass())));\r\n\texports.AnimationFrameBaseElement = AnimationFrameBaseElement;\r\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tfunction EventEmmiterClass() {\r\n\t    return (function (_super) {\r\n\t        __extends(EventEmmiterDescendant, _super);\r\n\t        function EventEmmiterDescendant() {\r\n\t            _super.apply(this, arguments);\r\n\t        }\r\n\t        return EventEmmiterDescendant;\r\n\t    }(PIXI.utils.EventEmitter));\r\n\t}\r\n\texports.EventEmmiterClass = EventEmmiterClass;\r\n\tfunction BaseElementClass() {\r\n\t    return (function (_super) {\r\n\t        __extends(BaseElementDescendant, _super);\r\n\t        function BaseElementDescendant() {\r\n\t            _super.apply(this, arguments);\r\n\t        }\r\n\t        return BaseElementDescendant;\r\n\t    }(BaseElement_1.BaseElement));\r\n\t}\r\n\texports.BaseElementClass = BaseElementClass;\r\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ShapeElement_1 = __webpack_require__(13);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar BaseElement = (function (_super) {\r\n\t    __extends(BaseElement, _super);\r\n\t    function BaseElement() {\r\n\t        _super.call(this);\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    BaseElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(BaseElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        set: function (engine) {\r\n\t            this._tweenEngine = engine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = BaseElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    BaseElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    BaseElement.prototype.clone = function () {\r\n\t        throw new Error(\"Not implemented\");\r\n\t    };\r\n\t    BaseElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    BaseElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    BaseElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    BaseElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    BaseElement.prototype.createByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.BaseElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.ALPHA, this.alpha);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.BaseElementAttributes.START_ROTATION) === exports.BaseElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.scale.x = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.SCALE_X, this.scale.x);\r\n\t        this.scale.y = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.SCALE_Y, this.scale.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.Y, this.position.y);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.VISIBLE, this.visible);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.MASK)) {\r\n\t            this.maskGraphics = new ShapeElement_1.ShapeElement();\r\n\t            var shapeNode = document.createElement(node.getAttribute(exports.BaseElementAttributes.MASK));\r\n\t            shapeNode.setAttribute(\"FillAlpha\", \"1\");\r\n\t            shapeNode.setAttribute(\"Color\", \"FF0000\");\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_DRAW)) {\r\n\t                shapeNode.setAttribute(\"Draw\", node.getAttribute(exports.BaseElementAttributes.MASK_DRAW));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_X)) {\r\n\t                shapeNode.setAttribute(\"X\", node.getAttribute(exports.BaseElementAttributes.MASK_X));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_Y)) {\r\n\t                shapeNode.setAttribute(\"Y\", node.getAttribute(exports.BaseElementAttributes.MASK_Y));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_WIDTH)) {\r\n\t                shapeNode.setAttribute(\"Width\", node.getAttribute(exports.BaseElementAttributes.MASK_WIDTH));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_HEIGHT)) {\r\n\t                shapeNode.setAttribute(\"Height\", node.getAttribute(exports.BaseElementAttributes.MASK_HEIGHT));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.MASK_PATH)) {\r\n\t                shapeNode.setAttribute(\"Path\", node.getAttribute(exports.BaseElementAttributes.MASK_PATH));\r\n\t            }\r\n\t            this.maskGraphics.create(shapeNode);\r\n\t            this.mask = this.maskGraphics;\r\n\t            this.addChild(this.mask);\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.BaseElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\r\n\t                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\r\n\t                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\r\n\t                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\r\n\t                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.TWEEN_ENGINE)) {\r\n\t            this._tweenEngine = node.getAttribute(exports.BaseElementAttributes.TWEEN_ENGINE);\r\n\t        }\r\n\t        if (this.maskGraphics != null) {\r\n\t            if (node.hasAttribute(\"MaskScaleX\")) {\r\n\t                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskScaleY\")) {\r\n\t                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskX\")) {\r\n\t                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskY\")) {\r\n\t                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.BaseElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node.hasAttribute(\"RemoveTweens\") ||\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false) {\r\n\t            Tweens_1.Tweens.removeTweens(this);\r\n\t        }\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.VISIBLE, this.visible);\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.ALPHA, this.alpha);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.BaseElementAttributes.START_ROTATION) === exports.BaseElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.Y, this.position.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t        }\r\n\t        this.runAlphaTween(node);\r\n\t        this.runPositionTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runTween(node);\r\n\t    };\r\n\t    BaseElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == exports.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == exports.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    BaseElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == exports.BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    BaseElement.prototype.runRotationTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN));\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    BaseElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = BaseElement._getPointsFromPointsAttribute(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            tweenValues = scaleTween;\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: scaleTweenY[i],\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                return {\r\n\t                    x: scaleXValue,\r\n\t                    y: _this.scale.y,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                return {\r\n\t                    x: _this.scale.x,\r\n\t                    y: scaleYValue,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    BaseElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    BaseElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"~\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (property[0] == \"position\") {\r\n\t                        if (property[1] == \"x\") {\r\n\t                            value = this.position.x + (value - this.getGlobalPosition().x);\r\n\t                        }\r\n\t                        else if (property[1] == \"y\") {\r\n\t                            value = this.position.y + (value - this.getGlobalPosition().y);\r\n\t                        }\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    BaseElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    BaseElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    BaseElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    BaseElement.prototype.maskEnabled = function (enable) {\r\n\t        if (enable) {\r\n\t            if (this.maskGraphics) {\r\n\t                this.mask = this.maskGraphics;\r\n\t                this.addChild(this.maskGraphics);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.removeChild(this.maskGraphics);\r\n\t            this.mask = null;\r\n\t        }\r\n\t    };\r\n\t    BaseElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    BaseElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseElement);\r\n\t    return BaseElement;\r\n\t}(PIXI.Container));\r\n\texports.BaseElement = BaseElement;\r\n\texports.BaseElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK: \"Mask\",\r\n\t    MASK_X: \"MaskX\",\r\n\t    MASK_Y: \"MaskY\",\r\n\t    MASK_WIDTH: \"MaskWidth\",\r\n\t    MASK_HEIGHT: \"MaskHeight\",\r\n\t    MASK_PATH: \"MaskPath\",\r\n\t    MASK_DRAW: \"MaskDraw\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar ShapeElement = (function (_super) {\r\n\t    __extends(ShapeElement, _super);\r\n\t    function ShapeElement() {\r\n\t        _super.call(this);\r\n\t        this._color = 0xff0000;\r\n\t        this._draw = \"Rect\";\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t    }\r\n\t    Object.defineProperty(ShapeElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        set: function (engine) {\r\n\t            this._tweenEngine = engine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ShapeElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    ShapeElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    ShapeElement.prototype.createByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ShapeElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ShapeElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        this._nodeDefinition = node;\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.STYLE)) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ShapeElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.ShapeElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._color = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.COLOR, this._color, 16);\r\n\t        this._fillAlpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.ShapeElementAttributes.FILL_ALPHA, this._fillAlpha);\r\n\t        this._lineWidth = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.LINE_WIDTH, this._lineWidth);\r\n\t        this._lineColor = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.LINE_COLOR, this._lineColor, 16);\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.ShapeElementAttributes.X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.ShapeElementAttributes.Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.WIDTH)) {\r\n\t            this._width = parseInt(node.getAttribute(exports.ShapeElementAttributes.WIDTH));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.HEIGHT)) {\r\n\t            this._height = parseInt(node.getAttribute(exports.ShapeElementAttributes.HEIGHT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.RADIUS)) {\r\n\t            this._radius = parseInt(node.getAttribute(exports.ShapeElementAttributes.RADIUS));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.DRAW)) {\r\n\t            this.clear();\r\n\t            this.beginFill(this._color, this._fillAlpha);\r\n\t            this.lineStyle(this._lineWidth, this._lineColor);\r\n\t            this.draw(node, node.getAttribute(exports.ShapeElementAttributes.DRAW));\r\n\t            this.endFill();\r\n\t        }\r\n\t        else {\r\n\t            if (node.hasAttribute(exports.ShapeElementAttributes.WIDTH)) {\r\n\t                this._width = parseInt(node.getAttribute(exports.ShapeElementAttributes.WIDTH));\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR \" + exports.ShapeElementAttributes.WIDTH + \" attribute doesn't exits\");\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ShapeElementAttributes.HEIGHT)) {\r\n\t                this._height = parseInt(node.getAttribute(exports.ShapeElementAttributes.HEIGHT));\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR \" + exports.ShapeElementAttributes.HEIGHT + \" attribute doesn't exits\");\r\n\t                }\r\n\t            }\r\n\t            if (this._width != null && this._height != null) {\r\n\t                this.clear();\r\n\t                this.beginFill(this._color, this._fillAlpha);\r\n\t                this.lineStyle(this._lineWidth, this._lineColor);\r\n\t                this.drawRect(0, 0, this._width, this._height);\r\n\t                this.endFill();\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.VISIBLE)) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ShapeElementAttributes.VISIBLE));\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.draw = function (node, objectType) {\r\n\t        this._draw = objectType;\r\n\t        switch (objectType) {\r\n\t            case \"Circle\":\r\n\t                this.drawCircle(0, 0, this._radius);\r\n\t                break;\r\n\t            case \"Ellipse\":\r\n\t                this.drawEllipse(0, 0, this._width, this._height);\r\n\t                break;\r\n\t            case \"Polygon\":\r\n\t                var path = node.hasAttribute(\"Path\") ? neo_common_1.ArrayUtils.stringArray(node.getAttribute(\"Path\"), \"|\") : [];\r\n\t                var points = [];\r\n\t                for (var i = 0; i < path.length; i++) {\r\n\t                    var point = neo_common_1.ArrayUtils.numberArray(path[i]);\r\n\t                    points.push(new PIXI.Point(point[0], point[1]));\r\n\t                }\r\n\t                this.drawPolygon(points);\r\n\t                break;\r\n\t            case \"Rect\":\r\n\t                this.drawRect(0, 0, this._width, this._height);\r\n\t                break;\r\n\t            case \"RoundedRect\":\r\n\t                var multiple = node.hasAttribute(\"Path\")\r\n\t                    ? neo_common_1.ArrayUtils.arraysNumbers(node.getAttribute(\"Path\"), \"|\")\r\n\t                    : [];\r\n\t                if (multiple.length == 0) {\r\n\t                    this.drawRoundedRect(0, 0, this._width, this._height, this._radius);\r\n\t                }\r\n\t                else {\r\n\t                    for (var i = 0; i < multiple.length; i++) {\r\n\t                        this.drawRoundedRect(multiple[i][0], multiple[i][1], this._width, this._height, this._radius);\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR objectType: \" + objectType + \" not supported.\");\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.updateByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ShapeElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ShapeElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.VISIBLE)) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ShapeElementAttributes.VISIBLE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(exports.ShapeElementAttributes.ALPHA));\r\n\t        }\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.ShapeElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.ShapeElementAttributes.X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.ShapeElementAttributes.Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.ShapeElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.ShapeElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.runAlphaTween(node);\r\n\t        this.runPositionTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runTween(node);\r\n\t    };\r\n\t    ShapeElement.prototype.runAlphaTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.ShapeElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.ALPHA_TWEEN));\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ShapeElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ShapeElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ShapeElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ShapeElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == exports.ShapeElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ShapeElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ShapeElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ShapeElement.prototype.runRotationTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.ShapeElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.ROTATION_TWEEN));\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ShapeElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ShapeElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ShapeElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ShapeElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = ShapeElement._getPointsFromPointsAttribute(node.getAttribute(exports.ShapeElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            tweenValues = scaleTween;\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: scaleTweenY[i],\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                return {\r\n\t                    x: scaleXValue,\r\n\t                    y: _this.scale.y,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                return {\r\n\t                    x: _this.scale.x,\r\n\t                    y: scaleYValue,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ShapeElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ShapeElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ShapeElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ShapeElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ShapeElement.prototype.clone = function () {\r\n\t        var element = new ShapeElement();\r\n\t        element.create(this._nodeDefinition);\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._color = this._color;\r\n\t        element._fillAlpha = this._fillAlpha;\r\n\t        element._draw = this._draw;\r\n\t        if (this._draw === \"Rect\") {\r\n\t            element.clear();\r\n\t            element.beginFill(this._color, this._fillAlpha);\r\n\t            element.drawRect(0, 0, this._width, this._height);\r\n\t            element.endFill();\r\n\t        }\r\n\t        return element;\r\n\t    };\r\n\t    ShapeElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    ShapeElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    Object.defineProperty(ShapeElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ShapeElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ShapeElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    ShapeElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    ShapeElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ShapeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ShapeElement);\r\n\t    return ShapeElement;\r\n\t}(PIXI.Graphics));\r\n\texports.ShapeElement = ShapeElement;\r\n\texports.ShapeElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    COLOR: \"Color\",\r\n\t    DRAW: \"Draw\",\r\n\t    DEBUG: \"Debug\",\r\n\t    FILL_ALPHA: \"FillAlpha\",\r\n\t    HEIGHT: \"Height\",\r\n\t    LINE_COLOR: \"LineColor\",\r\n\t    LINE_WIDTH: \"LineWidth\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    RADIUS: \"Radius\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    STYLE: \"Style\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    WIDTH: \"Width\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\texports.ComponentTypes = {\r\n\t    Element: \"Element\",\r\n\t    DisplayObject: \"DisplayObject\",\r\n\t    HtmlElement: \"HtmlElement\",\r\n\t    PlayList: \"PlayList\",\r\n\t    Song: \"Song\",\r\n\t    Style: \"Style\",\r\n\t    HtmlStyle: \"HtmlStyle\",\r\n\t    Controller: \"Controller\",\r\n\t    LinkedElement: \"LinkedElement\",\r\n\t    ActionSet: \"ActionSet\",\r\n\t};\r\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar GsapEffects_1 = __webpack_require__(16);\r\n\tvar Tweens = (function () {\r\n\t    function Tweens() {\r\n\t    }\r\n\t    Tweens.registerTween = function (uid, tween) {\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                Tweens.tweenArray[uid].push(tween);\r\n\t            }\r\n\t            else {\r\n\t                Tweens.tweenArray[uid] = [tween];\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.getRegisteredTweens = function (uid) {\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                return {\r\n\t                    tweens: Tweens.tweenArray[uid],\r\n\t                    length: Tweens.tweenArray[uid].length,\r\n\t                };\r\n\t            }\r\n\t            return null;\r\n\t        }\r\n\t        else {\r\n\t            return {\r\n\t                tweens: Tweens.tweenArray,\r\n\t                length: Object.keys(Tweens.tweenArray).length,\r\n\t            };\r\n\t        }\r\n\t    };\r\n\t    Tweens.removeTweenFromRegistry = function (uid, property) {\r\n\t        if (property === void 0) { property = \"all\"; }\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                for (var i = Tweens.tweenArray[uid].length - 1; i >= 0; i--) {\r\n\t                    var tween = Tweens.tweenArray[uid][i];\r\n\t                    if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === property + \"Tween\" &&\r\n\t                        property !== \"alpha\" &&\r\n\t                        property !== \"position\" &&\r\n\t                        property !== \"scale\" &&\r\n\t                        property !== \"rotation\") {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.restartTweens = function (uid) {\r\n\t        if (Tweens.tweenArray[uid] != null) {\r\n\t            for (var i = 0; i < Tweens.tweenArray[uid].length; i++) {\r\n\t                Tweens.tweenArray[uid][i].restart();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.removeTweens = function (object, property) {\r\n\t        if (property === void 0) { property = \"all\"; }\r\n\t        if (object !== undefined) {\r\n\t            if (object.uid != null) {\r\n\t                if (Tweens.tweenArray[object.uid] != null) {\r\n\t                    if (Tweens.tweenArray[object.uid].length > 0) {\r\n\t                        for (var i = Tweens.tweenArray[object.uid].length - 1; i >= 0; i--) {\r\n\t                            var tween = Tweens.tweenArray[object.uid][i];\r\n\t                            if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n\t                                tween.kill({ alpha: true }, object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            else if (tween.name === \"positionTween\" &&\r\n\t                                (property === \"position\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.position);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            else if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.scale);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            else if (tween.name === \"rotationTween\" &&\r\n\t                                (property === \"rotation\" || property === \"all\")) {\r\n\t                                tween.kill({ rotation: true }, object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            else if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.skew);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            else if (tween.name === property + \"Tween\" || property === \"all\") {\r\n\t                                var customProperty = property;\r\n\t                                if (property == \"all\" &&\r\n\t                                    Tweens.RemoveAllTweensExclude.indexOf(tween.name.slice(0, -5)) > -1) {\r\n\t                                    continue;\r\n\t                                }\r\n\t                                if (customProperty == \"all\") {\r\n\t                                    customProperty = tween.name.replace(\"Tween\", \"\");\r\n\t                                }\r\n\t                                tween.kill((_a = {}, _a[customProperty] = true, _a), object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var _a;\r\n\t    };\r\n\t    Tweens.alphaTween = function (object, options) {\r\n\t        if (options.alphas.length < 2) {\r\n\t            return;\r\n\t        }\r\n\t        object.alpha = options.alphas.shift();\r\n\t        var tween;\r\n\t        if (options.alphas.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.alphaTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.alphas.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.alphaTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"alphaTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.positionTween = function (object, options) {\r\n\t        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (options.tweenX.length !== options.tweenY.length) {\r\n\t            if (options.tweenX.length > options.tweenY.length) {\r\n\t                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(function (value) { return object.position.y || 0; });\r\n\t            }\r\n\t            else {\r\n\t                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(function (value) { return object.position.x || 0; });\r\n\t            }\r\n\t        }\r\n\t        object.position.x = options.tweenX.shift();\r\n\t        object.position.y = options.tweenY.shift();\r\n\t        var tween;\r\n\t        if (options.tweenX.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.positionTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenX.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.positionTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"positionTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.rotationTween = function (object, options) {\r\n\t        if (options.degrees.length < 2) {\r\n\t            return;\r\n\t        }\r\n\t        object.rotation = Tweens.degrees2radians(options.degrees.shift());\r\n\t        var tween;\r\n\t        if (options.degrees.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.rotationTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.degrees.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.rotationTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"rotationTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.scaleTween = function (object, options) {\r\n\t        if (options.tweenValues.length < 2) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR No ScaleTweenX or ScaleTweenY or ScaleTween option for \" +\r\n\t                    (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        object.scale.x = options.tweenValues[0].x;\r\n\t        object.scale.y = options.tweenValues[0].y;\r\n\t        options.tweenValues.shift();\r\n\t        var tween;\r\n\t        if (options.tweenValues.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.scaleTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenValues.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.scaleTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"scaleTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.customTween = function (object, options) {\r\n\t        var property = options.tween.split(\".\");\r\n\t        options = Tweens.prepareTweenData(options);\r\n\t        if (property.length == 1) {\r\n\t            object[property[0]] = options.tweenValues.shift();\r\n\t        }\r\n\t        else if (property.length == 2) {\r\n\t            object[property[0]][property[1]] = options.tweenValues.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenValues.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.tween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenValues.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.tween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = property[0] + \"Tween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.prepareTweenData = function (data) {\r\n\t        var length = data.tweenValues.length - 1;\r\n\t        data.tweenEase = Tweens.stringValueToFormatedArray(length, data.tweenEase, \"linear\");\r\n\t        data.tweenDelay = Tweens.numberValueToFormatedArray(length, data.tweenDelay, 0);\r\n\t        data.tweenDelay = data.tweenDelay.map(function (x) {\r\n\t            return x * GsapEffects_1.GsapEffects.TickTime;\r\n\t        });\r\n\t        if (data.tweenDuration != null) {\r\n\t            if (data.tweenDuration.length == 1) {\r\n\t                var partDuration = data.tweenDuration[0] / length;\r\n\t                data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, partDuration);\r\n\t            }\r\n\t            else {\r\n\t                data.tweenDuration = Tweens.numberValueToFormatedArray(length, data.tweenDuration, 30);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var defaultValue = Math.floor(Math.random() * 120 + 120);\r\n\t            data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, defaultValue);\r\n\t        }\r\n\t        data.tweenDuration = data.tweenDuration.map(function (x) {\r\n\t            return x * GsapEffects_1.GsapEffects.TickTime;\r\n\t        });\r\n\t        if (data.tween == \"rotation\") {\r\n\t            data.tweenValues = data.tweenValues.map(function (x) {\r\n\t                return Tweens.degrees2radians(x);\r\n\t            });\r\n\t        }\r\n\t        return data;\r\n\t    };\r\n\t    Tweens.stringValueToFormatedArray = function (length, data, defaultValue) {\r\n\t        if (data != null) {\r\n\t            if (Array.isArray(data)) {\r\n\t                if (data.length == length) {\r\n\t                    return data;\r\n\t                }\r\n\t                if (data.length < length) {\r\n\t                    for (var i = data.length; i < length; i++) {\r\n\t                        data.push(defaultValue);\r\n\t                    }\r\n\t                    return data;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                return Array.apply(null, Array(length)).map(function (value) { return data; });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return Array.apply(null, Array(length)).map(function (value) { return defaultValue; });\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Tweens.numberValueToFormatedArray = function (length, data, defaultValue) {\r\n\t        if (data != null) {\r\n\t            if (Array.isArray(data)) {\r\n\t                if (data.length == length) {\r\n\t                    return data;\r\n\t                }\r\n\t                if (data.length < length) {\r\n\t                    for (var i = data.length; i < length; i++) {\r\n\t                        data.push(defaultValue);\r\n\t                    }\r\n\t                    return data;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                return Array.apply(null, Array(length)).map(function (value) { return data; });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return Array.apply(null, Array(length)).map(function (value) { return defaultValue; });\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Tweens.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    Object.defineProperty(Tweens, \"componentName\", {\r\n\t        get: function () {\r\n\t            return \"Tweens\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Tweens.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = Tweens.componentName;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Tweens.RemoveAllTweensExclude = [\"currentValue\", \"_frame\"];\r\n\t    Tweens.tweenArray = [];\r\n\t    return Tweens;\r\n\t}());\r\n\texports.Tweens = Tweens;\r\n\texports.TweensAttributes = {\r\n\t    TWEEN: \"Tween\",\r\n\t    TWEEN_VALUES: \"TweenValues\",\r\n\t    TWEEN_EASE: \"TweenEase\",\r\n\t    TWEEN_DURATION: \"TweenDuration\",\r\n\t    TWEEN_DELAY: \"TweenDelay\",\r\n\t    TWEEN_LOOP: \"TweenLoop\",\r\n\t};\r\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar CustomEase_1 = __webpack_require__(19);\r\n\tvar GsapEffects = (function () {\r\n\t    function GsapEffects() {\r\n\t    }\r\n\t    GsapEffects.prototype.internalDestroy = function (options) { };\r\n\t    GsapEffects.alphaTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var alphaTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.alphas.forEach(function (alpha) {\r\n\t            alphaTimeline.to(object, tweenDurationPerPart, {\r\n\t                alpha: alpha,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            alphaTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            alphaTimeline.eventCallback(\"onComplete\", alphaTimeline.restart);\r\n\t        }\r\n\t        return alphaTimeline;\r\n\t    };\r\n\t    GsapEffects.alphaTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var alphaTweenLite;\r\n\t        alphaTweenLite = gsap_1.TweenLite.to(object, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            alpha: options.alphas,\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            alphaTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            alphaTweenLite.eventCallback(\"onComplete\", alphaTweenLite.restart);\r\n\t        }\r\n\t        return alphaTweenLite;\r\n\t    };\r\n\t    GsapEffects.positionTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var positionTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t        });\r\n\t        options.tweenX.forEach(function (tweenX, i) {\r\n\t            positionTimeline.to(object.position, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                x: tweenX,\r\n\t                y: options.tweenY[i],\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            positionTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            positionTimeline.eventCallback(\"onComplete\", positionTimeline.restart);\r\n\t        }\r\n\t        return positionTimeline;\r\n\t    };\r\n\t    GsapEffects.positionTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenBezier = options.bezier;\r\n\t        var tweenPaused = options.paused;\r\n\t        var positionTweenLite;\r\n\t        if (tweenBezier != null) {\r\n\t            positionTweenLite = gsap_1.TweenLite.to(object.position, tweenDurationPerPart, {\r\n\t                bezier: tweenBezier || 0,\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            positionTweenLite = gsap_1.TweenLite.to(object.position, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                x: options.tweenX[0],\r\n\t                y: options.tweenY[0],\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        }\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            positionTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            positionTweenLite.eventCallback(\"onComplete\", positionTweenLite.restart);\r\n\t        }\r\n\t        return positionTweenLite;\r\n\t    };\r\n\t    GsapEffects.rotationTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var rotationTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.degrees.map(GsapEffects.degrees2radians).forEach(function (degree) {\r\n\t            rotationTimeline.to(object, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                rotation: degree,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            rotationTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            rotationTimeline.eventCallback(\"onComplete\", rotationTimeline.restart);\r\n\t        }\r\n\t        return rotationTimeline;\r\n\t    };\r\n\t    GsapEffects.rotationTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var rotationTweenLite;\r\n\t        rotationTweenLite = gsap_1.TweenLite.to(object, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            rotation: GsapEffects.degrees2radians(options.degrees[0]),\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            rotationTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            rotationTweenLite.eventCallback(\"onComplete\", rotationTweenLite.restart);\r\n\t        }\r\n\t        return rotationTweenLite;\r\n\t    };\r\n\t    GsapEffects.scaleTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var scaleTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.tweenValues.forEach(function (tweenValue) {\r\n\t            scaleTimeline.to(object.scale, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                x: tweenValue.x,\r\n\t                y: tweenValue.y,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            scaleTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            scaleTimeline.eventCallback(\"onComplete\", scaleTimeline.restart);\r\n\t        }\r\n\t        return scaleTimeline;\r\n\t    };\r\n\t    GsapEffects.scaleTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var scaleTweenLite;\r\n\t        scaleTweenLite = gsap_1.TweenLite.to(object.scale, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            x: options.tweenValues[0].x,\r\n\t            y: options.tweenValues[0].y,\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            scaleTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            scaleTweenLite.eventCallback(\"onComplete\", scaleTweenLite.restart);\r\n\t        }\r\n\t        return scaleTweenLite;\r\n\t    };\r\n\t    GsapEffects.tween_TimelineLite = function (object, options) {\r\n\t        var tween = options.tween.split(\".\");\r\n\t        var tweenProperty = tween[tween.length - 1];\r\n\t        var tweenPaused = options.paused;\r\n\t        var timeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay[0],\r\n\t        });\r\n\t        options.tweenValues.forEach(function (value, i) {\r\n\t            timeline.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[i], (_a = {\r\n\t                    useFrames: GsapEffects.UseFrames\r\n\t                },\r\n\t                _a[tweenProperty] = value,\r\n\t                _a.ease = GsapEffects.getEaseing(options.tweenEase[i]) || \"Linear.easeNone\",\r\n\t                _a.paused = tweenPaused || false,\r\n\t                _a\r\n\t            ));\r\n\t            var _a;\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            timeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            timeline.eventCallback(\"onComplete\", timeline.restart);\r\n\t        }\r\n\t        return timeline;\r\n\t    };\r\n\t    GsapEffects.tween_Tweenlite = function (object, options) {\r\n\t        var tween = options.tween.split(\".\");\r\n\t        var tweenProperty = tween[tween.length - 1];\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenlite;\r\n\t        tweenlite = gsap_1.TweenLite.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[0], (_a = {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay[0]\r\n\t            },\r\n\t            _a[tweenProperty] = options.tweenValues[0],\r\n\t            _a.ease = GsapEffects.getEaseing(options.tweenEase[0]) || \"Linear.easeNone\",\r\n\t            _a.paused = tweenPaused || false,\r\n\t            _a\r\n\t        ));\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            tweenlite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\r\n\t        }\r\n\t        return tweenlite;\r\n\t        var _a;\r\n\t    };\r\n\t    GsapEffects.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    GsapEffects.getEaseing = function (ease) {\r\n\t        switch (\"\" + ease) {\r\n\t            case \"0\":\r\n\t            case \"linear\":\r\n\t                return \"Linear.easeNone\";\r\n\t            case \"1\":\r\n\t            case \"backIn\":\r\n\t                return \"Back.easeIn\";\r\n\t            case \"2\":\r\n\t            case \"backInOut\":\r\n\t                return \"Back.easeInOut\";\r\n\t            case \"3\":\r\n\t            case \"backOut\":\r\n\t                return \"Back.easeOut\";\r\n\t            case \"4\":\r\n\t            case \"bounceIn\":\r\n\t                return \"Bounce.easeIn\";\r\n\t            case \"5\":\r\n\t            case \"bounceInOut\":\r\n\t                return \"Bounce.easeInOut\";\r\n\t            case \"6\":\r\n\t            case \"bounceOut\":\r\n\t                return \"Bounce.easeOut\";\r\n\t            case \"7\":\r\n\t            case \"circIn\":\r\n\t                return \"Circ.easeIn\";\r\n\t            case \"8\":\r\n\t            case \"circInOut\":\r\n\t                return \"Circ.easeInOut\";\r\n\t            case \"9\":\r\n\t            case \"circOut\":\r\n\t                return \"Circ.easeOut\";\r\n\t            case \"10\":\r\n\t            case \"cubicIn\":\r\n\t                return \"Cubic.easeIn\";\r\n\t            case \"11\":\r\n\t            case \"cubicInOut\":\r\n\t                return \"Cubic.easeInOut\";\r\n\t            case \"12\":\r\n\t            case \"cubicOut\":\r\n\t                return \"Cubic.easeOut\";\r\n\t            case \"13\":\r\n\t            case \"elasticIn\":\r\n\t                return \"Elastic.easeIn\";\r\n\t            case \"14\":\r\n\t            case \"elasticInOut\":\r\n\t                return \"Elastic.easeInOut\";\r\n\t            case \"15\":\r\n\t            case \"elasticOut\":\r\n\t                return \"Elastic.easeOut\";\r\n\t            case \"16\":\r\n\t            case \"quadIn\":\r\n\t                return \"Quad.easeIn\";\r\n\t            case \"17\":\r\n\t            case \"quadInOut\":\r\n\t                return \"Quad.easeInOut\";\r\n\t            case \"18\":\r\n\t            case \"quadOut\":\r\n\t                return \"Quad.easeOut\";\r\n\t            case \"19\":\r\n\t            case \"quartIn\":\r\n\t                return \"Quart.easeIn\";\r\n\t            case \"20\":\r\n\t            case \"quartInOut\":\r\n\t                return \"Quart.easeInOut\";\r\n\t            case \"21\":\r\n\t            case \"quartOut\":\r\n\t                return \"Quart.easeOut\";\r\n\t            case \"22\":\r\n\t            case \"quintIn\":\r\n\t                return \"Quint.easeIn\";\r\n\t            case \"23\":\r\n\t            case \"quintInOut\":\r\n\t                return \"Quint.easeInOut\";\r\n\t            case \"24\":\r\n\t            case \"quintOut\":\r\n\t                return \"Quint.easeOut\";\r\n\t            case \"25\":\r\n\t            case \"sineIn\":\r\n\t                return \"Sine.easeIn\";\r\n\t            case \"26\":\r\n\t            case \"sineInOut\":\r\n\t                return \"Sine.easeInOut\";\r\n\t            case \"27\":\r\n\t            case \"sineOut\":\r\n\t                return \"Sine.easeOut\";\r\n\t            case \"power1In\":\r\n\t                return \"Power1.easeIn\";\r\n\t            case \"power2In\":\r\n\t                return \"Power2.easeIn\";\r\n\t            case \"power3In\":\r\n\t                return \"Power3.easeIn\";\r\n\t            case \"power4In\":\r\n\t                return \"Power4.easeIn\";\r\n\t            case \"explodeSlowMo\":\r\n\t                return new gsap_1.SlowMo().config(0.8, 0.8, false);\r\n\t            case \"custom_shake\":\r\n\t                return new gsap_1.RoughEase({\r\n\t                    strength: 8,\r\n\t                    points: 10,\r\n\t                    template: gsap_1.Bounce.easeIn,\r\n\t                    taper: \"out\",\r\n\t                    randomize: true,\r\n\t                    clamp: false,\r\n\t                });\r\n\t            default:\r\n\t                return CustomEase_1.CustomEase.get(ease) != null ? ease : \"Linear.easeNone\";\r\n\t        }\r\n\t    };\r\n\t    GsapEffects.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__ || \"GsapEffects\";\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    GsapEffects.UseFrames = false;\r\n\t    GsapEffects.TickTime = 0.0167;\r\n\t    return GsapEffects;\r\n\t}());\r\n\texports.GsapEffects = GsapEffects;\r\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {/*!\n\t * VERSION: 1.19.0\n\t * DATE: 2016-07-14\n\t * UPDATES AND DOCS AT: http://greensock.com\n\t * \n\t * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin\n\t *\n\t * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n\t * This work is subject to the terms at http://greensock.com/standard-license or for\n\t * Club GreenSock members, the software agreement that was issued with your membership.\n\t * \n\t * @author: Jack Doyle, jack@greensock.com\n\t **/\n\tvar _gsScope = (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window; //helps ensure compatibility with AMD/RequireJS and CommonJS/Node\n\t(_gsScope._gsQueue || (_gsScope._gsQueue = [])).push( function() {\n\t\n\t\t\"use strict\";\n\t\n\t\t_gsScope._gsDefine(\"TweenMax\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\t\n\t\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\t\tp, val;\n\t\t\t\t\tfor (p in alt) {\n\t\t\t\t\t\tval = alt[p];\n\t\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i]) : val[i % val.length];\n\t\t\t\t\t}\n\t\t\t\t\tdelete vars.cycle;\n\t\t\t\t},\n\t\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\t\tthis._cycle = 0;\n\t\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\t\tthis._dirty = true; //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t\t_blankArray = [];\n\t\n\t\t\tTweenMax.version = \"1.19.0\";\n\t\t\tp.constructor = TweenMax;\n\t\t\tp.kill()._gc = false;\n\t\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\t\tTweenMax.ticker = TweenLite.ticker;\n\t\t\tTweenMax.render = TweenLite.render;\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._uncache(true);\n\t\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t\t};\n\t\t\t\n\t\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\t\tvar curRatio = this.ratio,\n\t\t\t\t\timmediate = this.vars.immediateRender || vars.immediateRender,\n\t\t\t\t\tp;\n\t\t\t\tif (resetDuration && this._startTime < this._timeline._time) {\n\t\t\t\t\tthis._startTime = this._timeline._time;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._timeline.insert(this, this._startTime - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tthis.vars[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (this._initted || immediate) {\n\t\t\t\t\tif (resetDuration) {\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\t\tthis.render(0, true, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._notifyPluginsOfEnabled && this._firstPT) {\n\t\t\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time / this._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards. \n\t\t\t\t\t\t\tvar prevTime = this._totalTime;\n\t\t\t\t\t\t\tthis.render(0, true, false);\n\t\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\t\tthis._init();\n\t\t\t\t\t\t\tif (this._time > 0 || immediate) {\n\t\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\t\tpt = this._firstPT, endValue;\n\t\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\t\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\t\tthis.invalidate();\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevTotalTime = this._totalTime, \n\t\t\t\t\tprevCycle = this._cycle,\n\t\t\t\t\tduration = this._duration,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._reversed) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = this._cycle = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime = this._time = time;\n\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = duration + this._repeatDelay;\n\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\tthis._time = duration - this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time > duration) {\n\t\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._easeType) {\n\t\t\t\t\t\tr = this._time / duration;\n\t\t\t\t\t\ttype = this._easeType;\n\t\t\t\t\t\tpow = this._easePower;\n\t\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\t\tr *= r;\n\t\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t\t} else if (this._time / duration < 0.5) {\n\t\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\tif (prevTime === this._time && !force && prevCycle === this._cycle) {\n\t\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._init();\n\t\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\t\tthis._time = prevTime;\n\t\t\t\t\t\tthis._totalTime = prevTotalTime;\n\t\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\t\tTweenLiteInternals.lazyTweens.push(this);\n\t\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._lazy !== false) {\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\t\tthis._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t\t}\n\t\t\t\tif (prevTotalTime === 0) {\n\t\t\t\t\tif (this._initted === 2 && time > 0) {\n\t\t\t\t\t\t//this.invalidate();\n\t\t\t\t\t\tthis._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t\t}\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.onStart) if (this._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this._onUpdate) {\n\t\t\t\t\tif (time < 0) if (this._startAt && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents) if (this._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._cycle !== prevCycle) if (!suppressEvents) if (!this._gc) if (this.vars.onRepeat) {\n\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\t\t\t\n\t\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\t\treturn new TweenMax(target, duration, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn new TweenMax(target, duration, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tstagger = stagger || 0;\n\t\t\t\tvar delay = 0,\n\t\t\t\t\ta = [],\n\t\t\t\t\tfinalComplete = function() {\n\t\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t\t},\n\t\t\t\t\tcycle = vars.cycle,\n\t\t\t\t\tfromCycle = (vars.startAt && vars.startAt.cycle),\n\t\t\t\t\tl, copy, i, p;\n\t\t\t\tif (!_isArray(targets)) {\n\t\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t\t}\n\t\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttargets = targets || [];\n\t\t\t\tif (stagger < 0) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\ttargets.reverse();\n\t\t\t\t\tstagger *= -1;\n\t\t\t\t}\n\t\t\t\tl = targets.length - 1;\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tcopy = {};\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t\t}\n\t\t\t\t\tif (cycle) {\n\t\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (fromCycle) {\n\t\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t\tcopy.delay = delay + (copy.delay || 0);\n\t\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\t\tcopy.onComplete = finalComplete;\n\t\t\t\t\t}\n\t\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t\t\tdelay += stagger;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\t\t\t\t\n\t\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.set = function(target, vars) {\n\t\t\t\treturn new TweenMax(target, 0, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.isTweening = function(target) {\n\t\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t\t};\n\t\t\t\n\t\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tcnt = 0,\n\t\t\t\t\t\ttween = timeline._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t\treturn a;\n\t\t\t\t}, \n\t\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t\t};\n\t\t\t\n\t\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\t\tif (tweens == null) {\n\t\t\t\t\ttweens = true;\n\t\t\t\t}\n\t\t\t\tif (delayedCalls == null) {\n\t\t\t\t\tdelayedCalls = true;\n\t\t\t\t}\n\t\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\t\tl = a.length,\n\t\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\t\tisDC, tween, i;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = a[i];\n\t\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\t\tif (complete) {\n\t\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\t\tif (parent == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\t\ta, curParent, p, i, l;\n\t\t\t\tif (typeof(parent) === \"string\") {\n\t\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(parent)) {\n\t\t\t\t\tparent = _slice(parent);\n\t\t\t\t}\n\t\t\t\tif (_isArray(parent)) {\n\t\t\t\t\ti = parent.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ta = [];\n\t\t\t\tfor (p in tl) {\n\t\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\t\twhile (curParent) {\n\t\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t\t}\n\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\t\ttweens = (tweens !== false);\n\t\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\t\ttimelines = (timelines !== false);\n\t\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\t\ti = a.length,\n\t\t\t\t\tisDC, tween;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttween = a[i];\n\t\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\t\ttween.paused(pause);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t\t};\n\t\n\t\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\t\tt = TweenLite.ticker.time;\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn tl._timeScale;\n\t\t\t\t}\n\t\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\t\tt = TweenLite.ticker.frame;\n\t\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\t\n\t\t\n\t//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\t\t\t\n\t\t\tp.progress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t\t};\n\t\t\t\n\t\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t\t};\n\t\t\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (value > this._duration) {\n\t\t\t\t\tvalue = this._duration;\n\t\t\t\t}\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t\t}\n\t\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t\t};\n\t\t\t\n\t\t\tp.repeat = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeat;\n\t\t\t\t}\n\t\t\t\tthis._repeat = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\t\t\n\t\t\tp.repeatDelay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeatDelay;\n\t\t\t\t}\n\t\t\t\tthis._repeatDelay = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\t\t\n\t\t\tp.yoyo = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._yoyo;\n\t\t\t\t}\n\t\t\t\tthis._yoyo = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\treturn TweenMax;\n\t\t\t\n\t\t}, true);\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TimelineLite\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"TimelineLite\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\t\n\t\t\tvar TimelineLite = function(vars) {\n\t\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\t\tthis._labels = {};\n\t\t\t\t\tthis.autoRemoveChildren = (this.vars.autoRemoveChildren === true);\n\t\t\t\t\tthis.smoothChildTiming = (this.vars.smoothChildTiming === true);\n\t\t\t\t\tthis._sortChildren = true;\n\t\t\t\t\tthis._onUpdate = this.vars.onUpdate;\n\t\t\t\t\tvar v = this.vars,\n\t\t\t\t\t\tval, p;\n\t\t\t\t\tfor (p in v) {\n\t\t\t\t\t\tval = v[p];\n\t\t\t\t\t\tif (_isArray(val)) if (val.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\t\tv[p] = this._swapSelfInParams(val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\t\tthis.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_copy = function(vars) {\n\t\t\t\t\tvar copy = {}, p;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t\t}\n\t\t\t\t\treturn copy;\n\t\t\t\t},\n\t\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\t\tp, val;\n\t\t\t\t\tfor (p in alt) {\n\t\t\t\t\t\tval = alt[p];\n\t\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val.call(targets[i], i) : val[i % val.length];\n\t\t\t\t\t}\n\t\t\t\t\tdelete vars.cycle;\n\t\t\t\t},\n\t\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\t\n\t\t\tTimelineLite.version = \"1.19.0\";\n\t\t\tp.constructor = TimelineLite;\n\t\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\t\n\t\t\t/* might use later...\n\t\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\t\tfunction localToGlobal(time, animation) {\n\t\t\t\twhile (animation) {\n\t\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\t\tanimation = animation.timeline;\n\t\t\t\t}\n\t\t\t\treturn time;\n\t\t\t}\n\t\n\t\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\t\tfunction globalToLocal(time, animation) {\n\t\t\t\tvar scale = 1;\n\t\t\t\ttime -= localToGlobal(0, animation);\n\t\t\t\twhile (animation) {\n\t\t\t\t\tscale *= animation._timeScale;\n\t\t\t\t\tanimation = animation.timeline;\n\t\t\t\t}\n\t\t\t\treturn time * scale;\n\t\t\t}\n\t\t\t*/\n\t\n\t\t\tp.to = function(target, duration, vars, position) {\n\t\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t\t};\n\t\n\t\t\tp.from = function(target, duration, vars, position) {\n\t\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, vars), position);\n\t\t\t};\n\t\n\t\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t\t};\n\t\n\t\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\t\tcycle = vars.cycle,\n\t\t\t\t\tcopy, i;\n\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\ttargets = targets || [];\n\t\t\t\tif (_isSelector(targets)) { //senses if the targets object is a selector. If it is, we should translate it into an array.\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t\tstagger = stagger || 0;\n\t\t\t\tif (stagger < 0) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\ttargets.reverse();\n\t\t\t\t\tstagger *= -1;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\tcopy = _copy(vars);\n\t\t\t\t\tif (copy.startAt) {\n\t\t\t\t\t\tcopy.startAt = _copy(copy.startAt);\n\t\t\t\t\t\tif (copy.startAt.cycle) {\n\t\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (cycle) {\n\t\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttl.to(targets[i], duration, copy, i * stagger);\n\t\t\t\t}\n\t\t\t\treturn this.add(tl, position);\n\t\t\t};\n\t\n\t\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\treturn this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\n\t\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\n\t\t\tp.call = function(callback, params, scope, position) {\n\t\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t\t};\n\t\n\t\t\tp.set = function(target, vars, position) {\n\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true);\n\t\t\t\tif (vars.immediateRender == null) {\n\t\t\t\t\tvars.immediateRender = (position === this._time && !this._paused);\n\t\t\t\t}\n\t\t\t\treturn this.add( new TweenLite(target, 0, vars), position);\n\t\t\t};\n\t\n\t\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t\t}\n\t\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\t\troot = tl._timeline,\n\t\t\t\t\ttween, next;\n\t\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\t\tignoreDelayedCalls = true;\n\t\t\t\t}\n\t\t\t\troot._remove(tl, true);\n\t\t\t\ttl._startTime = 0;\n\t\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\t\ttween = root._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next;\n\t\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\t\ttl.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t\troot.add(tl, 0);\n\t\t\t\treturn tl;\n\t\t\t};\n\t\n\t\t\tp.add = function(value, position, align, stagger) {\n\t\t\t\tvar curTime, l, i, child, tl, beforeRawTime;\n\t\t\t\tif (typeof(position) !== \"number\") {\n\t\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true, value);\n\t\t\t\t}\n\t\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\t\talign = align || \"normal\";\n\t\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\t\tcurTime = position;\n\t\t\t\t\t\tl = value.length;\n\t\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.add(child, curTime);\n\t\t\t\t\t\t\tif (typeof(child) !== \"string\" && typeof(child) !== \"function\") {\n\t\t\t\t\t\t\t\tif (align === \"sequence\") {\n\t\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t\t} else if (align === \"start\") {\n\t\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this._uncache(true);\n\t\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\t\treturn this.addLabel(value, position);\n\t\t\t\t\t} else if (typeof(value) === \"function\") {\n\t\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(\"Cannot add \" + value + \" into the timeline; it is not a tween, timeline, function, or string.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tSimpleTimeline.prototype.add.call(this, value, position);\n\t\n\t\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\t\tif (this._gc || this._time === this._duration) if (!this._paused) if (this._duration < this.duration()) {\n\t\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\t\ttl = this;\n\t\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.remove = function(value) {\n\t\t\t\tif (value instanceof Animation) {\n\t\t\t\t\tthis._remove(value, false);\n\t\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\t\tvar i = value.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\treturn this.removeLabel(value);\n\t\t\t\t}\n\t\t\t\treturn this.kill(null, value);\n\t\t\t};\n\t\n\t\t\tp._remove = function(tween, skipDisable) {\n\t\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\t\tvar last = this._last;\n\t\t\t\tif (!last) {\n\t\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t\t} else if (this._time > last._startTime + last._totalDuration / last._timeScale) {\n\t\t\t\t\tthis._time = this.duration();\n\t\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.append = function(value, offsetOrLabel) {\n\t\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t\t};\n\t\n\t\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t\t};\n\t\n\t\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t\t};\n\t\n\t\t\tp.addLabel = function(label, position) {\n\t\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\t\tt.data = \"isPause\";\n\t\t\t\tthis._hasPause = true;\n\t\t\t\treturn this.add(t, position);\n\t\t\t};\n\t\n\t\t\tp.removeLabel = function(label) {\n\t\t\t\tdelete this._labels[label];\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.getLabelTime = function(label) {\n\t\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t\t};\n\t\n\t\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\t\tvar i;\n\t\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\t\tthis.remove(ignore);\n\t\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\t\ti = ignore.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(offsetOrLabel) === \"string\") {\n\t\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \"number\" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent);\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\t\tif (typeof(timeOrLabel) === \"string\" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\t\ti = timeOrLabel.indexOf(\"=\");\n\t\t\t\t\tif (i === -1) {\n\t\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \"1\", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration();\n\t\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\t\ttimeOrLabel = this.duration();\n\t\t\t\t}\n\t\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t\t};\n\t\n\t\t\tp.seek = function(position, suppressEvents) {\n\t\t\t\treturn this.totalTime((typeof(position) === \"number\") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t\t};\n\t\n\t\t\tp.stop = function() {\n\t\t\t\treturn this.paused(true);\n\t\t\t};\n\t\n\t\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\t\treturn this.play(position, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\t\treturn this.pause(position, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevStart = this._startTime,\n\t\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\t\tprevPaused = this._paused,\n\t\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = this._time = totalDur;\n\t\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || this._rawPrevTime < 0 || this._rawPrevTime === _tinyNum) if (this._rawPrevTime !== time && this._first) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t\tif (this._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\t\tif (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t} else if (this._rawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t} else {\n\t\n\t\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t\t}\n\t\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._initted = true;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time > 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t\t}\n\t\n\t\t\t\tif (prevTime === 0) if (this.vars.onStart) if (this._time !== 0 || !this._duration) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\n\t\t\t\tcurTime = this._time;\n\t\t\t\tif (curTime >= prevTime) {\n\t\t\t\t\ttween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = this._last;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\n\t\t\t\tif (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._hasPausedChild = function() {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\t\tvar a = [],\n\t\t\t\t\ttween = this._first,\n\t\t\t\t\tcnt = 0;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t\t//do nothing\n\t\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tp.getTweensOf = function(target, nested) {\n\t\t\t\tvar disabled = this._gc,\n\t\t\t\t\ta = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttweens, i;\n\t\t\t\tif (disabled) {\n\t\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t\t}\n\t\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\t\ti = tweens.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (disabled) {\n\t\t\t\t\tthis._enabled(false, true);\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tp.recent = function() {\n\t\t\t\treturn this._recent;\n\t\t\t};\n\t\n\t\t\tp._contains = function(tween) {\n\t\t\t\tvar tl = tween.timeline;\n\t\t\t\twhile (tl) {\n\t\t\t\t\tif (tl === this) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl.timeline;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\tlabels = this._labels,\n\t\t\t\t\tp;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\tif (adjustLabels) {\n\t\t\t\t\tfor (p in labels) {\n\t\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp._kill = function(vars, target) {\n\t\t\t\tif (!vars && !target) {\n\t\t\t\t\treturn this._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\t\ti = tweens.length,\n\t\t\t\t\tchanged = false;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tp.clear = function(labels) {\n\t\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\t\ti = tweens.length;\n\t\t\t\tthis._time = this._totalTime = 0;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tif (labels !== false) {\n\t\t\t\t\tthis._labels = {};\n\t\t\t\t}\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween.invalidate();\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t\t};\n\t\n\t\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\t\tif (enabled === this._gc) {\n\t\t\t\t\tvar tween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\t};\n\t\n\t\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\t\tthis._forcingPlayhead = true;\n\t\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\t\tthis._forcingPlayhead = false;\n\t\t\t\treturn val;\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t\t}\n\t\t\t\t\treturn this._duration;\n\t\t\t\t}\n\t\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\t\ttween = this._last,\n\t\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\t\tprev, end;\n\t\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\t\tthis.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\t\tthis._startTime += tween._startTime / this._timeScale;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._duration = this._totalDuration = max;\n\t\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t\t};\n\t\n\t\t\tp.paused = function(value) {\n\t\t\t\tif (!value) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\t\tvar tween = this._first,\n\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tif (tween._startTime === time && tween.data === \"isPause\") {\n\t\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t\t};\n\t\n\t\t\tp.usesFrames = function() {\n\t\t\t\tvar tl = this._timeline;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t\t};\n\t\n\t\t\tp.rawTime = function() {\n\t\t\t\treturn this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale;\n\t\t\t};\n\t\n\t\t\treturn TimelineLite;\n\t\n\t\t}, true);\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TimelineMax\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"TimelineMax\", [\"TimelineLite\",\"TweenLite\",\"easing.Ease\"], function(TimelineLite, TweenLite, Ease) {\n\t\n\t\t\tvar TimelineMax = function(vars) {\n\t\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\t\tthis._cycle = 0;\n\t\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\t\tthis._dirty = true;\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\t\n\t\t\tp.constructor = TimelineMax;\n\t\t\tp.kill()._gc = false;\n\t\t\tTimelineMax.version = \"1.19.0\";\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._uncache(true);\n\t\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t\t};\n\t\n\t\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t\t};\n\t\n\t\t\tp.removeCallback = function(callback, position) {\n\t\t\t\tif (callback) {\n\t\t\t\t\tif (position == null) {\n\t\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.removePause = function(position) {\n\t\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t\t};\n\t\n\t\t\tp.tweenTo = function(position, vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false},\n\t\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\t\tduration, p, t;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\t\tt = new Engine(this, duration, copy);\n\t\t\t\tcopy.onStart = function() {\n\t\t\t\t\tt.target.paused(true);\n\t\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale );\n\t\t\t\t\t}\n\t\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\t\tt._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn t;\n\t\t\t};\n\t\n\t\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tdur = this._duration,\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevTotalTime = this._totalTime,\n\t\t\t\t\tprevStart = this._startTime,\n\t\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tprevPaused = this._paused,\n\t\t\t\t\tprevCycle = this._cycle,\n\t\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && this._first) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = this._cycle = 0;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = 0;\n\t\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) {\n\t\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t} else if (prevRawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t} else {\n\t\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = this._rawPrevTime = time;\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = time;\n\t\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\t\tcycleDuration = dur + this._repeatDelay;\n\t\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\t\tthis._time = dur - this._time;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this._time > dur) {\n\t\t\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\n\t\t\t\tif (this._cycle !== prevCycle) if (!this._locked) {\n\t\t\t\t\t/*\n\t\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\t\twould get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t\t*/\n\t\t\t\t\tvar backwards = (this._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\t\twrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)),\n\t\t\t\t\t\trecTotalTime = this._totalTime,\n\t\t\t\t\t\trecCycle = this._cycle,\n\t\t\t\t\t\trecRawPrevTime = this._rawPrevTime,\n\t\t\t\t\t\trecTime = this._time;\n\t\n\t\t\t\t\tthis._totalTime = prevCycle * dur;\n\t\t\t\t\tif (this._cycle < prevCycle) {\n\t\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._totalTime += dur;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \"cleaner\" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\t\n\t\t\t\t\tthis._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\tthis._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\t\tthis.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\t\tif (!suppressEvents) if (!this._gc) {\n\t\t\t\t\t\tif (this.vars.onRepeat) {\n\t\t\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (prevTime !== this._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (wrap) {\n\t\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._locked = false;\n\t\t\t\t\tif (this._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = recTime;\n\t\t\t\t\tthis._totalTime = recTotalTime;\n\t\t\t\t\tthis._cycle = recCycle;\n\t\t\t\t\tthis._rawPrevTime = recRawPrevTime;\n\t\t\t\t}\n\t\n\t\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._initted = true;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t\t}\n\t\n\t\t\t\tif (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0 || !this._totalDuration) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\n\t\t\t\tcurTime = this._time;\n\t\t\t\tif (curTime >= prevTime) {\n\t\t\t\t\ttween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = this._last;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\t\tif (nested == null) {\n\t\t\t\t\tnested = true;\n\t\t\t\t}\n\t\t\t\tif (tweens == null) {\n\t\t\t\t\ttweens = true;\n\t\t\t\t}\n\t\t\t\tif (timelines == null) {\n\t\t\t\t\ttimelines = false;\n\t\t\t\t}\n\t\t\t\tvar a = [],\n\t\t\t\t\tall = this.getChildren(nested, tweens, timelines),\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tl = all.length,\n\t\t\t\t\ti, tween;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = all[i];\n\t\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\n\t\t\tp.getLabelAfter = function(time) {\n\t\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\t\ttime = this._time;\n\t\t\t\t}\n\t\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\t\tl = labels.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\t\treturn labels[i].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tp.getLabelBefore = function(time) {\n\t\t\t\tif (time == null) {\n\t\t\t\t\ttime = this._time;\n\t\t\t\t}\n\t\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\t\ti = labels.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\t\treturn labels[i].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tp.getLabelsArray = function() {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in this._labels) {\n\t\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t\t}\n\t\t\t\ta.sort(function(a,b) {\n\t\t\t\t\treturn a.time - b.time;\n\t\t\t\t});\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\n\t//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\t\n\t\t\tp.progress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t\t};\n\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (value > this._duration) {\n\t\t\t\t\tvalue = this._duration;\n\t\t\t\t}\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t\t}\n\t\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.repeat = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeat;\n\t\t\t\t}\n\t\t\t\tthis._repeat = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.repeatDelay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeatDelay;\n\t\t\t\t}\n\t\t\t\tthis._repeatDelay = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.yoyo = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._yoyo;\n\t\t\t\t}\n\t\t\t\tthis._yoyo = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.currentLabel = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this.getLabelBefore(this._time + 0.00000001);\n\t\t\t\t}\n\t\t\t\treturn this.seek(value, true);\n\t\t\t};\n\t\n\t\t\treturn TimelineMax;\n\t\n\t\t}, true);\n\t\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * BezierPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t(function() {\n\t\n\t\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t\t_r1 = [],\n\t\t\t\t_r2 = [],\n\t\t\t\t_r3 = [],\n\t\t\t\t_corProps = {},\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t\t}\n\t\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t\t}\n\t\t\t\t\tthis.a = a;\n\t\t\t\t\tthis.b = b;\n\t\t\t\t\tthis.c = c;\n\t\t\t\t\tthis.d = d;\n\t\t\t\t\tthis.da = d - a;\n\t\t\t\t\tthis.ca = c - a;\n\t\t\t\t\tthis.ba = b - a;\n\t\t\t\t},\n\t\t\t\t_correlate = \",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",\n\t\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\t\tq2 = {},\n\t\t\t\t\t\tq3 = {},\n\t\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\t\tq2.b = mabc + m8;\n\t\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t\t},\n\t\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\t\tii = 0,\n\t\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tseg = a[ii];\n\t\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\t\tp3 = a[ii+1].d;\n\t\n\t\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm1 += mm;\n\t\t\t\t\t\tm2 += mm;\n\t\n\t\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\t\tseg.ba = cp1 - p1;\n\t\n\t\t\t\t\t\tif (quad) {\n\t\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\t\tii += 4;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tii++;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tcp1 = m2;\n\t\t\t\t\t}\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\t\ti = values.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \"string\") if (tmp.charAt(1) === \"=\") {\n\t\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tl = values.length - 2;\n\t\t\t\t\tif (l < 0) {\n\t\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[(l < -1) ? 0 : 1][p]);\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\t\tvar obj = {},\n\t\t\t\t\t\tprops = [],\n\t\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\t\tcorrelate = (typeof(correlate) === \"string\") ? \",\"+correlate+\",\" : _correlate;\n\t\t\t\t\tif (curviness == null) {\n\t\t\t\t\t\tcurviness = 1;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\t\tprops.push(p);\n\t\t\t\t\t}\n\t\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\t\tif (values.length > 1) {\n\t\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\t\tseamless = true;\n\t\t\t\t\t\ti = props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\t_corProps[p] = (correlate.indexOf(\",\"+p+\",\") !== -1);\n\t\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t\t}\n\t\t\t\t\ti = _r1.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (!basic) {\n\t\t\t\t\t\ti = props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti = _r3.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = props.length;\n\t\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\ta = obj[p];\n\t\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\t\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\t\ttype = type || \"soft\";\n\t\t\t\t\tvar obj = {},\n\t\t\t\t\t\tinc = (type === \"cubic\") ? 3 : 2,\n\t\t\t\t\t\tsoft = (type === \"soft\"),\n\t\t\t\t\t\tprops = [],\n\t\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\t\tif (soft && prepend) {\n\t\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\t}\n\t\t\t\t\tif (values == null || values.length < inc + 1) { throw \"invalid Bezier data\"; }\n\t\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\t\tprops.push(p);\n\t\t\t\t\t}\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\t\tcnt = 0;\n\t\t\t\t\t\tl = values.length;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \"string\" && tmp.charAt(1) === \"=\") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\t\tcnt = 0;\n\t\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur.length = cnt;\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\t\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\t\tj = a.length,\n\t\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tbez = a[j];\n\t\t\t\t\t\ts = bez.a;\n\t\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\t\td = d1 = 0;\n\t\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tlengths = [],\n\t\t\t\t\t\td = 0,\n\t\t\t\t\t\ttotal = 0,\n\t\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\t\tsegments = [],\n\t\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\t\tp, i, l, index;\n\t\t\t\t\tfor (p in obj) {\n\t\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t\t}\n\t\t\t\t\tl = a.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\t\td = 0;\n\t\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t\t},\n\t\n\t\n\t\n\t\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\t\tpropName: \"bezier\",\n\t\t\t\t\t\tpriority: -1,\n\t\t\t\t\t\tversion: \"1.3.7\",\n\t\t\t\t\t\tAPI: 2,\n\t\t\t\t\t\tglobal:true,\n\t\n\t\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\t\n\t\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\"x\",\"y\",\"rotation\",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = this._props[i];\n\t\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \"function\");\n\t\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]();\n\t\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._beziers = (vars.type !== \"cubic\" && vars.type !== \"quadratic\" && vars.type !== \"soft\") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \"thruBasic\"), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\t\n\t\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \"function\") ? target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg;\n\t\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\t\tv *= this._length;\n\t\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\t\tif (v > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t\t} else if (v < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v) { }\n\t\t\t\t\t\t\t\t\tif (i === 0 && v < this._l1) {\n\t\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \"precision\" and measured each one)\n\t\t\t\t\t\t\t\tv -= this._l1;\n\t\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\t\tif (v > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t\t} else if (v < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v) {\t}\n\t\t\t\t\t\t\t\t\tif (i === 0 && v < this._s1) {\n\t\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tt = ((i + (v - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinv = 1 - t;\n\t\n\t\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\t\n\t\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\t\n\t\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\t\n\t\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\t\n\t\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\t\n\t\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tp = BezierPlugin.prototype;\n\t\n\t\n\t\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \"css\" object using the autoCSS feature of TweenLite\n\t\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t};\n\t\n\t\t\tBezierPlugin._cssRegister = function() {\n\t\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\t\tif (!CSSPlugin) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t\t_internals._registerComplexSpecialProp(\"bezier\", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\t\te = {values:e};\n\t\t\t\t\t}\n\t\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\t\tvar values = e.values,\n\t\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\t\tpluginValues = [],\n\t\t\t\t\t\tv = {},\n\t\t\t\t\t\ti, p, data;\n\t\t\t\t\tif (l < 0) {\n\t\t\t\t\t\treturn pt;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in e) {\n\t\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t\t}\n\t\t\t\t\tv.values = pluginValues;\n\t\t\t\t\tpt = new CSSPropTween(t, \"bezier\", 0, 0, data.pt, 2);\n\t\t\t\t\tpt.data = data;\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\"left\",\"top\",\"rotation\",i,false]] : (data.end.x != null) ? [[\"x\",\"y\",\"rotation\",i,false]] : false;\n\t\t\t\t\t}\n\t\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\t\tcssp._overwriteProps.push(\"rotation\");\n\t\t\t\t\t}\n\t\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\t\treturn pt;\n\t\t\t\t}});\n\t\t\t};\n\t\n\t\t\tp._mod = function(lookup) {\n\t\t\t\tvar op = this._overwriteProps,\n\t\t\t\t\ti = op.length,\n\t\t\t\t\tval;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tval = lookup[op[i]];\n\t\t\t\t\tif (val && typeof(val) === \"function\") {\n\t\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar a = this._props,\n\t\t\t\t\tp, i;\n\t\t\t\tfor (p in this._beziers) {\n\t\t\t\t\tif (p in lookup) {\n\t\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta = this._autoRotate;\n\t\t\t\tif (a) {\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this._super._kill.call(this, lookup);\n\t\t\t};\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * CSSPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"plugins.CSSPlugin\", [\"plugins.TweenPlugin\",\"TweenLite\"], function(TweenPlugin, TweenLite) {\n\t\n\t\t\t/** @constructor **/\n\t\t\tvar CSSPlugin = function() {\n\t\t\t\t\tTweenPlugin.call(this, \"css\");\n\t\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t\t},\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t\t_specialProps = {},\n\t\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\"css\");\n\t\n\t\t\tp.constructor = CSSPlugin;\n\t\t\tCSSPlugin.version = \"1.19.0\";\n\t\t\tCSSPlugin.API = 2;\n\t\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\t\tCSSPlugin.defaultSkewType = \"compensated\";\n\t\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\t\tp = \"px\"; //we'll reuse the \"p\" variable to keep file size down\n\t\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\"\"};\n\t\n\t\n\t\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t\t_urlExp = /(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\"...\") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t\t_forcePT = {},\n\t\t\t\t_doc = document,\n\t\t\t\t_createElement = function(type) {\n\t\t\t\t\treturn _doc.createElementNS ? _doc.createElementNS(\"http://www.w3.org/1999/xhtml\", type) : _doc.createElement(type);\n\t\t\t\t},\n\t\t\t\t_tempDiv = _createElement(\"div\"),\n\t\t\t\t_tempImg = _createElement(\"img\"),\n\t\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t\t_agent = navigator.userAgent,\n\t\t\t\t_autoRound,\n\t\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\t\n\t\t\t\t_isSafari,\n\t\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \"top\" and \"left\" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t\t_ieVers,\n\t\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\t\tvar i = _agent.indexOf(\"Android\"),\n\t\t\t\t\t\ta = _createElement(\"a\");\n\t\t\t\t\t_isSafari = (_agent.indexOf(\"Safari\") !== -1 && _agent.indexOf(\"Chrome\") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));\n\t\t\t\t\t_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf(\"Version/\")+8, 1)) < 6));\n\t\t\t\t\t_isFirefox = (_agent.indexOf(\"Firefox\") !== -1);\n\t\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t\t}\n\t\t\t\t\tif (!a) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\ta.style.cssText = \"top:1px;opacity:.55;\";\n\t\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t\t}()),\n\t\t\t\t_getIEOpacity = function(v) {\n\t\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \"string\") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \"\") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t\t},\n\t\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\t\tif (window.console) {\n\t\t\t\t\t\tconsole.log(s);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\n\t\t\t\t_prefixCSS = \"\", //the non-camelCase vendor prefix like \"-o-\", \"-moz-\", \"-ms-\", or \"-webkit-\"\n\t\t\t\t_prefix = \"\", //camelCase vendor prefix like \"O\", \"ms\", \"Webkit\", or \"Moz\".\n\t\n\t\t\t\t// @private feed in a camelCase property name like \"transform\" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \"WebkitTransform\" or \"MozTransform\" or \"transform\" or null if no such property is found, like if the browser is IE8 or before, \"transform\" won't be found at all)\n\t\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\t\te = e || _tempDiv;\n\t\t\t\t\tvar s = e.style,\n\t\t\t\t\t\ta, i;\n\t\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\t\treturn p;\n\t\t\t\t\t}\n\t\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\t\ta = [\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"];\n\t\t\t\t\ti = 5;\n\t\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\t_prefix = (i === 3) ? \"ms\" : a[i];\n\t\t\t\t\t\t_prefixCSS = \"-\" + _prefix.toLowerCase() + \"-\";\n\t\t\t\t\t\treturn _prefix + p;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\n\t\t\t\t_getComputedStyle = _doc.defaultView ? _doc.defaultView.getComputedStyle : function() {},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \"left\" css value for an element with an ID of \"myElement\", you could do:\n\t\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\"myElement\"), \"left\");\n\t\t\t\t *\n\t\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t\t * @param {!string} p Property name (like \"left\" or \"top\" or \"marginTop\", etc.)\n\t\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \"style\" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \"none\", \"auto\" or \"auto auto\".\n\t\t\t\t * @return {?string} The current property value\n\t\t\t\t */\n\t\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\t\tvar rv;\n\t\t\t\t\tif (!_supportsOpacity) if (p === \"opacity\") { //several versions of IE don't use the standard \"opacity\" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\t\trv = t.style[p];\n\t\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t\t}\n\t\t\t\t\treturn (dflt != null && (!rv || rv === \"none\" || rv === \"auto\" || rv === \"auto auto\")) ? dflt : rv;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \"%\", \"em\", \"px\", etc.) and it will spit back the equivalent pixel number.\n\t\t\t\t * @param {!Object} t Target element\n\t\t\t\t * @param {!string} p Property name (like \"left\", \"top\", \"marginLeft\", etc.)\n\t\t\t\t * @param {!number} v Value\n\t\t\t\t * @param {string=} sfx Suffix (like \"px\" or \"%\" or \"em\")\n\t\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t\t * @return {number} value in pixels\n\t\t\t\t */\n\t\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\t\tif (sfx === \"px\" || !sfx) { return v; }\n\t\t\t\t\tif (sfx === \"auto\" || !v) { return 0; }\n\t\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\t\tnode = t,\n\t\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\t\tpix, cache, time;\n\t\t\t\t\tif (neg) {\n\t\t\t\t\t\tv = -v;\n\t\t\t\t\t}\n\t\t\t\t\tif (precise) {\n\t\t\t\t\t\tv *= 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (sfx === \"%\" && p.indexOf(\"border\") !== -1) {\n\t\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle.cssText = \"border:0 solid red;position:\" + _getStyle(t, \"position\") + \";line-height:0;\";\n\t\t\t\t\t\tif (sfx === \"%\" || !node.appendChild || sfx.charAt(0) === \"v\" || sfx === \"rem\") {\n\t\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle[(horiz ? \"width\" : \"height\")] = v + sfx;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle[(horiz ? \"borderLeftWidth\" : \"borderTopWidth\")] = v + sfx;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \"offsetWidth\" : \"offsetHeight\")]);\n\t\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\t\tif (horiz && sfx === \"%\" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (precise) {\n\t\t\t\t\t\tpix /= 100;\n\t\t\t\t\t}\n\t\t\t\t\treturn neg ? -pix : pix;\n\t\t\t\t},\n\t\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \"top\" or \"left\" in px when it's \"auto\". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\t\tif (_getStyle(t, \"position\", cs) !== \"absolute\") { return 0; }\n\t\t\t\t\tvar dim = ((p === \"left\") ? \"Left\" : \"Top\"),\n\t\t\t\t\t\tv = _getStyle(t, \"margin\" + dim, cs);\n\t\t\t\t\treturn t[\"offset\" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \"\")) || 0);\n\t\t\t\t},\n\t\n\t\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\t\tvar s = {},\n\t\t\t\t\t\ti, tr, p;\n\t\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\t\tif (p.indexOf(\"-transform\") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\t\tif (i.indexOf(\"Transform\") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (typeof(i) === \"string\" && s[i] === undefined) {\n\t\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t\t}\n\t\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\t\ts.x = tr.x;\n\t\t\t\t\ts.y = tr.y;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t\t}\n\t\t\t\t\tif (s.filters) {\n\t\t\t\t\t\tdelete s.filters;\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t},\n\t\n\t\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \"difs\" property which refers to an object containing only those isolated properties and values for tweening, and a \"firstMPT\" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\t\tvar difs = {},\n\t\t\t\t\t\tstyle = t.style,\n\t\t\t\t\t\tval, p, mpt;\n\t\t\t\t\tfor (p in s2) {\n\t\t\t\t\t\tif (p !== \"cssText\") if (p !== \"length\") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\"Origin\") === -1) if (typeof(val) === \"number\" || typeof(val) === \"string\") {\n\t\t\t\t\t\t\tdifs[p] = (val === \"auto\" && (p === \"left\" || p === \"top\")) ? _calculateOffset(t, p) : ((val === \"\" || val === \"auto\" || val === \"none\") && typeof(s1[p]) === \"string\" && s1[p].replace(_NaNExp, \"\") !== \"\") ? 0 : val; //if the ending value is defaulting (\"\" or \"auto\"), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \"\" or \"auto\" so that things actually tween.\n\t\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (vars) {\n\t\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\t\tif (p !== \"className\") {\n\t\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t\t},\n\t\t\t\t_dimensions = {width:[\"Left\",\"Right\"], height:[\"Top\",\"Bottom\"]},\n\t\t\t\t_margins = [\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Gets the width or height of an element\n\t\t\t\t * @param {!Object} t Target element\n\t\t\t\t * @param {!string} p Property name (\"width\" or \"height\")\n\t\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t\t */\n\t\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\t\tif ((t.nodeName + \"\").toLowerCase() === \"svg\") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t\t} else if (t.getBBox && _isSVG(t)) {\n\t\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar v = parseFloat((p === \"width\") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tv -= parseFloat( _getStyle(t, \"padding\" + a[i], cs, true) ) || 0;\n\t\t\t\t\t\tv -= parseFloat( _getStyle(t, \"border\" + a[i] + \"Width\", cs, true) ) || 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn v;\n\t\t\t\t},\n\t\n\t\t\t\t// @private Parses position-related complex strings like \"top left\" or \"50px 10px\" or \"70% 20%\", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \"ox\" (offsetX), \"oy\" (offsetY), \"oxp\" (if true, \"ox\" is a percentage not a pixel value), and \"oxy\" (if true, \"oy\" is a percentage not a pixel value)\n\t\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\t\tif (v === \"contain\" || v === \"auto\" || v === \"auto auto\") { //note: Firefox uses \"auto auto\" as default whereas Chrome uses \"auto\".\n\t\t\t\t\t\treturn v + \" \";\n\t\t\t\t\t}\n\t\t\t\t\tif (v == null || v === \"\") {\n\t\t\t\t\t\tv = \"0 0\";\n\t\t\t\t\t}\n\t\t\t\t\tvar a = v.split(\" \"),\n\t\t\t\t\t\tx = (v.indexOf(\"left\") !== -1) ? \"0%\" : (v.indexOf(\"right\") !== -1) ? \"100%\" : a[0],\n\t\t\t\t\t\ty = (v.indexOf(\"top\") !== -1) ? \"0%\" : (v.indexOf(\"bottom\") !== -1) ? \"100%\" : a[1],\n\t\t\t\t\t\ti;\n\t\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\t\ta = v.split(\", \").join(\",\").split(\",\");\n\t\t\t\t\t\tv = [];\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn v.join(\",\");\n\t\t\t\t\t}\n\t\t\t\t\tif (y == null) {\n\t\t\t\t\t\ty = (x === \"center\") ? \"50%\" : \"0\";\n\t\t\t\t\t} else if (y === \"center\") {\n\t\t\t\t\t\ty = \"50%\";\n\t\t\t\t\t}\n\t\t\t\t\tif (x === \"center\" || (isNaN(parseFloat(x)) && (x + \"\").indexOf(\"=\") === -1)) { //remember, the user could flip-flop the values and say \"bottom center\" or \"center bottom\", etc. \"center\" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \"=\" sign in the value, it's relative.\n\t\t\t\t\t\tx = \"50%\";\n\t\t\t\t\t}\n\t\t\t\t\tv = x + \" \" + y + ((a.length > 2) ? \" \" + a[2] : \"\");\n\t\t\t\t\tif (recObj) {\n\t\t\t\t\t\trecObj.oxp = (x.indexOf(\"%\") !== -1);\n\t\t\t\t\t\trecObj.oyp = (y.indexOf(\"%\") !== -1);\n\t\t\t\t\t\trecObj.oxr = (x.charAt(1) === \"=\");\n\t\t\t\t\t\trecObj.oyr = (y.charAt(1) === \"=\");\n\t\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \"\"));\n\t\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \"\"));\n\t\t\t\t\t\trecObj.v = v;\n\t\t\t\t\t}\n\t\t\t\t\treturn recObj || v;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \"+=\" or \"-=\" are recognized)\n\t\t\t\t */\n\t\t\t\t_parseChange = function(e, b) {\n\t\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\t\te = e(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\treturn (typeof(e) === \"string\" && e.charAt(1) === \"=\") ? parseInt(e.charAt(0) + \"1\", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t\t * @param {Object} v Value to be parsed\n\t\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t\t * @return {number} Parsed value\n\t\t\t\t */\n\t\t\t\t_parseVal = function(v, d) {\n\t\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\treturn (v == null) ? d : (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Translates strings like \"40deg\" or \"40\" or 40rad\" or \"+=40deg\" or \"270_short\" or \"-90_cw\" or \"+=45_ccw\" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t\t * @param {Object} v Value to be parsed\n\t\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \"rotation\", \"rotationX\", or \"rotationY\"\n\t\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t\t * @return {number} parsed angle in radians\n\t\t\t\t */\n\t\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\t\tvar min = 0.000001,\n\t\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tif (v == null) {\n\t\t\t\t\t\tresult = d;\n\t\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\t\tresult = v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcap = 360;\n\t\t\t\t\t\tsplit = v.split(\"_\");\n\t\t\t\t\t\tisRelative = (v.charAt(1) === \"=\");\n\t\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\"rad\") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = d + dif;\n\t\t\t\t\t}\n\t\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\n\t\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\t\tlime:[0,255,0],\n\t\t\t\t\tsilver:[192,192,192],\n\t\t\t\t\tblack:[0,0,0],\n\t\t\t\t\tmaroon:[128,0,0],\n\t\t\t\t\tteal:[0,128,128],\n\t\t\t\t\tblue:[0,0,255],\n\t\t\t\t\tnavy:[0,0,128],\n\t\t\t\t\twhite:[255,255,255],\n\t\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\t\tolive:[128,128,0],\n\t\t\t\t\tyellow:[255,255,0],\n\t\t\t\t\torange:[255,165,0],\n\t\t\t\t\tgray:[128,128,128],\n\t\t\t\t\tpurple:[128,0,128],\n\t\t\t\t\tgreen:[0,128,0],\n\t\t\t\t\tred:[255,0,0],\n\t\t\t\t\tpink:[255,192,203],\n\t\t\t\t\tcyan:[0,255,255],\n\t\t\t\t\ttransparent:[255,255,255,0]},\n\t\n\t\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t\t */\n\t\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\t\tif (!v) {\n\t\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\t\ta[3] = Number(v[3]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\t\th *= 60;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\t\tparsed = colors.length ? \"\" : s,\n\t\t\t\t\t\ti, color, temp;\n\t\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t\t\t}\n\t\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t\t},\n\t\t\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\"; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\t\n\t\t\tfor (p in _colorLookup) {\n\t\t\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t\t\t}\n\t\t\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\t\n\t\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\t\tvar combined = a[0] + a[1],\n\t\t\t\t\ttoHSL;\n\t\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t\t}\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t};\n\t\n\t\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t\t}\n\t\n\t\t\t/**\n\t\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \"0px red\" or \"0px 0px 10px rgb(255,0,0)\" or \"0px 0px 20px 20px #F00\" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\"0px 0px 0px 0px #777\", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t\t * @param {!string} dflt The default value and pattern to follow. So \"0px 0px 0px 0px #777\" will ensure that 4 numbers and a color will always get returned.\n\t\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t\t * @return {Function} formatter function\n\t\t\t */\n\t\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\t\tif (dflt == null) {\n\t\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t\t}\n\t\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\"\"])[0] : \"\",\n\t\t\t\t\t\tdVals = dflt.split(dColor).join(\"\").match(_valuesExp) || [],\n\t\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \")\") ? \")\" : \"\",\n\t\t\t\t\t\tdelim = (dflt.indexOf(\" \") !== -1) ? \" \" : \",\",\n\t\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \"\") : \"\",\n\t\t\t\t\t\tformatter;\n\t\t\t\t\tif (!numVals) {\n\t\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t\t}\n\t\t\t\t\tif (clr) {\n\t\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\t\tvals = v.split(color).join(\"\").match(_valuesExp) || [];\n\t\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\"inset\") !== -1 ? \" inset\" : \"\");\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn formatter;\n\t\n\t\t\t\t\t}\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvals = v.match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + sfx;\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \"marginTop,marginRight,marginBottom,marginLeft\"\n\t\t\t\t * @return {Function} a formatter function\n\t\t\t\t */\n\t\t\t\t_getEdgeParser = function(props) {\n\t\t\t\t\tprops = props.split(\",\");\n\t\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar a = (e + \"\").split(\" \"),\n\t\t\t\t\t\t\ti;\n\t\t\t\t\t\tvars = {};\n\t\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t\t};\n\t\t\t\t},\n\t\n\t\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\t\tvar d = this.data,\n\t\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod(proxy.rotation, this.t) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t\t}\n\t\t\t\t\t//at the end, we must set the CSSPropTween's \"e\" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \"b\" at the beginning.\n\t\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\t\tp = (v === 1) ? \"e\" : \"b\";\n\t\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t\t * @param {!string} p property name\n\t\t\t\t * @param {(number|string|object)} v value\n\t\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t\t */\n\t\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\t\tthis.t = t;\n\t\t\t\t\tthis.p = p;\n\t\t\t\t\tthis.v = v;\n\t\t\t\t\tthis.r = r;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tnext._prev = this;\n\t\t\t\t\t\tthis._next = next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \"10px 10px 20px 30px rgb(255,0,0)\" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \"s\" or \"xn1\" or \"xn2\") that we're tweening and the unique property name that was used for the proxy (like \"boxShadow_xn1\" and \"boxShadow_xn2\") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t\t * This method returns an object that has the following properties:\n\t\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \"pt\" (4th) parameter.\n\t\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \"pt\" (4th) parameter.\n\t\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t\t */\n\t\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\t\tvar bpt = pt,\n\t\t\t\t\t\tstart = {},\n\t\t\t\t\t\tend = {},\n\t\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\t\tcssp._transform = null;\n\t\t\t\t\t_forcePT = vars;\n\t\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t\t_forcePT = oldForce;\n\t\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\t\tif (shallow) {\n\t\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \"s\", p, mpt, pt.r);\n\t\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\t\txp = \"xn\" + i;\n\t\t\t\t\t\t\t\t\tp = pt.p + \"_\" + xp;\n\t\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t\t},\n\t\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \"extra\" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \"s\" indicates string and \"n\" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \"5px 5px 8px rgb(102, 102, 51)\". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \"width\".\n\t\t\t\t * @param {number} s Starting numeric value\n\t\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\"1px solid red\"), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \"clip:rect(...)\" tween in which case \"p\" might be xs1 but \"n\" is still \"clip\"\n\t\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t\t */\n\t\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\t\tthis.t = t; //target\n\t\t\t\t\tthis.p = p; //property\n\t\t\t\t\tthis.s = s; //starting value\n\t\t\t\t\tthis.c = c; //change value\n\t\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t\t}\n\t\t\t\t\tthis.r = r; //round (boolean)\n\t\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\t\tif (pr) {\n\t\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t\t_hasPriority = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tthis._next = next;\n\t\t\t\t\t\tnext._prev = this;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\t\tpt.b = start;\n\t\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\t\treturn pt;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t\t * sp.parseComplex(element, \"boxShadow\", \"5px 10px 20px rgb(255,102,51)\", \"0px 0px 0px red\", true, \"0px 0px 0px rgb(0,0,0,0)\", pt);\n\t\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \"data\" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t\t *\n\t\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t\t * @param {!string} p Property that will be tweened (its name, like \"left\" or \"backgroundColor\" or \"boxShadow\")\n\t\t\t\t * @param {string} b Beginning value\n\t\t\t\t * @param {string} e Ending value\n\t\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \"rgb(255,0,0)\" or \"#F00\" or \"red\". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \"data\" property, like {s:100, xn1:50, xn2:300}\n\t\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t\t */\n\t\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t\t//DEBUG: _log(\"parseComplex: \"+p+\", b: \"+b+\", e: \"+e);\n\t\t\t\t\tb = b || dflt || \"\";\n\t\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\t\te = e(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\t\te += \"\"; //ensures it's a string\n\t\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\t\te = [b, e];\n\t\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\t\tb = e[0];\n\t\t\t\t\t\te = e[1];\n\t\t\t\t\t}\n\t\t\t\t\tvar ba = b.split(\", \").join(\",\").split(\" \"), //beginning array\n\t\t\t\t\t\tea = e.split(\", \").join(\",\").split(\" \"), //ending array\n\t\t\t\t\t\tl = ba.length,\n\t\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\t\tif (e.indexOf(\",\") !== -1 || b.indexOf(\",\") !== -1) {\n\t\t\t\t\t\tba = ba.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t\tea = ea.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t\tl = ba.length;\n\t\t\t\t\t}\n\t\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\tba = (dflt || \"\").split(\" \");\n\t\t\t\t\t\tl = ba.length;\n\t\t\t\t\t}\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tbv = ba[i];\n\t\t\t\t\t\tev = ea[i];\n\t\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\t\tpt.appendXtra(\"\", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \"\"), (autoRound && ev.indexOf(\"px\") !== -1), true);\n\t\n\t\t\t\t\t\t//if the value is a color\n\t\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\t\tstr = ev.indexOf(\")\") + 1;\n\t\t\t\t\t\t\tstr = \")\" + (str ? ev.substr(str) : \"\"); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\t\tuseHSL = (ev.indexOf(\"hsl\") !== -1 && _supportsOpacity);\n\t\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \"transparent\" for the end color\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += pt.l ? \" transparent\" : \"transparent\";\n\t\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\"transparent\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"hsla(\" : \"hsl(\"), bv[0], _parseChange(ev[0], bv[0]), \",\", false, true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], _parseChange(ev[1], bv[1]), \"%,\", false)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \"%,\" : \"%\" + str), false);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"rgba(\" : \"rgb(\"), bv[0], ev[0] - bv[0], \",\", true, true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], ev[1] - bv[1], \",\", true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], ev[2] - bv[2], (hasAlpha ? \",\" : str), true);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\t\tpt.appendXtra(\"\", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\t\n\t\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += (pt.l || pt[\"xs\" + pt.l]) ? \" \" + ev : ev;\n\t\n\t\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \"\", (autoRound && bv.substr(temp + cv.length, 2) === \"px\"), (xi === 0));\n\t\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are relative values (\"+=\" or \"-=\" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\t\tif (e.indexOf(\"=\") !== -1) if (pt.data) {\n\t\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\tstr += pt[\"xs\" + i] + pt.data[\"xn\" + i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.e = str + pt[\"xs\" + i];\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.l) {\n\t\t\t\t\t\tpt.type = -1;\n\t\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t\t}\n\t\t\t\t\treturn pt.xfirst || pt;\n\t\t\t\t},\n\t\t\t\ti = 9;\n\t\n\t\n\t\t\tp = CSSPropTween.prototype;\n\t\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\t\twhile (--i > 0) {\n\t\t\t\tp[\"xn\" + i] = 0;\n\t\t\t\tp[\"xs\" + i] = \"\";\n\t\t\t}\n\t\t\tp.xs0 = \"\";\n\t\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\t\n\t\n\t\t\t/**\n\t\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \"rect(10px, 5px, 0px, 20px)\", the values would be stored like this:\n\t\t\t * xs0:\"rect(\", s:10, xs1:\"px, \", xn1:5, xs2:\"px, \", xn2:0, xs3:\"px, \", xn3:20, xn4:\"px)\"\n\t\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t\t * @param {string=} pfx Prefix (if any)\n\t\t\t * @param {!number} s Starting value\n\t\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t\t * @param {string=} sfx Suffix (if any)\n\t\t\t * @param {boolean=} r Round (if true).\n\t\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t\t */\n\t\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\t\tvar pt = this,\n\t\t\t\t\tl = pt.l;\n\t\t\t\tpt[\"xs\" + l] += (pad && (l || pt[\"xs\" + l])) ? \" \" + pfx : pfx || \"\";\n\t\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\t\tpt[\"xs\" + l] += s + (sfx || \"\");\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tpt.l++;\n\t\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\t\tpt[\"xs\" + pt.l] = sfx || \"\";\n\t\t\t\tif (l > 0) {\n\t\t\t\t\tpt.data[\"xn\" + l] = s + c;\n\t\t\t\t\tpt.rxp[\"xn\" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\t\tpt[\"xn\" + l] = s;\n\t\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \"xn\" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \"\" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t\t}\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tpt.data = {s:s + c};\n\t\t\t\tpt.rxp = {};\n\t\t\t\tpt.s = s;\n\t\t\t\tpt.c = c;\n\t\t\t\tpt.r = r;\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\"5px 10px 15px rgb(255, 102, 51)\" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \"boxShadow\" or \"throwProps\" or \"bezier\" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t\t * @param {!string} p Property name (like \"boxShadow\" or \"throwProps\")\n\t\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t\t *                      - defaultValue: the default value\n\t\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \"5px 5px red\" and format it to \"5px 5px 0px 0px red\" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \"5px\" would apply to all, \"5px, 10px\" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \"inset\" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t\t */\n\t\t\tvar SpecialProp = function(p, options) {\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\t\tif (options.parser) {\n\t\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clrs = options.color;\n\t\t\t\t\tthis.multi = options.multi;\n\t\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t\t},\n\t\n\t\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\t\tif (typeof(options) !== \"object\") {\n\t\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t\t}\n\t\t\t\t\tvar a = p.split(\",\"),\n\t\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\t\ti, temp;\n\t\t\t\t\tdefaults = defaults || [d];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \"Plugin\";\n\t\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t\t_log(\"Error: \" + pluginName + \" js file not loaded.\");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t\t}});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\n\t\t\tp = SpecialProp.prototype;\n\t\n\t\t\t/**\n\t\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \"inset\" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {(string|number|object)} b beginning value\n\t\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t\t */\n\t\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\t\tvar kwd = this.keyword,\n\t\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \"inset\" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\t\tba = b.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\tea = e.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t} else if (kwd) {\n\t\t\t\t\tba = [b];\n\t\t\t\t\tea = [e];\n\t\t\t\t}\n\t\t\t\tif (ea) {\n\t\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\"\");\n\t\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\t\tba[i] += \" \" + kwd;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tb = ba.join(\", \");\n\t\t\t\t\te = ea.join(\", \");\n\t\t\t\t}\n\t\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t\t * this._firstPT = sp.parse(element, \"5px 10px 20px rgb(2550,102,51)\", \"boxShadow\", this);\n\t\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t\t * @param {!string} p Property name\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t\t */\n\t\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Registers a special property that should be intercepted from any \"css\" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t\t *\n\t\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \"ratio\" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t\t *\n\t\t\t * CSSPlugin.registerSpecialProp(\"myCustomProp\", function(target, value, tween) {\n\t\t\t *      var start = target.style.width;\n\t\t\t *      return function(ratio) {\n\t\t\t *              target.style.width = (start + value * ratio) + \"px\";\n\t\t\t *              console.log(\"set width to \" + target.style.width);\n\t\t\t *          }\n\t\t\t * }, 0);\n\t\t\t *\n\t\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t\t *\n\t\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t\t *\n\t\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t\t *\n\t\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \"myCustomProp\", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \"change factor\" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t\t */\n\t\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\t\trv.plugin = plugin;\n\t\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\t\treturn rv;\n\t\t\t\t}, priority:priority});\n\t\t\t};\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\t//transform-related methods and properties\n\t\t\tCSSPlugin.useSVGTransformAttr = _isSafari || _isFirefox; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \"transform\" attribute instead (users can override this).\n\t\t\tvar _transformProps = (\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\").split(\",\"),\n\t\t\t\t_transformProp = _checkPropPrefix(\"transform\"), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t\t_transformPropCSS = _prefixCSS + \"transform\",\n\t\t\t\t_transformOriginProp = _checkPropPrefix(\"transformOrigin\"),\n\t\t\t\t_supports3D = (_checkPropPrefix(\"perspective\") !== null),\n\t\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \"auto\";\n\t\t\t\t},\n\t\t\t\t_SVGElement = window.SVGElement,\n\t\t\t\t_useSVGTransformAttr,\n\t\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\t\n\t\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\t\tvar element = _doc.createElementNS(\"http://www.w3.org/2000/svg\", type),\n\t\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\t\tp;\n\t\t\t\t\tfor (p in attributes) {\n\t\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \"$1-$2\").toLowerCase(), attributes[p]);\n\t\t\t\t\t}\n\t\t\t\t\tcontainer.appendChild(element);\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\t_docElement = _doc.documentElement,\n\t\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \"transform\" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !window.chrome),\n\t\t\t\t\t\tsvg, rect, width;\n\t\t\t\t\tif (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\t\tsvg = _createSVG(\"svg\", _docElement);\n\t\t\t\t\t\trect = _createSVG(\"rect\", svg, {width:100, height:50, x:100});\n\t\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\t\trect.style[_transformOriginProp] = \"50% 50%\";\n\t\t\t\t\t\trect.style[_transformProp] = \"scaleX(0.5)\";\n\t\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t\t}\n\t\t\t\t\treturn force;\n\t\t\t\t})(),\n\t\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\t\tif (tm) {\n\t\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (!absolute || (v = absolute.split(\" \")).length < 2) {\n\t\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\t\tlocal = _parsePosition(local).split(\" \");\n\t\t\t\t\t\tv = [(local[0].indexOf(\"%\") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t\t (local[1].indexOf(\"%\") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t\t}\n\t\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\t\ta = m[0];\n\t\t\t\t\t\tb = m[1];\n\t\t\t\t\t\tc = m[2];\n\t\t\t\t\t\td = m[3];\n\t\t\t\t\t\ttx = m[4];\n\t\t\t\t\t\tty = m[5];\n\t\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!skipRecord) {\n\t\t\t\t\t\te.setAttribute(\"data-svg-origin\", v.join(\" \"));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_canGetBBox = function(e) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t},\n\t\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\t\treturn !!(_SVGElement && e.getBBox && e.getCTM && _canGetBBox(e) && (!e.parentNode || (e.parentNode.getBBox && e.parentNode.getCTM)));\n\t\t\t\t},\n\t\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\tstyle = e.style,\n\t\t\t\t\t\tisDefault, s, m, n, dec, none;\n\t\t\t\t\tif (_transformProp) {\n\t\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\",\") : \"\";\n\t\t\t\t\t}\n\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\tif (isDefault && _transformProp && ((none = (_getComputedStyle(e).display === \"none\")) || !e.parentNode)) {\n\t\t\t\t\t\tif (none) { //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\".\n\t\t\t\t\t\t\tn = style.display;\n\t\t\t\t\t\t\tstyle.display = \"block\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!e.parentNode) {\n\t\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\t\t_docElement.appendChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\t\tif (n) {\n\t\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t\t} else if (none) {\n\t\t\t\t\t\t\t_removeProp(style, \"display\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dec) {\n\t\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (tm.svg || (e.getBBox && _isSVG(e))) {\n\t\t\t\t\t\tif (isDefault && (style[_transformProp] + \"\").indexOf(\"matrix\") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm = e.getAttribute(\"transform\");\n\t\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\t\tif (m.indexOf(\"matrix\") !== -1) { //just in case there's a \"transform\" value specified as an attribute instead of CSS style. Accept either a matrix() or simple translate() value though.\n\t\t\t\t\t\t\t\ts = m;\n\t\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t\t} else if (m.indexOf(\"translate\") !== -1) {\n\t\t\t\t\t\t\t\ts = \"matrix(1,0,0,1,\" + m.match(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/gi).join(\",\") + \")\";\n\t\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isDefault) {\n\t\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t\t}\n\t\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\t\tm = (s || \"\").match(_numExp) || [];\n\t\t\t\t\ti = m.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t\t}\n\t\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t\t * @param {!Object} t target element\n\t\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t\t */\n\t\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t\t}\n\t\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \"0 0 0\").split(\" \")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\t\n\t\t\t\t\ttm.svg = !!(t.getBBox && _isSVG(t));\n\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \"50% 50%\") + \"\", tm, t.getAttribute(\"data-svg-origin\"));\n\t\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t\t}\n\t\t\t\t\tm = _getMatrix(t);\n\t\t\t\t\tif (m !== _identity2DMatrix) {\n\t\n\t\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\t\n\t\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\ta11 = a11*cos+a12*sin;\n\t\t\t\t\t\t\t\tt2 = a21*cos+a22*sin;\n\t\t\t\t\t\t\t\ta22 = a21*-sin+a22*cos;\n\t\t\t\t\t\t\t\ta32 = a31*-sin+a32*cos;\n\t\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\tif (tm.rotationX || tm.rotationY) {\n\t\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttm.skewX = (a12 || a22) ? Math.atan2(a12, a22) * _RAD2DEG + tm.rotation : tm.skewX || 0;\n\t\t\t\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \"display\" is \"none\", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\t\tif (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\tscaleX *= -1;\n\t\t\t\t\t\t\t\t\tskewX += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\trotation += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tscaleY *= -1;\n\t\t\t\t\t\t\t\t\tskewX += (skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//DEBUG: _log(\"parsed rotation of \" + t.getAttribute(\"id\")+\": \"+(tm.rotationX)+\", \"+(tm.rotationY)+\", \"+(tm.rotation)+\", scale: \"+tm.scaleX+\", \"+tm.scaleY+\", \"+tm.scaleZ+\", position: \"+tm.x+\", \"+tm.y+\", \"+tm.z+\", perspective: \"+tm.perspective+ \", origin: \"+ tm.xOrigin+ \",\"+ tm.yOrigin);\n\t\t\t\t\tif (rec) {\n\t\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \"transform\" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\"transform\")) {\n\t\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\t\tt.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn tm;\n\t\t\t\t},\n\t\n\t\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \"filter\" to emulate the behavior of modern day browser transforms)\n\t\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\t\tfilters, val;\n\t\t\t\t\tif (!cs) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \"val\" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\t\tb = -c;\n\t\t\t\t\tc = -val;\n\t\t\t\t\tfilters = cs.filter;\n\t\t\t\t\tstyle.filter = \"\"; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\t\tclip = (cs.position !== \"absolute\"),\n\t\t\t\t\t\tm = \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + a + \", M12=\" + b + \", M21=\" + c + \", M22=\" + d,\n\t\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\t\tdx, dy;\n\t\n\t\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\t\tif (t.ox != null) {\n\t\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!clip) {\n\t\t\t\t\t\tm += \", sizingMethod='auto expand')\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\t\tm += \", Dx=\" + (dx - (dx * a + dy * b) + ox) + \", Dy=\" + (dy - (dx * c + dy * d) + oy) + \")\";\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\"DXImageTransform.Microsoft.Matrix(\") !== -1) {\n\t\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle.filter = m + \" \" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\"Dx=0, Dy=0\") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\"gradient(\" && filters.indexOf(\"Alpha\")) === -1) {\n\t\t\t\t\t\tstyle.removeAttribute(\"filter\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\t\tif (!clip) {\n\t\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\t\tval = (marg.indexOf(\"px\") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \"\")) || 0;\n\t\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t\t_safeDecimal = function(n) {\n\t\t\t\t\tvar s = (n < 0 ? -n : n) + \"\",\n\t\t\t\t\t\ta = s.split(\"e-\");\n\t\t\t\t\treturn (n < 0 ? \"-0.\" : \"0.\") + new Array(parseInt(a[1], 10) || 0).join(\"0\") + a[0].split(\".\").join(\"\");\n\t\t\t\t},\n\t\t\t\t*/\n\t\n\t\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\t\tx = t.x,\n\t\t\t\t\t\ty = t.y,\n\t\t\t\t\t\tz = t.z,\n\t\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\t\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\t\tzOrigin, min, cos, sin, t1, t2, transform, comma, zero, skew, rnd;\n\t\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\t\tif (((((v === 1 || v === 0) && force3D === \"auto\" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\t\n\t\t\t\t\t\t//2D\n\t\t\t\t\t\tif (angle || t.skewX || isSVG) {\n\t\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\t\tskew = t.skewX * _DEG2RAD;\n\t\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\t\tif (skew && t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\t\tt1 = Math.tan(skew - t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \",\" + (((a21 * rnd) | 0) / rnd) + \",\" + (((a12 * rnd) | 0) / rnd) + \",\" + (((a22 * rnd) | 0) / rnd) + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\t\tthis.t.setAttribute(\"transform\", \"matrix(\" + transform);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + transform;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + sx + \",0,0,\" + sy + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\n\t\t\t\t\t}\n\t\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (angle || t.skewX) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewX) {\n\t\t\t\t\t\t\tangle -= t.skewX * _DEG2RAD;\n\t\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\t\tif (t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\t\tt1 = Math.tan((t.skewX - t.skewY) * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta12 = -sin;\n\t\t\t\t\t\ta22 = cos;\n\t\n\t\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) translate3d(\" : \"translate3d(\") + x + \"px,\" + y + \"px,\" + z +\"px)\" + ((sx !== 1 || sy !== 1) ? \" scale(\" + sx + \",\" + sy + \")\" : \"\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t\t}\n\t\t\t\t\t// KEY  INDEX   AFFECTS\n\t\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t\t// a44  15\n\t\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\t\ta33 = 1;\n\t\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\t\tcomma = \",\";\n\t\t\t\t\tzero = \"0\";\n\t\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\t\tif (angle) {\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\ta31 = -sin;\n\t\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\t\ta33 = cos;\n\t\t\t\t\t\ta43 *= cos;\n\t\t\t\t\t\ta11 *= cos;\n\t\t\t\t\t\ta21 *= cos;\n\t\t\t\t\t}\n\t\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\t\tif (angle) {\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t}\n\t\t\t\t\tif (sz !== 1) {\n\t\t\t\t\t\ta13*=sz;\n\t\t\t\t\t\ta23*=sz;\n\t\t\t\t\t\ta33*=sz;\n\t\t\t\t\t\ta43*=sz;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy !== 1) {\n\t\t\t\t\t\ta12*=sy;\n\t\t\t\t\t\ta22*=sy;\n\t\t\t\t\t\ta32*=sy;\n\t\t\t\t\t\ta42*=sy;\n\t\t\t\t\t}\n\t\t\t\t\tif (sx !== 1) {\n\t\t\t\t\t\ta11*=sx;\n\t\t\t\t\t\ta21*=sx;\n\t\t\t\t\t\ta31*=sx;\n\t\t\t\t\t\ta41*=sx;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\t\tx = zero;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\t\ty = zero;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix3d(\" : \"matrix3d(\");\n\t\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttransform += \",0,0,0,0,1,0,\";\n\t\t\t\t\t}\n\t\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \")\";\n\t\n\t\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t\t};\n\t\n\t\t\tp = Transform.prototype;\n\t\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\t\n\t\t\t_registerComplexSpecialProp(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\t\tcssp._lastParsedTransform = vars;\n\t\t\t\tvar swapFunc;\n\t\t\t\tif (typeof(vars[parsingProp]) === \"function\") { //whatever property triggers the initial parsing might be a function-based value in which case it already got called in parse(), thus we don't want to call it again in here. The most efficient way to avoid this is to temporarily swap the value directly into the vars object, and then after we do all our parsing in this function, we'll swap it back again.\n\t\t\t\t\tswapFunc = vars[parsingProp];\n\t\t\t\t\tvars[parsingProp] = e;\n\t\t\t\t}\n\t\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\ti = _transformProps.length,\n\t\t\t\t\tv = vars,\n\t\t\t\t\tendRotations = {},\n\t\t\t\t\ttransformOriginString = \"transformOrigin\",\n\t\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\t\torig = v.transform && ((typeof(v.transform) === \"function\") ? v.transform(_index, _target) : v.transform),\n\t\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\t\tcssp._transform = m1;\n\t\t\t\tif (orig && typeof(orig) === \"string\" && _transformProp) { //for values like transform:\"rotate(60deg) scale(0.5, 0.8)\"\n\t\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\t\tcopy.display = \"block\"; //if display is \"none\", the browser often refuses to report the transform properties correctly.\n\t\t\t\t\tcopy.position = \"absolute\";\n\t\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t\t}\n\t\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t\t}\n\t\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof(v) === \"object\") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\t\tdr = v.directionalRotation;\n\t\t\t\t\tif (dr != null) {\n\t\t\t\t\t\tif (typeof(dr) === \"object\") {\n\t\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(v.x) === \"string\" && v.x.indexOf(\"%\") !== -1) {\n\t\t\t\t\t\tm2.x = 0;\n\t\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(v.y) === \"string\" && v.y.indexOf(\"%\") !== -1) {\n\t\t\t\t\t\tm2.y = 0;\n\t\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tm2.rotation = _parseAngle((\"rotation\" in v) ? v.rotation : (\"shortRotation\" in v) ? v.shortRotation + \"_short\" : (\"rotationZ\" in v) ? v.rotationZ : m1.rotation - m1.skewY, m1.rotation - m1.skewY, \"rotation\", endRotations); //see notes below about skewY for why we subtract it from rotation here\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tm2.rotationX = _parseAngle((\"rotationX\" in v) ? v.rotationX : (\"shortRotationX\" in v) ? v.shortRotationX + \"_short\" : m1.rotationX || 0, m1.rotationX, \"rotationX\", endRotations);\n\t\t\t\t\t\tm2.rotationY = _parseAngle((\"rotationY\" in v) ? v.rotationY : (\"shortRotationY\" in v) ? v.shortRotationY + \"_short\" : m1.rotationY || 0, m1.rotationY, \"rotationY\", endRotations);\n\t\t\t\t\t}\n\t\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX - m1.skewY); //see notes below about skewY and why we subtract it from skewX here\n\t\n\t\t\t\t\t//note: for performance reasons, we combine all skewing into the skewX and rotation values, ignoring skewY but we must still record it so that we can discern how much of the overall skew is attributed to skewX vs. skewY. Otherwise, if the skewY would always act relative (tween skewY to 10deg, for example, multiple times and if we always combine things into skewX, we can't remember that skewY was 10 from last time). Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of -10 degrees.\n\t\t\t\t\tif ((m2.skewY = _parseAngle(v.skewY, m1.skewY))) {\n\t\t\t\t\t\tm2.skewX += m2.skewY;\n\t\t\t\t\t\tm2.rotation += m2.skewY;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\t\thasChange = true;\n\t\t\t\t}\n\t\n\t\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\t\n\t\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t\t}\n\t\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = _transformProps[i];\n\t\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\torig = v.transformOrigin;\n\t\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\t\ty = m1.yOffset;\n\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOrigin\", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\"#wheel\", 3, {rotation:180, transformOrigin:\"50% 50%\", delay:1}); TweenLite.fromTo(\"#wheel\", 3, {scale:0.5, transformOrigin:\"50% 50%\"}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOrigin\", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOffset\", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOffset\", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t\t}\n\t\t\t\t\torig = _useSVGTransformAttr ? null : \"0px 0px\"; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t\t}\n\t\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \"transformOrigin\" in this particular tween (maybe they did it via css directly).\n\t\t\t\t\tif (_transformProp) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\t\torig = (orig || _getStyle(t, p, _cs, false, \"50% 50%\")) + \"\"; //cast as string to avoid errors\n\t\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\t\torig = orig.split(\" \");\n\t\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === \"0px\")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \" \" + (orig[1] || \"50%\") + \" 0px\"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\t\tpt = new CSSPropTween(m1, \"zOrigin\", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_parsePosition(orig + \"\", m1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasChange) {\n\t\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t\t}\n\t\t\t\tif (swapFunc) {\n\t\t\t\t\tvars[parsingProp] = swapFunc;\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}, prefix:true});\n\t\n\t\t\t_registerComplexSpecialProp(\"boxShadow\", {defaultValue:\"0px 0px 0px 0px #999\", prefix:true, color:true, multi:true, keyword:\"inset\"});\n\t\n\t\t\t_registerComplexSpecialProp(\"borderRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\te = this.format(e);\n\t\t\t\tvar props = [\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\t\th = parseFloat(t.offsetHeight);\n\t\t\t\tea1 = e.split(\" \");\n\t\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\t\tif (this.p.indexOf(\"border\")) { //older browsers used a prefix\n\t\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t\t}\n\t\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \"0px\");\n\t\t\t\t\tif (bs.indexOf(\" \") !== -1) {\n\t\t\t\t\t\tbs2 = bs.split(\" \");\n\t\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t\t}\n\t\t\t\t\tes = es2 = ea1[i];\n\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\tbsfx = bs.substr((bn + \"\").length);\n\t\t\t\t\trel = (es.charAt(1) === \"=\");\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\ten = parseInt(es.charAt(0)+\"1\", 10);\n\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\tesfx = es.substr((en + \"\").length - (en < 0 ? 1 : 0)) || \"\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\tesfx = es.substr((en + \"\").length);\n\t\t\t\t\t}\n\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t\t}\n\t\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\t\thn = _convertToPixels(t, \"borderLeft\", bn, bsfx); //horizontal number (we use a bogus \"borderLeft\" property just because the _convertToPixels() method searches for the keywords \"Left\", \"Right\", \"Top\", and \"Bottom\" to determine of it's a horizontal or vertical property, and we need \"border\" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\t\tvn = _convertToPixels(t, \"borderTop\", bn, bsfx); //vertical number\n\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\tbs = (hn / w * 100) + \"%\";\n\t\t\t\t\t\t\tbs2 = (vn / h * 100) + \"%\";\n\t\t\t\t\t\t} else if (esfx === \"em\") {\n\t\t\t\t\t\t\tem = _convertToPixels(t, \"borderLeft\", 1, \"em\");\n\t\t\t\t\t\t\tbs = (hn / em) + \"em\";\n\t\t\t\t\t\t\tbs2 = (vn / em) + \"em\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbs = hn + \"px\";\n\t\t\t\t\t\t\tbs2 = vn + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = _parseComplex(style, props[i], bs + \" \" + bs2, es + \" \" + es2, false, \"0px\", pt);\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px 0px 0px\", false, true)});\n\t\t\t_registerComplexSpecialProp(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \"0px 0px\")), this.format(e), false, \"0px\", pt);\n\t\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px\", false, true)});\n\t\t\t_registerComplexSpecialProp(\"backgroundPosition\", {defaultValue:\"0 0\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar bp = \"background-position\",\n\t\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \"-x\") + \" \" + cs.getPropertyValue(bp + \"-y\") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \" \" + t.currentStyle.backgroundPositionY) || \"0 0\"), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\t\tes = this.format(e),\n\t\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\t\tif ((bs.indexOf(\"%\") !== -1) !== (es.indexOf(\"%\") !== -1) && es.split(\",\").length < 2) {\n\t\t\t\t\tsrc = _getStyle(t, \"backgroundImage\").replace(_urlExp, \"\");\n\t\t\t\t\tif (src && src !== \"none\") {\n\t\t\t\t\t\tba = bs.split(\" \");\n\t\t\t\t\t\tea = es.split(\" \");\n\t\t\t\t\t\t_tempImg.setAttribute(\"src\", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\t\ti = 2;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\t\tpct = (bs.indexOf(\"%\") !== -1);\n\t\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\"%\") !== -1)) {\n\t\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \"px\" : (parseFloat(bs) / overlap * 100) + \"%\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbs = ba.join(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t\t}, formatter:_parsePosition});\n\t\t\t_registerComplexSpecialProp(\"backgroundSize\", {defaultValue:\"0 0\", formatter:function(v) {\n\t\t\t\tv += \"\"; //ensure it's a string\n\t\t\t\treturn _parsePosition(v.indexOf(\" \") === -1 ? v + \" \" + v : v); //if set to something like \"100% 100%\", Safari typically reports the computed style as just \"100%\" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \"100% 0\" (wrong).\n\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"perspective\", {defaultValue:\"0px\", prefix:true});\n\t\t\t_registerComplexSpecialProp(\"perspectiveOrigin\", {defaultValue:\"50% 50%\", prefix:true});\n\t\t\t_registerComplexSpecialProp(\"transformStyle\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"backfaceVisibility\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"userSelect\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"margin\", {parser:_getEdgeParser(\"marginTop,marginRight,marginBottom,marginLeft\")});\n\t\t\t_registerComplexSpecialProp(\"padding\", {parser:_getEdgeParser(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")});\n\t\t\t_registerComplexSpecialProp(\"clip\", {defaultValue:\"rect(0px,0px,0px,0px)\", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\t\tvar b, cs, delim;\n\t\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \"clip\" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\t\tcs = t.currentStyle;\n\t\t\t\t\tdelim = _ieVers < 8 ? \" \" : \",\";\n\t\t\t\t\tb = \"rect(\" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \")\";\n\t\t\t\t\te = this.format(e).split(\",\").join(delim);\n\t\t\t\t} else {\n\t\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\t\te = this.format(e);\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"textShadow\", {defaultValue:\"0px 0px 0px #999\", color:true, multi:true});\n\t\t\t_registerComplexSpecialProp(\"autoRound,strictUnits\", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t\t_registerComplexSpecialProp(\"border\", {defaultValue:\"0px solid #000\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar bw = _getStyle(t, \"borderTopWidth\", _cs, false, \"0px\"),\n\t\t\t\t\tend = this.format(e).split(\" \"),\n\t\t\t\t\tesfx = end[0].replace(_suffixExp, \"\");\n\t\t\t\tif (esfx !== \"px\") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \"borderTopWidth\", 1, esfx)) + esfx;\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, this.format(bw + \" \" + _getStyle(t, \"borderTopStyle\", _cs, false, \"solid\") + \" \" + _getStyle(t, \"borderTopColor\", _cs, false, \"#000\")), end.join(\" \"), pt, plugin);\n\t\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\t\tvar a = v.split(\" \");\n\t\t\t\t\treturn a[0] + \" \" + (a[1] || \"solid\") + \" \" + (v.match(_colorExp) || [\"#000\"])[0];\n\t\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"borderWidth\", {parser:_getEdgeParser(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t\t_registerComplexSpecialProp(\"float,cssFloat,styleFloat\", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar s = t.style,\n\t\t\t\t\tprop = (\"cssFloat\" in s) ? \"cssFloat\" : \"styleFloat\";\n\t\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t\t}});\n\t\n\t\t\t//opacity-related\n\t\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \"filter\") || \"\",\n\t\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\t\tskip;\n\t\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\t\tif (filters.indexOf(\"atrix(\") === -1 && filters.indexOf(\"radient(\") === -1 && filters.indexOf(\"oader(\") === -1) {\n\t\t\t\t\t\t\tt.removeAttribute(\"filter\");\n\t\t\t\t\t\t\tskip = (!_getStyle(this.data, \"filter\")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \"\");\n\t\t\t\t\t\t\tskip = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!skip) {\n\t\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\t\tt.filter = filters = filters || (\"alpha(opacity=\" + val + \")\"); //works around bug in IE7/8 that prevents changes to \"visibility\" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (filters.indexOf(\"pacity\") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \"O\" to avoid case-sensitivity issues\n\t\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \"visibility\" changes (this.xn1 is 1 if this tween is an \"autoAlpha\" tween)\n\t\t\t\t\t\t\t\tt.filter = filters + \" alpha(opacity=\" + val + \")\"; //we round the value because otherwise, bugs in IE7/8 can prevent \"visibility\" changes from being applied properly.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \"opacity=\" + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"opacity,alpha,autoAlpha\", {defaultValue:\"1\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar b = parseFloat(_getStyle(t, \"opacity\", _cs, false, \"1\")),\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tisAutoAlpha = (p === \"autoAlpha\");\n\t\t\t\tif (typeof(e) === \"string\" && e.charAt(1) === \"=\") {\n\t\t\t\t\te = ((e.charAt(0) === \"-\") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t\t}\n\t\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \"visibility\", _cs) === \"hidden\" && e !== 0) { //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\t\tb = 0;\n\t\t\t\t}\n\t\t\t\tif (_supportsOpacity) {\n\t\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b, e - b, pt);\n\t\t\t\t} else {\n\t\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b * 100, (e - b) * 100, pt);\n\t\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \"visibility\" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t\tpt.type = 2;\n\t\t\t\t\tpt.b = \"alpha(opacity=\" + pt.s + \")\";\n\t\t\t\t\tpt.e = \"alpha(opacity=\" + (pt.s + pt.c) + \")\";\n\t\t\t\t\tpt.data = t;\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t\t}\n\t\t\t\tif (isAutoAlpha) { //we have to create the \"visibility\" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\t\tpt = new CSSPropTween(style, \"visibility\", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \"inherit\" : \"hidden\"), ((e === 0) ? \"hidden\" : \"inherit\"));\n\t\t\t\t\tpt.xs0 = \"inherit\";\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\n\t\t\tvar _removeProp = function(s, p) {\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\t\tif (p.substr(0,2) === \"ms\" || p.substr(0,6) === \"webkit\") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n\t\t\t\t\t\t\t\tp = \"-\" + p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t\t} else { //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n\t\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\t\tthis.t.setAttribute(\"class\", (v === 0) ? this.b : this.e);\n\t\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.t.getAttribute(\"class\") !== this.e) {\n\t\t\t\t\t\tthis.t.setAttribute(\"class\", this.e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"className\", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar b = t.getAttribute(\"class\") || \"\", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\"class\") and setAttribute(\"class\", value\") is more reliable.\n\t\t\t\t\tcssText = t.style.cssText,\n\t\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\t\tpt.pr = -11;\n\t\t\t\t_hasPriority = true;\n\t\t\t\tpt.b = b;\n\t\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\t\tcnpt = t._gsClassPT;\n\t\t\t\tif (cnpt) {\n\t\t\t\t\tcnptLookup = {};\n\t\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tcnpt.setRatio(1);\n\t\t\t\t}\n\t\t\t\tt._gsClassPT = pt;\n\t\t\t\tpt.e = (e.charAt(1) !== \"=\") ? e : b.replace(new RegExp(\"(?:\\\\s|^)\" + e.substr(2) + \"(?![\\\\w-])\"), \"\") + ((e.charAt(0) === \"+\") ? \" \" + e.substr(2) : \"\");\n\t\t\t\tt.setAttribute(\"class\", pt.e);\n\t\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\t\tt.setAttribute(\"class\", b);\n\t\t\t\tpt.data = difData.firstMPT;\n\t\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \"className\" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\n\t\t\tvar _setClearPropsRatio = function(v) {\n\t\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \"isFromStart\") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\t\tvar s = this.t.style,\n\t\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\t\tif (this.e === \"all\") {\n\t\t\t\t\t\ts.cssText = \"\";\n\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = this.e.split(\" \").join(\"\").split(\",\");\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tp = (p === \"transformOrigin\") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \"scaleX\" might be \"-webkit-transform\" or \"boxShadow\" might be \"-moz-box-shadow\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (clearTransform) {\n\t\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\t\tif (transform) {\n\t\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\t\tthis.t.removeAttribute(\"data-svg-origin\");\n\t\t\t\t\t\t\t\tthis.t.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"clearProps\", {parser:function(t, e, p, cssp, pt) {\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\t\tpt.e = e;\n\t\t\t\tpt.pr = -10;\n\t\t\t\tpt.data = cssp._tween;\n\t\t\t\t_hasPriority = true;\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\t\tp = \"bezier,throwProps,physicsProps,physics2D\".split(\",\");\n\t\t\ti = p.length;\n\t\t\twhile (i--) {\n\t\t\t\t_registerPluginProp(p[i]);\n\t\t\t}\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\tp = CSSPlugin.prototype;\n\t\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\t\n\t\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthis._target = _target = target;\n\t\t\t\tthis._tween = tween;\n\t\t\t\tthis._vars = vars;\n\t\t\t\t_index = index;\n\t\t\t\t_autoRound = vars.autoRound;\n\t\t\t\t_hasPriority = false;\n\t\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t\t_cs = _getComputedStyle(target, \"\");\n\t\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\t\tvar style = target.style,\n\t\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\t\tif (_reqSafariFix) if (style.zIndex === \"\") {\n\t\t\t\t\tv = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\tif (v === \"auto\" || v === \"\") {\n\t\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \"left\" or \"top\" instead of transforms like \"x\" and \"y\") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (typeof(vars) === \"string\") {\n\t\t\t\t\tfirst = style.cssText;\n\t\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\t\tstyle.cssText = first + \";\" + vars;\n\t\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t\t}\n\t\t\t\t\tvars = v;\n\t\t\t\t\tstyle.cssText = first;\n\t\t\t\t}\n\t\n\t\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\"myClass\", scale:0.5, left:20} would work.\n\t\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \"className\", this, null, null, vars);\n\t\t\t\t} else {\n\t\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t\t}\n\t\n\t\t\t\tif (this._transformType) {\n\t\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\t\tif (!_transformProp) {\n\t\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\t\tif (style.zIndex === \"\") {\n\t\t\t\t\t\t\tzIndex = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\t\t\tif (zIndex === \"auto\" || zIndex === \"\") {\n\t\t\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \"top\" and \"left\" that are made on the same frame/render as a transform update.\n\t\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\t\tthis._addLazySet(style, \"WebkitBackfaceVisibility\", this._vars.WebkitBackfaceVisibility || (threeD ? \"visible\" : \"hidden\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt2 = pt;\n\t\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\ttpt = new CSSPropTween(target, \"transform\", 0, 0, null, 2);\n\t\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\t\ttpt.tween = tween;\n\t\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \"transform\" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t\t}\n\t\n\t\t\t\tif (_hasPriority) {\n\t\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next;\n\t\t\t\t\t\tpt2 = first;\n\t\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = first;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\n\t\n\t\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\t\tvar style = target.style,\n\t\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\t\tif (typeof(es) === \"function\") {\n\t\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\t\tif (sp) {\n\t\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = _getStyle(target, p, _cs) + \"\";\n\t\t\t\t\t\tisStr = (typeof(es) === \"string\");\n\t\t\t\t\t\tif (p === \"color\" || p === \"fill\" || p === \"stroke\" || p.indexOf(\"Color\") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\t\tes = ((es.length > 3) ? \"rgba(\" : \"rgb(\") + es.join(\",\") + \")\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \"transparent\", pt, 0, plugin);\n\t\n\t\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \"\").length) : \"\"; //remember, bs could be non-numeric like \"normal\" for fontWeight, so we should default to a blank suffix in that case.\n\t\n\t\t\t\t\t\t\tif (bs === \"\" || bs === \"auto\") {\n\t\t\t\t\t\t\t\tif (p === \"width\" || p === \"height\") {\n\t\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t\t} else if (p === \"left\" || p === \"top\") {\n\t\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbn = (p !== \"opacity\") ? 0 : 1;\n\t\t\t\t\t\t\t\t\tbsfx = \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\trel = (isStr && es.charAt(1) === \"=\");\n\t\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \"1\", 10);\n\t\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \"\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \"\") : \"\";\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\t\n\t\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \"\") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \"%\") / 100;\n\t\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \"px\" values instead of allowing \"%\" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\t\tbs = bn + \"%\";\n\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t} else if (esfx === \"em\" || esfx === \"rem\" || esfx === \"vw\" || esfx === \"vh\") {\n\t\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\t\n\t\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t\t} else if (esfx !== \"px\") {\n\t\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\t\tesfx = \"px\"; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \"px\" || p === \"zIndex\")), 0, bs, es);\n\t\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"tween \"+p+\" from \"+pt.b+\" (\"+bn+esfx+\") to \"+pt.e+\" with suffix: \"+pt.xs0);\n\t\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \"\" === \"NaN\" || es == null)) {\n\t\t\t\t\t\t\t\t_log(\"invalid \" + p + \" tween value: \" + vars[p]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\t\tpt.xs0 = (es === \"none\" && (p === \"display\" || p.indexOf(\"Style\") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \"display\" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"non-tweening value \"+p+\": \"+pt.xs0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\n\t\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\t\tp.setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, str, i;\n\t\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \"position\" or \"float\" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\t\tval = Math.round(pt.s + pt.c);\n\t\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\t\n\t\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\n\t\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t\t} else {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t\t *\n\t\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t\t */\n\t\t\tp._enableTransforms = function(threeD) {\n\t\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t\t};\n\t\n\t\t\tvar lazySet = function(v) {\n\t\t\t\tthis.t[this.p] = this.e;\n\t\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t\t};\n\t\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\t\tp._addLazySet = function(t, p, v) {\n\t\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\t\tpt.e = v;\n\t\t\t\tpt.setRatio = lazySet;\n\t\t\t\tpt.data = this;\n\t\t\t};\n\t\n\t\t\t/** @private **/\n\t\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\t\tif (pt) {\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tnext._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t\t}\n\t\t\t\t\tif (prev) {\n\t\t\t\t\t\tprev._next = pt;\n\t\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt._next = next;\n\t\t\t\t\tpt._prev = prev;\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\t\tp._mod = function(lookup) {\n\t\t\t\tvar pt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (typeof(lookup[pt.p]) === \"function\" && lookup[pt.p] === Math.round) { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \"r\" as an indicator that the value should be rounded internally..\n\t\t\t\t\t\tpt.r = 1;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \"visibility\" property.\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar copy = lookup,\n\t\t\t\t\tpt, p, xfirst;\n\t\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\t\tcopy = {};\n\t\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t\t}\n\t\t\t\t\tcopy.opacity = 1;\n\t\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \"xfirst\".\n\t\t\t\t\txfirst = pt.xfirst;\n\t\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t\t}\n\t\t\t\t\tthis._classNamePT = null;\n\t\t\t\t}\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\t\tp = pt.plugin;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t\t};\n\t\n\t\n\t\n\t\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\t\tvar children, i, child, type;\n\t\t\t\t\tif (e.slice) {\n\t\t\t\t\t\ti = e.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tchildren = e.childNodes;\n\t\t\t\t\ti = children.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tchild = children[i];\n\t\t\t\t\t\ttype = child.type;\n\t\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t\t * and it would create other problems. For example:\n\t\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t\t *\n\t\t\t * @param {Object} target object to be tweened\n\t\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t\t * @param {Object} Object containing the end values, like {className:\"newClass\", ease:Linear.easeNone}\n\t\t\t * @return {Array} An array of TweenLite instances\n\t\t\t */\n\t\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\t\tresults = [tween],\n\t\t\t\t\tb = [],\n\t\t\t\t\te = [],\n\t\t\t\t\ttargets = [],\n\t\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\t\ti, difs, p, from;\n\t\t\t\ttarget = tween._targets || tween.target;\n\t\t\t\t_getChildStyles(target, b, targets);\n\t\t\t\ttween.render(duration, true, true);\n\t\t\t\t_getChildStyles(target, e);\n\t\t\t\ttween.render(0, true, true);\n\t\t\t\ttween._enabled(true);\n\t\t\t\ti = targets.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrom = {};\n\t\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t};\n\t\n\t\t\tTweenPlugin.activate([CSSPlugin]);\n\t\t\treturn CSSPlugin;\n\t\n\t\t}, true);\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * RoundPropsPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t(function() {\n\t\n\t\t\tvar RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \"roundProps\",\n\t\t\t\t\tversion: \"1.6.0\",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tAPI: 2,\n\t\n\t\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\n\t\t\t\t}),\n\t\t\t\t_roundLinkedList = function(node) {\n\t\t\t\t\twhile (node) {\n\t\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\t\tnode.m = Math.round;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = node._next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tp = RoundPropsPlugin.prototype;\n\t\n\t\t\tp._onInitAllProps = function() {\n\t\t\t\tvar tween = this._tween,\n\t\t\t\t\trp = (tween.vars.roundProps.join) ? tween.vars.roundProps : tween.vars.roundProps.split(\",\"),\n\t\t\t\t\ti = rp.length,\n\t\t\t\t\tlookup = {},\n\t\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\t\tprop, pt, next;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t\t}\n\t\t\t\ti = rp.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tprop = rp[i];\n\t\t\t\t\tpt = tween._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t\t} else if (pt.n === prop) {\n\t\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._add(pt.t, prop, pt.s, pt.c);\n\t\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t\ttween._propLookup[prop] = rpt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp._add = function(target, p, s, c) {\n\t\t\t\tthis._addTween(target, p, s, s + c, p, Math.round);\n\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t};\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * AttrPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\n\t\t(function() {\n\t\n\t\t\t_gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"attr\",\n\t\t\t\tAPI: 2,\n\t\t\t\tversion: \"0.6.0\",\n\t\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\t\tvar p, end;\n\t\t\t\t\tif (typeof(target.setAttribute) !== \"function\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in value) {\n\t\t\t\t\t\tend = value[p];\n\t\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._addTween(target, \"setAttribute\", target.getAttribute(p) + \"\", end + \"\", p, false, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\n\t\t\t});\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * DirectionalRotationPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine.plugin({\n\t\t\tpropName: \"directionalRotation\",\n\t\t\tversion: \"0.3.0\",\n\t\t\tAPI: 2,\n\t\n\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\t\tvalue = {rotation:value};\n\t\t\t\t}\n\t\t\t\tthis.finals = {};\n\t\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tp, v, start, end, dif, split;\n\t\t\t\tfor (p in value) {\n\t\t\t\t\tif (p !== \"useRadians\") {\n\t\t\t\t\t\tend = value[p];\n\t\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsplit = (end + \"\").split(\"_\");\n\t\t\t\t\t\tv = split[0];\n\t\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \"function\") ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]() );\n\t\t\t\t\t\tend = this.finals[p] = (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? start + parseInt(v.charAt(0) + \"1\", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\t\tdif = end - start;\n\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\tv = split.join(\"_\");\n\t\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\n\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\tset: function(ratio) {\n\t\t\t\tvar pt;\n\t\t\t\tif (ratio !== 1) {\n\t\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t\t} else {\n\t\t\t\t\tpt = this._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t})._autoCSS = true;\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * EasePack\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"easing.Back\", [\"easing.Ease\"], function(Ease) {\n\t\t\t\n\t\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\t\tgs = w.com.greensock,\n\t\t\t\t_2PI = Math.PI * 2,\n\t\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t\t_class = gs._class,\n\t\t\t\t_create = function(n, f) {\n\t\t\t\t\tvar C = _class(\"easing.\" + n, function(){}, true),\n\t\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\t\tp.constructor = C;\n\t\t\t\t\tp.getRatio = f;\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\t\tvar C = _class(\"easing.\"+name, {\n\t\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t\t}, true);\n\t\t\t\t\t_easeReg(C, name);\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\t\tthis.t = time;\n\t\t\t\t\tthis.v = value;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tthis.next = next;\n\t\t\t\t\t\tnext.prev = this;\n\t\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t//Back\n\t\t\t\t_createBack = function(n, f) {\n\t\t\t\t\tvar C = _class(\"easing.\" + n, function(overshoot) {\n\t\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t\t}, true),\n\t\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\t\tp.constructor = C;\n\t\t\t\t\tp.getRatio = f;\n\t\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t\t};\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\n\t\t\t\tBack = _wrap(\"Back\",\n\t\t\t\t\t_createBack(\"BackOut\", function(p) {\n\t\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t\t}),\n\t\t\t\t\t_createBack(\"BackIn\", function(p) {\n\t\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t\t}),\n\t\t\t\t\t_createBack(\"BackInOut\", function(p) {\n\t\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t\t})\n\t\t\t\t),\n\t\n\t\n\t\t\t\t//SlowMo\n\t\t\t\tSlowMo = _class(\"easing.SlowMo\", function(linearRatio, power, yoyoMode) {\n\t\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t\t}, true),\n\t\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\t\tSteppedEase, RoughEase, _createElastic;\n\t\n\t\t\tp.constructor = SlowMo;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\t\tif (p < this._p1) {\n\t\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t\t} else if (p > this._p3) {\n\t\t\t\t\treturn this._calcEnd ? 1 - (p = (p - this._p3) / this._p1) * p : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p);\n\t\t\t\t}\n\t\t\t\treturn this._calcEnd ? 1 : r;\n\t\t\t};\n\t\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\t\n\t\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t\t};\n\t\n\t\n\t\t\t//SteppedEase\n\t\t\tSteppedEase = _class(\"easing.SteppedEase\", function(steps) {\n\t\t\t\t\tsteps = steps || 1;\n\t\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\t\tthis._p2 = steps + 1;\n\t\t\t\t}, true);\n\t\t\tp = SteppedEase.prototype = new Ease();\n\t\t\tp.constructor = SteppedEase;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tif (p < 0) {\n\t\t\t\t\tp = 0;\n\t\t\t\t} else if (p >= 1) {\n\t\t\t\t\tp = 0.999999999;\n\t\t\t\t}\n\t\t\t\treturn ((this._p2 * p) >> 0) * this._p1;\n\t\t\t};\n\t\t\tp.config = SteppedEase.config = function(steps) {\n\t\t\t\treturn new SteppedEase(steps);\n\t\t\t};\n\t\n\t\n\t\t\t//RoughEase\n\t\t\tRoughEase = _class(\"easing.RoughEase\", function(vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tvar taper = vars.taper || \"none\",\n\t\t\t\t\ta = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\t\ti = points,\n\t\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\t\tstrength = (typeof(vars.strength) === \"number\") ? vars.strength * 0.4 : 0.4,\n\t\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\t\tif (taper === \"none\") {\n\t\t\t\t\t\tbump = strength;\n\t\t\t\t\t} else if (taper === \"out\") {\n\t\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t\t} else if (taper === \"in\") {\n\t\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t\t} else if (x < 0.5) {  //\"both\" (start)\n\t\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t\t} else {\t\t\t\t//\"both\" (end)\n\t\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t\t}\n\t\t\t\t\tif (randomize) {\n\t\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t\t} else if (i % 2) {\n\t\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t\t}\n\t\t\t\t\tif (clamp) {\n\t\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\t\ty = 1;\n\t\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t\t}\n\t\t\t\ta.sort(function(a, b) {\n\t\t\t\t\treturn a.x - b.x;\n\t\t\t\t});\n\t\n\t\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\t\ti = points;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tobj = a[i];\n\t\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t\t}\n\t\n\t\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t\t}, true);\n\t\t\tp = RoughEase.prototype = new Ease();\n\t\t\tp.constructor = RoughEase;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tvar pnt = this._prev;\n\t\t\t\tif (p > pnt.t) {\n\t\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t\t}\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t} else {\n\t\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._prev = pnt;\n\t\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t\t};\n\t\t\tp.config = function(vars) {\n\t\t\t\treturn new RoughEase(vars);\n\t\t\t};\n\t\t\tRoughEase.ease = new RoughEase();\n\t\n\t\n\t\t\t//Bounce\n\t\t\t_wrap(\"Bounce\",\n\t\t\t\t_create(\"BounceOut\", function(p) {\n\t\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t\t}\n\t\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}),\n\t\t\t\t_create(\"BounceIn\", function(p) {\n\t\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t\t}),\n\t\t\t\t_create(\"BounceInOut\", function(p) {\n\t\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\t\tif (invert) {\n\t\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t\t}\n\t\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//CIRC\n\t\t\t_wrap(\"Circ\",\n\t\t\t\t_create(\"CircOut\", function(p) {\n\t\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t\t}),\n\t\t\t\t_create(\"CircIn\", function(p) {\n\t\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t\t}),\n\t\t\t\t_create(\"CircInOut\", function(p) {\n\t\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//Elastic\n\t\t\t_createElastic = function(n, f, def) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(amplitude, period) {\n\t\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t\t}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(amplitude, period) {\n\t\t\t\t\treturn new C(amplitude, period);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t};\n\t\t\t_wrap(\"Elastic\",\n\t\t\t\t_createElastic(\"ElasticOut\", function(p) {\n\t\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t\t}, 0.3),\n\t\t\t\t_createElastic(\"ElasticIn\", function(p) {\n\t\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t\t}, 0.3),\n\t\t\t\t_createElastic(\"ElasticInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t\t}, 0.45)\n\t\t\t);\n\t\n\t\n\t\t\t//Expo\n\t\t\t_wrap(\"Expo\",\n\t\t\t\t_create(\"ExpoOut\", function(p) {\n\t\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t\t}),\n\t\t\t\t_create(\"ExpoIn\", function(p) {\n\t\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t\t}),\n\t\t\t\t_create(\"ExpoInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//Sine\n\t\t\t_wrap(\"Sine\",\n\t\t\t\t_create(\"SineOut\", function(p) {\n\t\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t\t}),\n\t\t\t\t_create(\"SineIn\", function(p) {\n\t\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t\t}),\n\t\t\t\t_create(\"SineInOut\", function(p) {\n\t\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t\t})\n\t\t\t);\n\t\n\t\t\t_class(\"easing.EaseLookup\", {\n\t\t\t\t\tfind:function(s) {\n\t\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\n\t\t\t//register the non-standard eases\n\t\t\t_easeReg(w.SlowMo, \"SlowMo\", \"ease,\");\n\t\t\t_easeReg(RoughEase, \"RoughEase\", \"ease,\");\n\t\t\t_easeReg(SteppedEase, \"SteppedEase\", \"ease,\");\n\t\n\t\t\treturn Back;\n\t\t\t\n\t\t}, true);\n\t\n\t\n\t});\n\t\n\tif (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case TweenLite was already loaded separately.\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Base classes like TweenLite, SimpleTimeline, Ease, Ticker, etc.\n\t * ----------------------------------------------------------------\n\t */\n\t(function(window, moduleName) {\n\t\n\t\t\t\"use strict\";\n\t\t\tvar _exports = {},\n\t\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\t\tif (_globals.TweenLite) {\n\t\t\t\treturn; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t\t}\n\t\t\tvar _namespace = function(ns) {\n\t\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\t\tp = _globals, i;\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t},\n\t\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\t_emptyFunc = function() {},\n\t\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\t\tarray = toString.call([]);\n\t\t\t\t\treturn function(obj) {\n\t\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t\t};\n\t\t\t\t}()),\n\t\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t\t_defLookup = {},\n\t\n\t\t\t\t/**\n\t\t\t\t * @constructor\n\t\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t\t *\n\t\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t\t * sandbox the banner one like:\n\t\t\t\t *\n\t\t\t\t * <script>\n\t\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t\t * </script>\n\t\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t\t * <script>\n\t\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t\t * </script>\n\t\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t\t * <script>\n\t\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t\t * </script>\n\t\t\t\t *\n\t\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t\t */\n\t\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t\t_defLookup[ns] = this;\n\t\t\t\t\tthis.gsClass = null;\n\t\t\t\t\tthis.func = func;\n\t\t\t\t\tvar _classes = [];\n\t\t\t\t\tthis.check = function(init) {\n\t\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\t\tcur, a, n, cl, hasModule;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\t\n\t\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t\thasModule = (typeof(module) !== \"undefined\" && module.exports);\n\t\t\t\t\t\t\t\tif (!hasModule && \"function\" === \"function\" && __webpack_require__(18)){ //AMD\n\t\t\t\t\t\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return cl; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t\t\t\t\t\t\t} else if (hasModule){ //node\n\t\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tthis.check(true);\n\t\t\t\t},\n\t\n\t\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t\t},\n\t\n\t\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\t\tfunc = func || function() {};\n\t\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\t\treturn func;\n\t\t\t\t};\n\t\n\t\t\t_gsDefine.globals = _globals;\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Ease\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\t\t_blankArray = [],\n\t\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\t\tthis._func = func;\n\t\t\t\t\tthis._type = type || 0;\n\t\t\t\t\tthis._power = power || 0;\n\t\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t\t}, true),\n\t\t\t\t_easeMap = Ease.map = {},\n\t\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\t\ti = na.length,\n\t\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\t\te, name, j, type;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tname = na[i];\n\t\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\t\tj = ta.length;\n\t\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\tp = Ease.prototype;\n\t\t\tp._calcEnd = false;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tif (this._func) {\n\t\t\t\t\tthis._params[0] = p;\n\t\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t\t}\n\t\t\t\tvar t = this._type,\n\t\t\t\t\tpw = this._power,\n\t\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\t\tif (pw === 1) {\n\t\t\t\t\tr *= r;\n\t\t\t\t} else if (pw === 2) {\n\t\t\t\t\tr *= r * r;\n\t\t\t\t} else if (pw === 3) {\n\t\t\t\t\tr *= r * r * r;\n\t\t\t\t} else if (pw === 4) {\n\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t}\n\t\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t};\n\t\n\t\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t\t}\n\t\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * EventDispatcher\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\t\tthis._listeners = {};\n\t\t\t\tthis._eventTarget = target || this;\n\t\t\t});\n\t\t\tp = EventDispatcher.prototype;\n\t\n\t\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\t\tpriority = priority || 0;\n\t\t\t\tvar list = this._listeners[type],\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlistener, i;\n\t\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (list == null) {\n\t\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t\t}\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\t\tindex = i + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t\t};\n\t\n\t\t\tp.removeEventListener = function(type, callback) {\n\t\t\t\tvar list = this._listeners[type], i;\n\t\t\t\tif (list) {\n\t\t\t\t\ti = list.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.dispatchEvent = function(type) {\n\t\t\t\tvar list = this._listeners[type],\n\t\t\t\t\ti, t, listener;\n\t\t\t\tif (list) {\n\t\t\t\t\ti = list.length;\n\t\t\t\t\tif (i > 1) {\n\t\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t\t}\n\t\t\t\t\tt = this._eventTarget;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tlistener = list[i];\n\t\t\t\t\t\tif (listener) {\n\t\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Ticker\n\t * ----------------------------------------------------------------\n\t */\n\t \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t\t_lastUpdate = _getTime();\n\t\n\t\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\t\ti = a.length;\n\t\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t\t}\n\t\n\t\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\t\tvar _self = this,\n\t\t\t\t\t_startTime = _getTime(),\n\t\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t\t_lagThreshold = 500,\n\t\t\t\t\t_adjustedLag = 33,\n\t\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t\t_tick = function(manual) {\n\t\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\n\t\t\t\tEventDispatcher.call(_self);\n\t\t\t\t_self.time = _self.frame = 0;\n\t\t\t\t_self.tick = function() {\n\t\t\t\t\t_tick(true);\n\t\t\t\t};\n\t\n\t\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t\t};\n\t\n\t\t\t\t_self.sleep = function() {\n\t\t\t\t\tif (_id == null) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t\t}\n\t\t\t\t\t_req = _emptyFunc;\n\t\t\t\t\t_id = null;\n\t\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t\t_tickerActive = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t_self.wake = function(seamless) {\n\t\t\t\t\tif (_id !== null) {\n\t\t\t\t\t\t_self.sleep();\n\t\t\t\t\t} else if (seamless) {\n\t\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t\t}\n\t\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t\t_tickerActive = true;\n\t\t\t\t\t}\n\t\t\t\t\t_tick(2);\n\t\t\t\t};\n\t\n\t\t\t\t_self.fps = function(value) {\n\t\t\t\t\tif (!arguments.length) {\n\t\t\t\t\t\treturn _fps;\n\t\t\t\t\t}\n\t\t\t\t\t_fps = value;\n\t\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t\t_self.wake();\n\t\t\t\t};\n\t\n\t\t\t\t_self.useRAF = function(value) {\n\t\t\t\t\tif (!arguments.length) {\n\t\t\t\t\t\treturn _useRAF;\n\t\t\t\t\t}\n\t\t\t\t\t_self.sleep();\n\t\t\t\t\t_useRAF = value;\n\t\t\t\t\t_self.fps(_fps);\n\t\t\t\t};\n\t\t\t\t_self.fps(fps);\n\t\n\t\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && document.visibilityState !== \"hidden\") {\n\t\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t\t}\n\t\t\t\t}, 1500);\n\t\t\t});\n\t\n\t\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\t\tp.constructor = gs.Ticker;\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Animation\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\t\tthis._timeScale = 1;\n\t\t\t\t\tthis._active = (vars.immediateRender === true);\n\t\t\t\t\tthis.data = vars.data;\n\t\t\t\t\tthis._reversed = (vars.reversed === true);\n\t\n\t\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\t\ttl.add(this, tl._time);\n\t\n\t\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\t\tthis.paused(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\t\tp = Animation.prototype;\n\t\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\t\tp._totalTime = p._time = 0;\n\t\t\tp._rawPrevTime = -1;\n\t\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\t\tp._paused = false;\n\t\n\t\n\t\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\t\tvar _checkTimeout = function() {\n\t\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000) {\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\t\t\t\tsetTimeout(_checkTimeout, 2000);\n\t\t\t\t};\n\t\t\t_checkTimeout();\n\t\n\t\n\t\t\tp.play = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.reversed(false).paused(false);\n\t\t\t};\n\t\n\t\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\t\tif (atTime != null) {\n\t\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.paused(true);\n\t\t\t};\n\t\n\t\t\tp.resume = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.paused(false);\n\t\t\t};\n\t\n\t\t\tp.seek = function(time, suppressEvents) {\n\t\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t\t};\n\t\n\t\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t\t};\n\t\n\t\t\tp.reverse = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.reversed(true).paused(false);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\t//stub - we override this method in subclasses.\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._time = this._totalTime = 0;\n\t\t\t\tthis._initted = this._gc = false;\n\t\t\t\tthis._rawPrevTime = -1;\n\t\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\t\tthis._enabled(true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.isActive = function() {\n\t\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\t\tstartTime = this._startTime,\n\t\t\t\t\trawTime;\n\t\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime()) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale));\n\t\t\t};\n\t\n\t\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tthis._gc = !enabled;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\n\t\t\tp._kill = function(vars, target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t};\n\t\n\t\t\tp.kill = function(vars, target) {\n\t\t\t\tthis._kill(vars, target);\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._uncache = function(includeSelf) {\n\t\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._dirty = true;\n\t\t\t\t\ttween = tween.timeline;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._swapSelfInParams = function(params) {\n\t\t\t\tvar i = params.length,\n\t\t\t\t\tcopy = params.concat();\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\t\tcopy[i] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t};\n\t\n\t\t\tp._callback = function(type) {\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\tcallback = v[type],\n\t\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\t\tl = params ? params.length : 0;\n\t\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t\t}\n\t\t\t};\n\t\n\t//----Animation getters/setters --------------------------------------------------------\n\t\n\t\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\t\tvar v = this.vars;\n\t\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\t\treturn v[type];\n\t\t\t\t\t}\n\t\t\t\t\tif (callback == null) {\n\t\t\t\t\t\tdelete v[type];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv[type] = callback;\n\t\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.delay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._delay;\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t\t}\n\t\t\t\tthis._delay = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\treturn this._duration;\n\t\t\t\t}\n\t\t\t\tthis._duration = this._totalDuration = value;\n\t\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t\t};\n\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._totalTime;\n\t\t\t\t}\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\t\tvar duration = this.duration();\n\t\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.startTime = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._startTime;\n\t\t\t\t}\n\t\t\t\tif (value !== this._startTime) {\n\t\t\t\t\tthis._startTime = value;\n\t\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.endTime = function(includeRepeats) {\n\t\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t\t};\n\t\n\t\t\tp.timeScale = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._timeScale;\n\t\t\t\t}\n\t\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\t\tvar pauseTime = this._pauseTime,\n\t\t\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t\t}\n\t\t\t\tthis._timeScale = value;\n\t\t\t\treturn this._uncache(false);\n\t\t\t};\n\t\n\t\t\tp.reversed = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._reversed;\n\t\t\t\t}\n\t\t\t\tif (value != this._reversed) {\n\t\t\t\t\tthis._reversed = value;\n\t\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.paused = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._paused;\n\t\t\t\t}\n\t\t\t\tvar tl = this._timeline,\n\t\t\t\t\traw, elapsed;\n\t\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\t\t\t\traw = tl.rawTime();\n\t\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\t\tthis._paused = value;\n\t\t\t\t\tthis._active = this.isActive();\n\t\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc && !value) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * SimpleTimeline\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\t\tAnimation.call(this, 0, vars);\n\t\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t\t});\n\t\n\t\t\tp = SimpleTimeline.prototype = new Animation();\n\t\t\tp.constructor = SimpleTimeline;\n\t\t\tp.kill()._gc = false;\n\t\t\tp._first = p._last = p._recent = null;\n\t\t\tp._sortChildren = false;\n\t\n\t\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\t\tvar prevTween, st;\n\t\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\t\tchild._pauseTime = child._startTime + ((this.rawTime() - child._startTime) / child._timeScale);\n\t\t\t\t}\n\t\t\t\tif (child.timeline) {\n\t\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t\t}\n\t\t\t\tchild.timeline = child._timeline = this;\n\t\t\t\tif (child._gc) {\n\t\t\t\t\tchild._enabled(true, true);\n\t\t\t\t}\n\t\t\t\tprevTween = this._last;\n\t\t\t\tif (this._sortChildren) {\n\t\t\t\t\tst = child._startTime;\n\t\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTween) {\n\t\t\t\t\tchild._next = prevTween._next;\n\t\t\t\t\tprevTween._next = child;\n\t\t\t\t} else {\n\t\t\t\t\tchild._next = this._first;\n\t\t\t\t\tthis._first = child;\n\t\t\t\t}\n\t\t\t\tif (child._next) {\n\t\t\t\t\tchild._next._prev = child;\n\t\t\t\t} else {\n\t\t\t\t\tthis._last = child;\n\t\t\t\t}\n\t\t\t\tchild._prev = prevTween;\n\t\t\t\tthis._recent = child;\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._remove = function(tween, skipDisable) {\n\t\t\t\tif (tween.timeline === this) {\n\t\t\t\t\tif (!skipDisable) {\n\t\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (tween._prev) {\n\t\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (tween._next) {\n\t\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._timeline) {\n\t\t\t\t\t\tthis._uncache(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\tnext;\n\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused)) {\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.rawTime = function() {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\treturn this._totalTime;\n\t\t\t};\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TweenLite\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\n\t\t\t\t\tif (target == null) {\n\t\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t\t}\n\t\n\t\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\n\t\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\t\ti, targ, targets;\n\t\n\t\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\t\n\t\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t\t}\n\t\t\t\t}, true),\n\t\t\t\t_isSelector = function(v) {\n\t\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t\t},\n\t\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\t\tvar css = {},\n\t\t\t\t\t\tp;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvars.css = css;\n\t\t\t\t};\n\t\n\t\t\tp = TweenLite.prototype = new Animation();\n\t\t\tp.constructor = TweenLite;\n\t\t\tp.kill()._gc = false;\n\t\n\t//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\t\n\t\t\tp.ratio = 0;\n\t\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\t\n\t\t\tTweenLite.version = \"1.19.0\";\n\t\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\t\tTweenLite.ticker = _ticker;\n\t\t\tTweenLite.autoSleep = 120;\n\t\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t\t};\n\t\n\t\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\t\tif (selector) {\n\t\t\t\t\tTweenLite.selector = selector;\n\t\t\t\t\treturn selector(e);\n\t\t\t\t}\n\t\t\t\treturn (typeof(document) === \"undefined\") ? e : (document.querySelectorAll ? document.querySelectorAll(e) : document.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t\t};\n\t\n\t\t\tvar _lazyTweens = [],\n\t\t\t\t_lazyLookup = {},\n\t\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t\t_setRatio = function(v) {\n\t\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\t\tval;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : v ? this.join(\"\") : this.start;\n\t\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\t\tval = pt.m(val, this._target || pt.t);\n\t\t\t\t\t\t} else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\t\tvar a = [start, end],\n\t\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\t\ts = \"\",\n\t\t\t\t\t\tcolor = 0,\n\t\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\t\ta.start = start;\n\t\t\t\t\tif (filter) {\n\t\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\t\tstart = a[0];\n\t\t\t\t\t\tend = a[1];\n\t\t\t\t\t}\n\t\t\t\t\ta.length = 0;\n\t\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\t\tif (pt) {\n\t\t\t\t\t\tpt._next = null;\n\t\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t\t}\n\t\t\t\t\tl = endNums.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : 0};\n\t\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t\t}\n\t\t\t\t\ts += end.substr(charIndex);\n\t\t\t\t\tif (s) {\n\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t}\n\t\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t\t}\n\t\t\t\t\tvar s = (start === \"get\") ? target[prop] : start,\n\t\t\t\t\t\ttype = typeof(target[prop]),\n\t\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\t\tblob, getterName;\n\t\t\t\t\tif (type !== \"number\") {\n\t\t\t\t\t\tif (type === \"function\" && start === \"get\") {\n\t\t\t\t\t\t\tgetterName = ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3));\n\t\t\t\t\t\t\tpt.s = s = funcParam ? target[getterName](funcParam) : target[getterName]();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof(s) === \"string\" && (funcParam || isNaN(s))) {\n\t\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\t\tblob = _blobDif(s, end, stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\t\tpt = {t:blob, p:\"setRatio\", s:0, c:1, f:2, pg:0, n:overwriteProp || prop, pr:0, m:0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t\t} else if (!isRelative) {\n\t\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\t\treturn pt;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t\t_tweenLookupNum = 0,\n\t\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1},\n\t\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t\t_nextGCFrame = 30,\n\t\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\t\tvar i = _lazyTweens.length,\n\t\t\t\t\t\ttween;\n\t\t\t\t\t_lazyLookup = {};\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_lazyTweens.length = 0;\n\t\t\t\t};\n\t\n\t\t\t_rootTimeline._startTime = _ticker.time;\n\t\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\t\n\t\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\t\tvar i, a, p;\n\t\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\t\n\t\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t\t}\n\t\t\t\t\tif (tween) {\n\t\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t\t},\n\t\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\t\tif (func) {\n\t\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t\t}\n\t\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\t\tif (func) {\n\t\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t\t},\n\t\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\t\tl = siblings.length;\n\t\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn changed;\n\t\t\t\t\t}\n\t\t\t\t\t//NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\t\toverlaps = [],\n\t\t\t\t\t\toCount = 0,\n\t\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\t\tglobalStart;\n\t\t\t\t\ti = siblings.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t\t//ignore\n\t\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti = oCount;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted)) {\n\t\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t},\n\t\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\t\tt = tween._startTime;\n\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\t\treturn -100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t}\n\t\t\t\t\tt /= ts;\n\t\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t\t};\n\t\n\t\n\t//---- TweenLite instance methods -----------------------------------------------------------------------------\n\t\n\t\t\tp._init = function() {\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\top = this._overwrittenProps,\n\t\t\t\t\tdur = this._duration,\n\t\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\t\tease = v.ease,\n\t\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\t\tif (v.startAt) {\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tthis._startAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\t}\n\t\t\t\t\tstartVars = {};\n\t\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\tstartVars.overwrite = false;\n\t\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, startVars);\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tthis._startAt.render(-1, true);\n\t\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = {};\n\t\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t\t}\n\t\t\t\tthis._easeType = this._ease._type;\n\t\t\t\tthis._easePower = this._ease._power;\n\t\t\t\tthis._firstPT = null;\n\t\n\t\t\t\tif (this._targets) {\n\t\t\t\t\tl = this._targets.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t\t}\n\t\n\t\t\t\tif (initPlugins) {\n\t\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t\t}\n\t\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tif (v.runBackwards) {\n\t\t\t\t\tpt = this._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\t\tthis._initted = true;\n\t\t\t};\n\t\n\t\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\t\tif (target == null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\n\t\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t\t}\n\t\n\t\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t\t}\n\t\t\t\tfor (p in this.vars) {\n\t\t\t\t\tv = this.vars[p];\n\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\t\n\t\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t\t}\n\t\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t\t}\n\t\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t\t}\n\t\t\t\treturn initPlugins;\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tvar prevTime = this._time,\n\t\t\t\t\tduration = this._duration,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\t\tif (time >= duration - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = this._time = duration;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t\tif (!this._reversed ) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === \"isPause\")) {\n\t\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime = this._time = time;\n\t\n\t\t\t\t\tif (this._easeType) {\n\t\t\t\t\t\tvar r = time / duration, type = this._easeType, pow = this._easePower;\n\t\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\t\tr *= r;\n\t\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t\t} else if (time / duration < 0.5) {\n\t\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(time / duration);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._time === prevTime && !force) {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._init();\n\t\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) {\n\t\t\t\t\t\tthis._time = this._totalTime = prevTime;\n\t\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t\t_lazyTweens.push(this);\n\t\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t}\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t\t}\n\t\t\t\tif (prevTime === 0) {\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.onStart) if (this._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) {\n\t\t\t\t\tif (time < 0) if (this._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents) if (this._time !== prevTime || isComplete || force) {\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\t\tif (vars === \"all\") {\n\t\t\t\t\tvars = null;\n\t\t\t\t}\n\t\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t\treturn this._enabled(false, false);\n\t\t\t\t}\n\t\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\ti = target.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this._targets) {\n\t\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (propLookup) {\n\t\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this._firstPT && this._initted) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t\t}\n\t\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative.\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (enabled && this._gc) {\n\t\t\t\t\tvar targets = this._targets,\n\t\t\t\t\t\ti;\n\t\t\t\t\tif (targets) {\n\t\t\t\t\t\ti = targets.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\n\t//----TweenLite static methods -----------------------------------------------------\n\t\n\t\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\t\treturn new TweenLite(target, duration, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn new TweenLite(target, duration, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t\t};\n\t\n\t\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t\t};\n\t\n\t\t\tTweenLite.set = function(target, vars) {\n\t\t\t\treturn new TweenLite(target, 0, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\t\tif (target == null) { return []; }\n\t\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\t\tvar i, a, j, t;\n\t\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\ti = target.length;\n\t\t\t\t\ta = [];\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t\t}\n\t\t\t\t\ti = a.length;\n\t\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tt = a[i];\n\t\t\t\t\t\tj = i;\n\t\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ta = _register(target).concat();\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\t\tonlyActive = false;\n\t\t\t\t}\n\t\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta[i]._kill(vars, target);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t\t}, true);\n\t\n\t\t\tp = TweenPlugin.prototype;\n\t\t\tTweenPlugin.version = \"1.19.0\";\n\t\t\tTweenPlugin.API = 2;\n\t\t\tp._firstPT = null;\n\t\t\tp._addTween = _addPropTween;\n\t\t\tp.setRatio = _setRatio;\n\t\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar a = this._overwriteProps,\n\t\t\t\t\tpt = this._firstPT,\n\t\t\t\t\ti;\n\t\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\t\tthis._overwriteProps = [];\n\t\t\t\t} else {\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\t\tvar pt = tween._firstPT,\n\t\t\t\t\tchanged, pt2, first, last, next;\n\t\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next;\n\t\t\t\t\t\tpt2 = first;\n\t\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t\tpt = tween._firstPT = first;\n\t\t\t\t}\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tTweenPlugin.activate = function(plugins) {\n\t\t\t\tvar i = plugins.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\n\t\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t\t_gsDefine.plugin = function(config) {\n\t\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\t\tvar propName = config.propName,\n\t\t\t\t\tpriority = config.priority || 0,\n\t\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t\t}, (config.global === true)),\n\t\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\t\tprop;\n\t\t\t\tp.constructor = Plugin;\n\t\t\t\tPlugin.API = config.API;\n\t\t\t\tfor (prop in map) {\n\t\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tPlugin.version = config.version;\n\t\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\t\treturn Plugin;\n\t\t\t};\n\t\n\t\n\t\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\t\ta = window._gsQueue;\n\t\t\tif (a) {\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\ta[i]();\n\t\t\t\t}\n\t\t\t\tfor (p in _defLookup) {\n\t\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\t\n\t})((typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window, \"TweenMax\");\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar CustomEase = (function (_super) {\r\n\t    __extends(CustomEase, _super);\r\n\t    function CustomEase(id, data, config) {\r\n\t        _super.call(this);\r\n\t        this._numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n\t        this._svgPathExp = /[achlmqstvz]|(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n\t        this._scientific = /[\\+\\-]?\\d*\\.?\\d+e[\\+\\-]?\\d+/gi;\r\n\t        this._needsParsingExp = /[cLlsS]/g;\r\n\t        this._bezierError = \"CustomEase only accepts Cubic Bezier data.\";\r\n\t        this.id = id;\r\n\t        if (id) {\r\n\t            gsap_1.Ease.map[id] = this;\r\n\t        }\r\n\t        this._calcEnd = true;\r\n\t        this.getRatio = this._getRatio;\r\n\t        this.setData(data, config);\r\n\t    }\r\n\t    CustomEase.prototype._bezierToPoints = function (x1, y1, x2, y2, x3, y3, x4, y4, threshold, points, index) {\r\n\t        var x12 = (x1 + x2) / 2;\r\n\t        var y12 = (y1 + y2) / 2;\r\n\t        var x23 = (x2 + x3) / 2;\r\n\t        var y23 = (y2 + y3) / 2;\r\n\t        var x34 = (x3 + x4) / 2;\r\n\t        var y34 = (y3 + y4) / 2;\r\n\t        var x123 = (x12 + x23) / 2;\r\n\t        var y123 = (y12 + y23) / 2;\r\n\t        var x234 = (x23 + x34) / 2;\r\n\t        var y234 = (y23 + y34) / 2;\r\n\t        var x1234 = (x123 + x234) / 2;\r\n\t        var y1234 = (y123 + y234) / 2;\r\n\t        var dx = x4 - x1;\r\n\t        var dy = y4 - y1;\r\n\t        var d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx);\r\n\t        var d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx);\r\n\t        var length;\r\n\t        if (!points) {\r\n\t            points = [\r\n\t                { x: x1, y: y1 },\r\n\t                { x: x4, y: y4 },\r\n\t            ];\r\n\t            index = 1;\r\n\t        }\r\n\t        points.splice(index || points.length - 1, 0, { x: x1234, y: y1234 });\r\n\t        if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {\r\n\t            length = points.length;\r\n\t            this._bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);\r\n\t            this._bezierToPoints(x1234, y1234, x234, y234, x34, y34, x4, y4, threshold, points, index + 1 + (points.length - length));\r\n\t        }\r\n\t        return points;\r\n\t    };\r\n\t    CustomEase.prototype._pathDataToBezier = function (d) {\r\n\t        var a = (d + \"\")\r\n\t            .replace(this._scientific, function (m) {\r\n\t            var n = +m;\r\n\t            var result = n < 0.0001 && n > -0.0001 ? 0 : n;\r\n\t            return result.toString();\r\n\t        })\r\n\t            .match(this._svgPathExp) || [];\r\n\t        var path = [];\r\n\t        var relativeX = 0;\r\n\t        var relativeY = 0;\r\n\t        var elements = a.length;\r\n\t        var l = 2;\r\n\t        var i;\r\n\t        var x;\r\n\t        var y;\r\n\t        var command;\r\n\t        var isRelative;\r\n\t        var segment;\r\n\t        var startX;\r\n\t        var startY;\r\n\t        var prevCommand;\r\n\t        var difX;\r\n\t        var difY;\r\n\t        for (i = 0; i < elements; i++) {\r\n\t            prevCommand = command;\r\n\t            if (isNaN(parseFloat(a[i]))) {\r\n\t                command = a[i].toUpperCase();\r\n\t                isRelative = command !== a[i];\r\n\t            }\r\n\t            else {\r\n\t                i--;\r\n\t            }\r\n\t            x = +a[i + 1];\r\n\t            y = +a[i + 2];\r\n\t            if (isRelative) {\r\n\t                x += relativeX;\r\n\t                y += relativeY;\r\n\t            }\r\n\t            if (!i) {\r\n\t                startX = x;\r\n\t                startY = y;\r\n\t            }\r\n\t            if (command === \"M\") {\r\n\t                if (segment && segment.length < 8) {\r\n\t                    path.length -= 1;\r\n\t                    l = 0;\r\n\t                }\r\n\t                relativeX = startX = x;\r\n\t                relativeY = startY = y;\r\n\t                segment = [x, y];\r\n\t                l = 2;\r\n\t                path.push(segment);\r\n\t                i += 2;\r\n\t                command = \"L\";\r\n\t            }\r\n\t            else if (command === \"C\") {\r\n\t                if (!segment) {\r\n\t                    segment = [0, 0];\r\n\t                }\r\n\t                segment[l++] = x;\r\n\t                segment[l++] = y;\r\n\t                if (!isRelative) {\r\n\t                    relativeX = relativeY = 0;\r\n\t                }\r\n\t                segment[l++] = relativeX + parseFloat(a[i + 3]);\r\n\t                segment[l++] = relativeY + parseFloat(a[i + 4]);\r\n\t                segment[l++] = relativeX = relativeX + parseFloat(a[i + 5]);\r\n\t                segment[l++] = relativeY = relativeY + parseFloat(a[i + 6]);\r\n\t                i += 6;\r\n\t            }\r\n\t            else if (command === \"S\") {\r\n\t                if (prevCommand === \"C\" || prevCommand === \"S\") {\r\n\t                    difX = relativeX - segment[l - 4];\r\n\t                    difY = relativeY - segment[l - 3];\r\n\t                    segment[l++] = relativeX + difX;\r\n\t                    segment[l++] = relativeY + difY;\r\n\t                }\r\n\t                else {\r\n\t                    segment[l++] = relativeX;\r\n\t                    segment[l++] = relativeY;\r\n\t                }\r\n\t                segment[l++] = x;\r\n\t                segment[l++] = y;\r\n\t                if (!isRelative) {\r\n\t                    relativeX = relativeY = 0;\r\n\t                }\r\n\t                segment[l++] = relativeX = relativeX + parseFloat(a[i + 3]);\r\n\t                segment[l++] = relativeY = relativeY + parseFloat(a[i + 4]);\r\n\t                i += 4;\r\n\t            }\r\n\t            else if (command === \"L\" || command === \"Z\") {\r\n\t                if (command === \"Z\") {\r\n\t                    x = startX;\r\n\t                    y = startY;\r\n\t                    segment.closed = true;\r\n\t                }\r\n\t                if (command === \"L\" || Math.abs(relativeX - x) > 0.5 || Math.abs(relativeY - y) > 0.5) {\r\n\t                    segment[l++] = relativeX + (x - relativeX) / 3;\r\n\t                    segment[l++] = relativeY + (y - relativeY) / 3;\r\n\t                    segment[l++] = relativeX + ((x - relativeX) * 2) / 3;\r\n\t                    segment[l++] = relativeY + ((y - relativeY) * 2) / 3;\r\n\t                    segment[l++] = x;\r\n\t                    segment[l++] = y;\r\n\t                    if (command === \"L\") {\r\n\t                        i += 2;\r\n\t                    }\r\n\t                }\r\n\t                relativeX = x;\r\n\t                relativeY = y;\r\n\t            }\r\n\t            else {\r\n\t                throw this._bezierError;\r\n\t            }\r\n\t        }\r\n\t        return path[0];\r\n\t    };\r\n\t    CustomEase.prototype._findMinimum = function (values) {\r\n\t        var l = values.length, min = 999999999999, i;\r\n\t        for (i = 1; i < l; i += 6) {\r\n\t            if (+values[i] < min) {\r\n\t                min = +values[i];\r\n\t            }\r\n\t        }\r\n\t        return min;\r\n\t    };\r\n\t    CustomEase.prototype._normalize = function (values, height, originY) {\r\n\t        if (!originY && originY !== 0) {\r\n\t            originY = Math.max(+values[values.length - 1], +values[1]);\r\n\t        }\r\n\t        var tx = +values[0] * -1, ty = -originY, l = values.length, sx = 1 / (+values[l - 2] + tx), sy = -height ||\r\n\t            (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0])\r\n\t                ? this._findMinimum(values) + ty\r\n\t                : +values[l - 1] + ty), i;\r\n\t        if (sy) {\r\n\t            sy = 1 / sy;\r\n\t        }\r\n\t        else {\r\n\t            sy = -sx;\r\n\t        }\r\n\t        for (i = 0; i < l; i += 2) {\r\n\t            values[i] = (+values[i] + tx) * sx;\r\n\t            values[i + 1] = (+values[i + 1] + ty) * sy;\r\n\t        }\r\n\t    };\r\n\t    CustomEase.prototype._getRatio = function (p) {\r\n\t        var point = this.lookup[(p * this.l) | 0] || this.lookup[this.l - 1];\r\n\t        if (point.nx < p) {\r\n\t            point = point.n;\r\n\t        }\r\n\t        var result = point.y + ((p - point.x) / point.cx) * point.cy;\r\n\t        return result;\r\n\t    };\r\n\t    CustomEase.prototype.setData = function (data, config) {\r\n\t        this.data = data || \"0,0,1,1\";\r\n\t        this.points = [];\r\n\t        this.lookup = [];\r\n\t        var values = neo_common_1.ArrayUtils.numberArray(this.data.match(this._numbersExp).join(\";\"));\r\n\t        var closest = 1;\r\n\t        var a1, a2, i, inc, j, point, prevPoint, p, precision;\r\n\t        precision = (config && config.precision) || 1;\r\n\t        this.fast = precision <= 1;\r\n\t        if (this._needsParsingExp.test(data) || (data.indexOf(\"M\") !== -1 && data.indexOf(\"C\") === -1)) {\r\n\t            values = this._pathDataToBezier(data);\r\n\t        }\r\n\t        this.l = values.length;\r\n\t        if (this.l === 4) {\r\n\t            values.unshift(0, 0);\r\n\t            values.push(1, 1);\r\n\t            this.l = 8;\r\n\t        }\r\n\t        else if ((this.l - 2) % 6) {\r\n\t            throw this._bezierError;\r\n\t        }\r\n\t        if (+values[0] !== 0 || +values[this.l - 2] !== 1) {\r\n\t            var height = config && config.height ? config.height : null;\r\n\t            var originY = config && config.originY ? config.originY : null;\r\n\t            this._normalize(values, height, originY);\r\n\t        }\r\n\t        this.rawBezier = values;\r\n\t        for (i = 2; i < this.l; i += 6) {\r\n\t            a1 = { x: +values[i - 2], y: +values[i - 1] };\r\n\t            a2 = { x: +values[i + 4], y: +values[i + 5] };\r\n\t            this.points.push(a1, a2);\r\n\t            this._bezierToPoints(a1.x, a1.y, +values[i], +values[i + 1], +values[i + 2], +values[i + 3], a2.x, a2.y, 1 / (precision * 200000), this.points, this.points.length - 1);\r\n\t        }\r\n\t        this.l = this.points.length;\r\n\t        for (i = 0; i < this.l; i++) {\r\n\t            point = this.points[i];\r\n\t            prevPoint = this.points[i - 1] || point;\r\n\t            if (point.x > prevPoint.x || (prevPoint.y !== point.y && prevPoint.x === point.x) || point === prevPoint) {\r\n\t                prevPoint.cx = point.x - prevPoint.x;\r\n\t                prevPoint.cy = point.y - prevPoint.y;\r\n\t                prevPoint.n = point;\r\n\t                prevPoint.nx = point.x;\r\n\t                if (this.fast &&\r\n\t                    i > 1 &&\r\n\t                    Math.abs(prevPoint.cy / prevPoint.cx - this.points[i - 2].cy / this.points[i - 2].cx) > 2) {\r\n\t                    this.fast = false;\r\n\t                }\r\n\t                if (prevPoint.cx < closest) {\r\n\t                    if (!prevPoint.cx) {\r\n\t                        prevPoint.cx = 0.001;\r\n\t                        if (i === this.l - 1) {\r\n\t                            prevPoint.x -= 0.001;\r\n\t                            closest = Math.min(closest, 0.001);\r\n\t                            this.fast = false;\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        closest = prevPoint.cx;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.points.splice(i--, 1);\r\n\t                this.l--;\r\n\t            }\r\n\t        }\r\n\t        this.l = (1 / closest + 1) | 0;\r\n\t        inc = 1 / this.l;\r\n\t        j = 0;\r\n\t        point = this.points[0];\r\n\t        if (this.fast) {\r\n\t            for (i = 0; i < this.l; i++) {\r\n\t                p = i * inc;\r\n\t                if (point.nx < p) {\r\n\t                    point = this.points[++j];\r\n\t                }\r\n\t                a1 = point.y + ((p - point.x) / point.cx) * point.cy;\r\n\t                this.lookup[i] = { x: p, cx: inc, y: a1, cy: 0, nx: 9 };\r\n\t                if (i) {\r\n\t                    this.lookup[i - 1].cy = a1 - this.lookup[i - 1].y;\r\n\t                }\r\n\t            }\r\n\t            this.lookup[this.l - 1].cy = this.points[this.points.length - 1].y - a1;\r\n\t        }\r\n\t        else {\r\n\t            for (i = 0; i < this.l; i++) {\r\n\t                if (point.nx < i * inc) {\r\n\t                    point = this.points[++j];\r\n\t                }\r\n\t                this.lookup[i] = point;\r\n\t            }\r\n\t            if (j < this.points.length - 1) {\r\n\t                this.lookup[i - 1] = this.points[this.points.length - 2];\r\n\t            }\r\n\t        }\r\n\t        this._calcEnd = this.points[this.points.length - 1].y !== 1 || this.points[0].y !== 0;\r\n\t    };\r\n\t    CustomEase.create = function (id, data, config) {\r\n\t        return new CustomEase(id, data, config);\r\n\t    };\r\n\t    CustomEase.get = function (id) {\r\n\t        return gsap_1.Ease.map[id];\r\n\t    };\r\n\t    CustomEase._createOwnEasing = function () {\r\n\t        var dataNeonOut = \"M0,0,C0.18,0,0.259,1,0.259,1,0.259,1,0.297,0.422,0.41,0.422,0.5,0.422,0.566,1,0.566,1,0.566,1,0.595,0.67,0.657,0.67,0.705,0.67,0.75,1,0.75,1,0.75,1,0.768,0.81,0.804,0.81,0.832,0.81,0.859,1,0.859,1,0.859,1,0.869,0.912,0.891,0.912,0.909,0.912,0.924,1,0.924,1,0.924,1,0.929,0.958,0.943,0.958,0.953,0.958,0.963,1,0.963,1,0.963,1,0.965,0.997,0.973,0.997,0.981,0.997,0.986,1,0.986,1,0.986,1,0.987,0.999,0.993,0.999,0.997,0.999,1,1,1,1\";\r\n\t        CustomEase.create(\"neonOut\", dataNeonOut);\r\n\t        var dataNeonIn = \"M0,0,C0,0,0.003,0.001,0.007,0.001,0.013,0.001,0.014,0,0.014,0,0.014,0,0.019,0.003,0.027,0.003,0.035,0.003,0.037,0,0.037,0,0.037,0,0.047,0.044,0.057,0.044,0.071,0.044,0.076,0,0.076,0,0.076,0,0.097,0.094,0.109,0.094,0.12,0.094,0.141,0,0.141,0,0.141,0,0.172,0.2,0.2,0.2,0.236,0.2,0.25,0,0.25,0,0.25,0,0.295,0.332,0.343,0.332,0.405,0.332,0.434,0,0.434,0,0.434,0,0.5,0.586,0.59,0.586,0.703,0.586,0.758,0,0.758,0,0.758,0,0.87,1,1,1\";\r\n\t        CustomEase.create(\"neonIn\", dataNeonIn);\r\n\t        var dataNeonLost = \"M0,0 C0,0 0.044,0.2 0.1,0.2 0.155,0.2 0.2,0 0.2,0 0.2,0 0.246,0.5 0.3,0.5 0.362,0.5 0.4,0 0.4,0 0.4,0 0.398,1 0.5,1 0.598,1 0.6,0 0.6,0 0.6,0 0.65,0.492 0.708,0.491 0.773,0.491 0.8,0 0.8,0 0.8,0 0.844,0.2 0.9,0.2 0.955,0.2 1,0 1,0\";\r\n\t        CustomEase.create(\"neonLost\", dataNeonLost);\r\n\t    };\r\n\t    return CustomEase;\r\n\t}(gsap_1.Ease));\r\n\texports.CustomEase = CustomEase;\r\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StyleManager = (function () {\r\n\t    function StyleManager() {\r\n\t    }\r\n\t    StyleManager.cleanup = function () {\r\n\t        StyleManager.HtmlStyles = null;\r\n\t    };\r\n\t    StyleManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"StyleManager\", data);\r\n\t        }\r\n\t    };\r\n\t    StyleManager.parseElements = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        var nodes = StyleManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) { return node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") !== \"\"; });\r\n\t        nodes\r\n\t            .filter(function (node) {\r\n\t            return neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.Style);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var style = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            style.create(node);\r\n\t            StyleManager.Styles[node.nodeName] = style;\r\n\t        });\r\n\t        nodes\r\n\t            .filter(function (node) {\r\n\t            return neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.HtmlStyle);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var style = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            style.create(node);\r\n\t            StyleManager.HtmlStyles[node.nodeName] = style;\r\n\t        });\r\n\t    };\r\n\t    StyleManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = StyleManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    StyleManager.Styles = {};\r\n\t    StyleManager.HtmlStyles = {};\r\n\t    return StyleManager;\r\n\t}());\r\n\texports.StyleManager = StyleManager;\r\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Attributes = (function () {\r\n\t    function Attributes() {\r\n\t    }\r\n\t    Attributes.assignIntAttribute = function (node, attribute, defaultValue, radix) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return parseInt(node.getAttribute(attribute), radix);\r\n\t    };\r\n\t    Attributes.assignFloatAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return parseFloat(node.getAttribute(attribute));\r\n\t    };\r\n\t    Attributes.assignBooleanAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return neo_common_1.StringUtils.parseBoolean(node.getAttribute(attribute));\r\n\t    };\r\n\t    Attributes.assignStringAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return node.getAttribute(attribute);\r\n\t    };\r\n\t    return Attributes;\r\n\t}());\r\n\texports.Attributes = Attributes;\r\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar FrameTimerPool = (function () {\r\n\t    function FrameTimerPool() {\r\n\t    }\r\n\t    FrameTimerPool.add = function (key, item) {\r\n\t        FrameTimerPool.pool[key] = item;\r\n\t    };\r\n\t    FrameTimerPool.remove = function (key) {\r\n\t        delete FrameTimerPool.pool[key];\r\n\t    };\r\n\t    FrameTimerPool.pause = function (force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (FrameTimerPool.paused && !force) {\r\n\t            return;\r\n\t        }\r\n\t        for (var key in FrameTimerPool.pool) {\r\n\t            if (FrameTimerPool.pool[key] instanceof FrameTimer_1.FrameTimer) {\r\n\t                FrameTimerPool.pool[key].pause();\r\n\t            }\r\n\t        }\r\n\t        FrameTimerPool.paused = true;\r\n\t    };\r\n\t    FrameTimerPool.unpause = function (force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (!FrameTimerPool.paused && !force) {\r\n\t            return;\r\n\t        }\r\n\t        for (var key in FrameTimerPool.pool) {\r\n\t            if (FrameTimerPool.pool[key] instanceof FrameTimer_1.FrameTimer) {\r\n\t                FrameTimerPool.pool[key].unpause();\r\n\t            }\r\n\t        }\r\n\t        FrameTimerPool.paused = false;\r\n\t    };\r\n\t    FrameTimerPool.pool = {};\r\n\t    FrameTimerPool.paused = false;\r\n\t    return FrameTimerPool;\r\n\t}());\r\n\texports.FrameTimerPool = FrameTimerPool;\r\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar JackpotCounter_1 = __webpack_require__(24);\r\n\tvar JackpotHistoryDialog_1 = __webpack_require__(26);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar JackpotGame_1 = __webpack_require__(62);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot = (function () {\r\n\t    function Jackpot() {\r\n\t    }\r\n\t    Jackpot.initialize = function () {\r\n\t        if (AppContext_1.AppContext && AppContext_1.AppContext.gameConfiguration.ProgressiveBonusId > -1) {\r\n\t            document.body.classList.add(\"jpt-on\");\r\n\t            Jackpot.WidgetRoot = document.getElementById(\"jackpotWidget\");\r\n\t            Jackpot.GameRoot = document.getElementById(\"jackpotGame\");\r\n\t            Jackpot.BonusId = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusId;\r\n\t            Jackpot.createCounters();\r\n\t            Jackpot.createHistoryDialogs();\r\n\t            Jackpot.bindElements();\r\n\t            Jackpot.getBonusInfo(Jackpot.initJackpotDataReceived);\r\n\t            if (GameManager_1.GameManager.gameClient) {\r\n\t                GameManager_1.GameManager.gameClient.setBonusId(Jackpot.BonusId);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Jackpot.clearJackpot();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.reinitialize = function () {\r\n\t        if (Jackpot.Offline) {\r\n\t            Jackpot.Offline = false;\r\n\t            Jackpot.refreshBonusInfo();\r\n\t            Jackpot.refreshCounters();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.show = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            if (Jackpot.Counters.length > 0) {\r\n\t                for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                    Jackpot.Counters[i].createCurrency(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                    Jackpot.HistoryDialogs[i].updateDataWithCurrency();\r\n\t                }\r\n\t                Jackpot.Height = Jackpot.Counters[0].getHeight();\r\n\t                Scaling_1.Scaling.PortraitMobileRatio = 0.76;\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.clearJackpot = function () {\r\n\t        var jackpotWidget = document.getElementById(\"jackpotWidget\");\r\n\t        var jackpotGame = document.getElementById(\"jackpotGame\");\r\n\t        if (jackpotWidget && jackpotWidget.parentNode && jackpotGame && jackpotGame.parentNode) {\r\n\t            jackpotWidget.parentNode.removeChild(jackpotWidget);\r\n\t            jackpotGame.parentNode.removeChild(jackpotGame);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createCounters = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            Jackpot.getCustomContent(\"jackpotLogo.jpg\", Jackpot.createLogo, Jackpot.createLogo);\r\n\t            Jackpot.createElement(\"div\", \"jackpotCountersBg\", Jackpot.WidgetRoot);\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotCounters\", Jackpot.WidgetRoot);\r\n\t            holder.id = \"jackpotCounters\";\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                var counter = new JackpotCounter_1.JackpotCounter(i + 1, holder, Jackpot.refreshCounters);\r\n\t                Jackpot.Counters.push(counter);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createLogo = function (contentUrl) {\r\n\t        if (contentUrl === void 0) { contentUrl = \"\"; }\r\n\t        var logo = Jackpot.createElement(\"div\", \"jackpotLogo\", Jackpot.WidgetRoot);\r\n\t        logo = Jackpot.createElement(\"div\", \"\", logo);\r\n\t        logo.id = \"jackpotLogo\";\r\n\t        if (contentUrl != \"\") {\r\n\t            logo.style.background = \"url(\" + contentUrl + \")\";\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createHistoryDialogs = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotHistory\", Jackpot.WidgetRoot);\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                var dialog = new JackpotHistoryDialog_1.JackpotHistoryDialog(i + 1, holder);\r\n\t                Jackpot.HistoryDialogs.push(dialog);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createBonusGame = function () {\r\n\t        if (Jackpot.GameRoot) {\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotGameHolder\", Jackpot.GameRoot);\r\n\t            Jackpot.Game = new JackpotGame_1.JackpotGame(holder);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.refreshCounters = function () {\r\n\t        for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t            Jackpot.Counters[i].refreshWithReset();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.showError = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            if (Jackpot.Counters && Jackpot.HistoryDialogs) {\r\n\t                Jackpot.Offline = true;\r\n\t                for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                    Jackpot.Counters[i].error(useResetAnim);\r\n\t                    Jackpot.HistoryDialogs[i].error(useResetAnim);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.refreshBonusInfo = function () {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive);\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoInMiniGame = function (overrideLevelData) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, { overrideLeveldata: overrideLevelData, priority: true });\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoWithWinValue = function (overrideLevelData) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, {\r\n\t            overrideLeveldata: overrideLevelData,\r\n\t            priority: true,\r\n\t            fromMiniGame: overrideLevelData.code,\r\n\t        });\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoBeforeSpin = function (spinCallback) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfoBeforeSpin(spinCallback, { priority: true });\r\n\t    };\r\n\t    Jackpot.getBonusInfo = function (callback, customData) {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n\t                .then(function (response) {\r\n\t                callback(response, customData);\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                Jackpot.showError(true);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Jackpot.getBonusInfoBeforeSpin = function (callback, customData) {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n\t                .then(function (response) {\r\n\t                Jackpot.jackpotDataReceive(response, customData);\r\n\t                callback();\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                Jackpot.showError(true);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Jackpot.initJackpotDataReceived = function (response, customData) {\r\n\t        if (response != null) {\r\n\t            Jackpot.RefreshInterval = response.refreshInterval;\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].initialize(response.levels[i], response.timestamp);\r\n\t                Jackpot.HistoryDialogs[i].initialize(response.levels[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].error();\r\n\t                Jackpot.HistoryDialogs[i].error();\r\n\t            }\r\n\t        }\r\n\t        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n\t    };\r\n\t    Jackpot.jackpotDataReceive = function (response, customData) {\r\n\t        if (response != null) {\r\n\t            Jackpot.RefreshInterval = response.refreshInterval;\r\n\t            var winOverride = customData != null && customData[\"overrideLeveldata\"] != null;\r\n\t            var priority = customData != null && customData[\"priority\"] != null;\r\n\t            var fromMiniGame = customData != null && customData[\"fromMiniGame\"] != null ? customData[\"fromMiniGame\"] : \"\";\r\n\t            if (winOverride) {\r\n\t                response = Jackpot.updateReponseData(response, customData[\"overrideLeveldata\"]);\r\n\t            }\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].assign(response.levels[i], response.timestamp, priority, response.levels[i][\"overridedLastWinAmount\"], fromMiniGame == response.levels[i].code);\r\n\t                Jackpot.HistoryDialogs[i].assign(response.levels[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].error();\r\n\t                Jackpot.HistoryDialogs[i].error();\r\n\t            }\r\n\t        }\r\n\t        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n\t    };\r\n\t    Jackpot.updateReponseData = function (response, overrideLevelData) {\r\n\t        if (overrideLevelData != null) {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                if (response.levels[i].code == overrideLevelData.code) {\r\n\t                    if (overrideLevelData.lastWinAmount != null) {\r\n\t                        response.levels[i][\"overridedLastWinAmount\"] = overrideLevelData.lastWinAmount;\r\n\t                    }\r\n\t                    else {\r\n\t                        response.levels[i] = overrideLevelData;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return response;\r\n\t    };\r\n\t    Jackpot.bindElements = function () {\r\n\t        var _loop_1 = function(i) {\r\n\t            if (window[\"CHANNEL\"] === \"mobile\") {\r\n\t                Jackpot.Counters[i]\r\n\t                    .getRoot()\r\n\t                    .addEventListener(\"click\", function (event) { return Jackpot.toggleHistoryDialog(event, i); });\r\n\t                for (var i_1 = 0; i_1 < Jackpot.HistoryDialogs.length; i_1++) {\r\n\t                    Jackpot.HistoryDialogs[i_1]\r\n\t                        .getRoot()\r\n\t                        .addEventListener(\"click\", function (event) { return Jackpot.preventDefault(event); });\r\n\t                    Jackpot.HistoryDialogs[i_1]\r\n\t                        .getRoot()\r\n\t                        .addEventListener(\"touchstart\", function (event) { return Jackpot.preventDefault(event); });\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"click\", Jackpot.showHistoryDialog.bind(this_1, i));\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"mouseover\", Jackpot.showHistoryDialog.bind(this_1, i));\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"mouseout\", Jackpot.hideHistoryDialog.bind(this_1, i));\r\n\t            }\r\n\t        };\r\n\t        var this_1 = this;\r\n\t        for (var i = 0; i < Jackpot.Counters.length; i++) {\r\n\t            _loop_1(i);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.closeAllHistoryDialogs = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            Jackpot.WidgetRoot.removeEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n\t            for (var i = 0; i < Jackpot.HistoryDialogs.length; i++) {\r\n\t                Jackpot.HistoryDialogs[i].closeDialog();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.showHistoryDialog = function (index) {\r\n\t        this.closeAllHistoryDialogs();\r\n\t        if (Jackpot.HistoryDialogs[index]) {\r\n\t            if (window[\"CHANNEL\"] === \"mobile\") {\r\n\t                HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t                Jackpot.WidgetRoot.addEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n\t            }\r\n\t            Jackpot.TouchEvent = Jackpot.hideHistoryDialog.bind(this, index);\r\n\t            document.addEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n\t            Jackpot.HistoryDialogs[index].openDialog();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.toggleHistoryDialog = function (event, index) {\r\n\t        event.preventDefault();\r\n\t        event.stopPropagation();\r\n\t        if (Jackpot.HistoryDialogs[index] && !Jackpot.HistoryDialogs[index].isOpen()) {\r\n\t            this.showHistoryDialog(index);\r\n\t        }\r\n\t        else {\r\n\t            this.closeAllHistoryDialogs();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.hideHistoryDialog = function (index) {\r\n\t        if (Jackpot.HistoryDialogs[index]) {\r\n\t            Jackpot.HistoryDialogs[index].closeDialog();\r\n\t            document.removeEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.preventDefault = function (event) {\r\n\t        event.preventDefault();\r\n\t        event.stopPropagation();\r\n\t    };\r\n\t    Jackpot.initMiniGame = function (autostart, callback) {\r\n\t        if (!Jackpot.Game) {\r\n\t            Jackpot.createBonusGame();\r\n\t        }\r\n\t        Jackpot.Game.init(autostart, callback);\r\n\t    };\r\n\t    Jackpot.startMiniGame = function () {\r\n\t        if (!Jackpot.Game.hasStartedGame()) {\r\n\t            Jackpot.Game.start();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.hasActiveGame = function () {\r\n\t        if (!Jackpot.Game) {\r\n\t            return false;\r\n\t        }\r\n\t        return Jackpot.Game.hasStartedGame();\r\n\t    };\r\n\t    Jackpot.hasInitializedGame = function () {\r\n\t        return Jackpot.Game && Jackpot.Game.hasInitializedGame();\r\n\t    };\r\n\t    Jackpot.hasMiniGame = function () {\r\n\t        if (Jackpot.Game && Jackpot.Game.hasStartedGame()) {\r\n\t            return true;\r\n\t        }\r\n\t        if (Jackpot.countersInError()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot.Game && Jackpot.Game.hasInitializedGame()) {\r\n\t            return true;\r\n\t        }\r\n\t        return GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] && GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n\t    };\r\n\t    Jackpot.disableMiniGameAutostart = function () {\r\n\t        if (Jackpot.Game) {\r\n\t            Jackpot.Game.disableAutostart();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.waitForMiniGameInitialization = function () {\r\n\t        return (AppContext_1.AppContext &&\r\n\t            (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" ||\r\n\t                AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"AfterGameRound\"));\r\n\t    };\r\n\t    Jackpot.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    Jackpot.countersInError = function () {\r\n\t        if (Jackpot.Counters && Jackpot.Counters.length > 0) {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                if (Jackpot.Counters[i].hasError()) {\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    Jackpot.getCustomContent = function (name, success, error) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t            if (error)\r\n\t                error();\r\n\t            return;\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n\t            if (error)\r\n\t                error();\r\n\t            return;\r\n\t        }\r\n\t        var theme = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n\t        if (theme == \"\") {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t                theme = Jackpot.JackpotTheme;\r\n\t            }\r\n\t            else {\r\n\t                if (error)\r\n\t                    error();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        var staticContentUrl = AppContext_1.AppContext.gameConfiguration.StaticContentUrl;\r\n\t        var spbFolder = \"SynotProgressiveBonus\";\r\n\t        var url = \"\" + staticContentUrl + spbFolder + \"/\" + theme + \"/\" + window[\"QUALITY\"] + \"/\" + name;\r\n\t        var img = document.createElement(\"img\");\r\n\t        img.setAttribute(\"src\", url);\r\n\t        img.addEventListener(\"load\", function (ev) {\r\n\t            if (success)\r\n\t                success(url);\r\n\t        });\r\n\t        img.addEventListener(\"error\", function (ev) {\r\n\t            if (error)\r\n\t                error();\r\n\t        });\r\n\t    };\r\n\t    Jackpot.JackpotTheme = \"SPJackpot\";\r\n\t    Jackpot.Height = 0;\r\n\t    Jackpot.BonusId = -1;\r\n\t    Jackpot.CountersCount = 4;\r\n\t    Jackpot.Counters = [];\r\n\t    Jackpot.HistoryDialogs = [];\r\n\t    Jackpot.RefreshInterval = 15;\r\n\t    Jackpot.Offline = false;\r\n\t    return Jackpot;\r\n\t}());\r\n\texports.Jackpot = Jackpot;\r\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar JackpotCounter = (function () {\r\n\t    function JackpotCounter(index, holder, resetCallback) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            JackpotCounter.DecimalPlaces = AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces;\r\n\t        }\r\n\t        this.root = this.createBaseLayout(index);\r\n\t        holder.appendChild(this.root);\r\n\t        this.createDigits();\r\n\t        this.createDecimalPoint();\r\n\t        this.currentCounterValue = 0;\r\n\t        this.previousCounterValue = 0;\r\n\t        this.lastWinValue = -1;\r\n\t        this.lastWinCount = -1;\r\n\t        this.overridedLastWinValue = -1;\r\n\t        this.winAnimationDelay = FrameTimer_1.CreateFrameTimer(\"winAnimationDelayTimer\");\r\n\t        this.winAnimationDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.winAnimationFinished.bind(this));\r\n\t        this.mainTween = null;\r\n\t        this.digitTween = null;\r\n\t        this.winFromMinigame = false;\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.resetCallback = resetCallback;\r\n\t        this.reset();\r\n\t    }\r\n\t    JackpotCounter.prototype.createBaseLayout = function (index) {\r\n\t        var root = this.createElement(\"div\", \"jackpotCounter l-\" + index);\r\n\t        this.createElement(\"div\", \"jackpotFrame\", root);\r\n\t        var level = this.createElement(\"div\", \"jackpotLevel\", root);\r\n\t        this.createElement(\"div\", \"jackpotIconError\", level);\r\n\t        this.createElement(\"div\", \"jackpotDigitsHolder\", root);\r\n\t        this.createElement(\"div\", \"jackpotGradient\", root);\r\n\t        var currency = this.createElement(\"div\", \"jackpotCurrency\", root);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        return root;\r\n\t    };\r\n\t    JackpotCounter.prototype.createCurrency = function (currency) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(currency)) {\r\n\t            var jackpotCurrencyLetters = this.root.getElementsByClassName(\"jackpotCurrencyLetter\");\r\n\t            for (var i = 0; i < jackpotCurrencyLetters.length; i++) {\r\n\t                if (currency.length > i) {\r\n\t                    jackpotCurrencyLetters[i].textContent = currency.charAt(i);\r\n\t                }\r\n\t            }\r\n\t            jackpotCurrencyLetters[0].parentElement.classList.add(\"ln-\" + currency.length);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.createDigits = function () {\r\n\t        var digitsHolder = this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n\t        var digitsArray = [];\r\n\t        this.digits = [];\r\n\t        var digit;\r\n\t        for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t            var className = i == JackpotCounter.Length - JackpotCounter.DecimalPlaces ? \"digits decimalOffset\" : \"digits\";\r\n\t            digit = this.createElement(\"div\", className, digitsHolder);\r\n\t            var from = this.createElement(\"div\", \"digit\", digit);\r\n\t            var to = this.createElement(\"div\", \"digit\", digit);\r\n\t            digitsArray.push(digit);\r\n\t            this.digits.push({ from: from, to: to });\r\n\t        }\r\n\t        if (JackpotCounter.UseThousandsSeparator) {\r\n\t            digitsHolder.classList.add(\"thousandsFormat\");\r\n\t            for (var i = 0; i < digitsArray.length; i++) {\r\n\t                var index = digitsArray.length - 1 - i;\r\n\t                var hasThousandsOffset = index > 0 && i > JackpotCounter.DecimalPlaces && (i + 1 - JackpotCounter.DecimalPlaces) % 3 == 0;\r\n\t                if (hasThousandsOffset && digitsArray[index] != null) {\r\n\t                    digitsArray[index].classList.add(\"thousandsOffset\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.settings = {\r\n\t            width: parseInt(window.getComputedStyle(digit).width),\r\n\t            height: parseInt(window.getComputedStyle(digit).height),\r\n\t        };\r\n\t    };\r\n\t    JackpotCounter.prototype.createDecimalPoint = function () {\r\n\t        var digitsHolder = this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n\t        if (JackpotCounter.DecimalPlaces > 0) {\r\n\t            this.decimalDot = this.createElement(\"div\", \"digit nDot\", digitsHolder);\r\n\t            this.decimalDot.style.right = JackpotCounter.DecimalPlaces * this.settings.width + \"px\";\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.initialize = function (data, serverTimestamp) {\r\n\t        this.assign(data, serverTimestamp);\r\n\t    };\r\n\t    JackpotCounter.prototype.assign = function (data, serverTimestamp, priority, overridedLastWinValue, winFromMinigame) {\r\n\t        if (priority === void 0) { priority = false; }\r\n\t        if (overridedLastWinValue === void 0) { overridedLastWinValue = -1; }\r\n\t        if (winFromMinigame === void 0) { winFromMinigame = false; }\r\n\t        this.currentData = data;\r\n\t        this.nextValue = this.normalizeValue(data.nextValue);\r\n\t        this.nextDate = Date.now() + (new Date(data.nextTimestamp).getTime() - new Date(serverTimestamp).getTime());\r\n\t        this.previousValue = this.normalizeValue(data.previousValue);\r\n\t        this.winFromMinigame = winFromMinigame;\r\n\t        var oldValuesReset = Date.now() - this.lastUpdateTime > JackpotCounter.MaxNextTimeDiff * 1000;\r\n\t        if (overridedLastWinValue > -1) {\r\n\t            this.overridedLastWinValue = this.normalizeValue(overridedLastWinValue);\r\n\t        }\r\n\t        if (oldValuesReset && this.resetCallback != null) {\r\n\t            this.resetCallback();\r\n\t            return;\r\n\t        }\r\n\t        if (this.inError) {\r\n\t            this.removeError();\r\n\t            this.reset();\r\n\t            return;\r\n\t        }\r\n\t        if (!this.isCounting || priority) {\r\n\t            this.refresh();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.error = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        if (!this.inError) {\r\n\t            this.inError = true;\r\n\t            this.isCounting = false;\r\n\t            if (useResetAnim) {\r\n\t                this.resetMainTween();\r\n\t                this.resetDigitTween(true);\r\n\t                this.errorResetAnim();\r\n\t                return;\r\n\t            }\r\n\t            if (this.decimalDot) {\r\n\t                this.decimalDot.style.display = \"none\";\r\n\t            }\r\n\t            this.root.classList.add(\"jackpotError\");\r\n\t            var oldValue = this.formatValue(this.previousCounterValue > 0 ? this.previousCounterValue.toString() : \"\", true);\r\n\t            var newValue = this.formatValue(\"OFFLINE\", true);\r\n\t            this.resetDigitTween(true);\r\n\t            this.animateDigits(oldValue, newValue, false, false, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, null);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.errorResetAnim = function () {\r\n\t        this.root.classList.add(\"jackpotExpired\");\r\n\t    };\r\n\t    JackpotCounter.prototype.checkError = function () {\r\n\t        if (this.inError) {\r\n\t            this.resetMainTween();\r\n\t            this.resetDigitTween();\r\n\t            this.isCounting = false;\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    JackpotCounter.prototype.removeError = function () {\r\n\t        if (this.inError) {\r\n\t            this.inError = false;\r\n\t            this.root.classList.remove(\"jackpotError\");\r\n\t            if (this.decimalDot) {\r\n\t                this.decimalDot.style.display = \"block\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.hasError = function () {\r\n\t        return this.inError;\r\n\t    };\r\n\t    JackpotCounter.prototype.refreshWithReset = function () {\r\n\t        this.hasWin();\r\n\t        this.root.classList.remove(\"jackpotWin\");\r\n\t        this.winAnimationDelay.stop();\r\n\t        this.resetMainTween();\r\n\t        this.resetDigitTween();\r\n\t        this.resetDigitsTween();\r\n\t        this.isCounting = false;\r\n\t        this.removeError();\r\n\t        this.reset(JackpotCounter.MinResetAnimCount - 3);\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitsTween = function () {\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            gsap_1.TweenLite.killTweensOf(this.digits[i].to);\r\n\t            gsap_1.TweenLite.killTweensOf(this.digits[i].from);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.animateDigits = function (oldValue, newValue, useBitmap, checkFirstDiff, duration, delay, ease, shuffle, callback) {\r\n\t        var firstDigitIndex = 0;\r\n\t        if (checkFirstDiff) {\r\n\t            for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t                var oldDigit = oldValue.charAt(i);\r\n\t                var newDigit = newValue.charAt(i);\r\n\t                if (oldDigit !== newDigit) {\r\n\t                    firstDigitIndex = i;\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = firstDigitIndex; i < JackpotCounter.Length; i++) {\r\n\t            var oldDigit = oldValue.charAt(i);\r\n\t            var newDigit = newValue.charAt(i);\r\n\t            this.animateDigit(i, oldDigit, newDigit, duration, delay, ease, useBitmap, shuffle ? (i % 2 === 0 ? 1 : -1) : 1, i === JackpotCounter.Length - 1 ? callback : null);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.animateDigit = function (index, fromValue, toValue, duration, delay, ease, useBitmap, direction, callback) {\r\n\t        var from = this.digits[index].from;\r\n\t        this.setTransformY(from, 0, delay);\r\n\t        this.setDigitValue(from, fromValue, useBitmap, true);\r\n\t        gsap_1.TweenLite.fromTo(from, duration, { y: 0 }, { y: this.settings.height * direction * -1, ease: ease, delay: delay });\r\n\t        var to = this.digits[index].to;\r\n\t        this.setTransformY(to, this.settings.height * direction, delay);\r\n\t        this.setDigitValue(to, toValue, useBitmap);\r\n\t        gsap_1.TweenLite.killTweensOf(to);\r\n\t        var tween = gsap_1.TweenLite.fromTo(to, duration, { y: this.settings.height * direction }, { y: 0, ease: ease, delay: delay });\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(callback)) {\r\n\t            this.digitTween = tween;\r\n\t            this.digitTween.eventCallback(\"onComplete\", callback, [], this);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.setDigitValue = function (elem, value, useBitmap, fromValue) {\r\n\t        if (fromValue === void 0) { fromValue = false; }\r\n\t        if (fromValue) {\r\n\t            if (useBitmap && elem.classList.contains(\"letter\")) {\r\n\t                useBitmap = false;\r\n\t            }\r\n\t            else if (!useBitmap && !elem.classList.contains(\"letter\")) {\r\n\t                useBitmap = true;\r\n\t            }\r\n\t        }\r\n\t        if (value == null || value === JackpotCounter.LeadingZeroLetter) {\r\n\t            elem.className = \"digit leadingZero\";\r\n\t        }\r\n\t        else {\r\n\t            if (!useBitmap) {\r\n\t                elem.textContent = value;\r\n\t                elem.className = \"digit letter\";\r\n\t            }\r\n\t            else {\r\n\t                elem.textContent = \"\";\r\n\t                elem.className = \"digit n\" + value;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.setTransformY = function (elem, y, delay) {\r\n\t        if (delay > 0) {\r\n\t            elem.style.transform = \"transform3d(0, \" + y + \"px, 0)\";\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.refresh = function () {\r\n\t        if (this.checkError()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.hasWin()) {\r\n\t            this.isCounting = true;\r\n\t            this.initWinAnimation();\r\n\t            return;\r\n\t        }\r\n\t        if (this.currentCounterValue == this.nextValue) {\r\n\t            this.resetDigitTween();\r\n\t            this.resetDigitsToBasePosition();\r\n\t            this.lastUpdateTime = Date.now();\r\n\t            var availableTime_1 = (this.nextDate - Date.now()) * 0.001;\r\n\t            if (availableTime_1 > 0) {\r\n\t                this.resetMainTween();\r\n\t                this.mainTween = gsap_1.TweenLite.fromTo(this, availableTime_1, { idleValue: 0 }, { idleValue: 100, ease: \"linear\" });\r\n\t                this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n\t            }\r\n\t            else {\r\n\t                this.isCounting = false;\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.currentCounterValue > this.nextValue) {\r\n\t            this.isCounting = false;\r\n\t            return;\r\n\t        }\r\n\t        var availableTime = (this.nextDate - Date.now()) * 0.001;\r\n\t        this.resetMainTween();\r\n\t        this.mainTween = gsap_1.TweenLite.fromTo(this, availableTime, { currentCounterValue: this.currentCounterValue }, { currentCounterValue: this.nextValue, ease: \"linear\", roundProps: \"currentCounterValue\" });\r\n\t        this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n\t        this.mainTween.eventCallback(\"onUpdate\", this.onRefreshTweenUpdate, [], this);\r\n\t        this.isCounting = true;\r\n\t    };\r\n\t    JackpotCounter.prototype.onRefreshTweenUpdate = function () {\r\n\t        if (this.digitTween == null) {\r\n\t            this.refreshCounter();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.refreshCounter = function () {\r\n\t        if (this.inError) {\r\n\t            this.resetDigitTween();\r\n\t            return;\r\n\t        }\r\n\t        if (this.previousCounterValue == this.currentCounterValue) {\r\n\t            this.resetDigitTween();\r\n\t            return;\r\n\t        }\r\n\t        var oldValue = this.formatValue(this.previousCounterValue.toString(), true);\r\n\t        var newValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.animateDigits(oldValue, newValue, true, true, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, this.refreshCounter);\r\n\t        this.previousCounterValue = this.currentCounterValue;\r\n\t    };\r\n\t    JackpotCounter.prototype.reset = function (resetAnimCount) {\r\n\t        if (resetAnimCount === void 0) { resetAnimCount = 0; }\r\n\t        this.resetAnimCount = resetAnimCount;\r\n\t        this.isCounting = true;\r\n\t        this.resetCounter();\r\n\t    };\r\n\t    JackpotCounter.prototype.resetCounter = function () {\r\n\t        if (this.checkError()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.resetAnimCount >= JackpotCounter.MinResetAnimCount - 1 && this.currentData != null) {\r\n\t            if (this.hasWin()) {\r\n\t                this.resetDigitTween();\r\n\t                this.isCounting = true;\r\n\t                this.initWinAnimation();\r\n\t                return;\r\n\t            }\r\n\t            var oldValue = this.formatValue(this.currentCounterValue.toString(), false);\r\n\t            var newValue = this.formatValue(this.previousValue.toString(), true);\r\n\t            this.currentCounterValue = this.previousValue;\r\n\t            this.previousCounterValue = this.previousValue;\r\n\t            this.animateDigits(oldValue, newValue, true, false, JackpotCounter.DigitAnimDuration * 10, 0, \"Back.easeOut\", true, this.resetFinished);\r\n\t        }\r\n\t        else {\r\n\t            this.resetAnimCount++;\r\n\t            var random = Math.random();\r\n\t            var length_1 = Math.pow(10, JackpotCounter.Length);\r\n\t            var value = Math.round(random * length_1);\r\n\t            var oldValue = this.formatValue(this.currentCounterValue > 0 ? this.currentCounterValue.toString() : \"\", false);\r\n\t            var newValue = this.formatValue(value.toString(), false);\r\n\t            this.animateDigits(oldValue, newValue, true, false, JackpotCounter.DigitAnimDuration, 0, \"linear\", true, this.resetCounter);\r\n\t            this.currentCounterValue = value;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetFinished = function () {\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.resetDigitTween();\r\n\t        this.isCounting = false;\r\n\t        this.refresh();\r\n\t    };\r\n\t    JackpotCounter.prototype.hasWin = function () {\r\n\t        var result = false;\r\n\t        if (this.currentData != null && this.currentData.lastWinAmount != null) {\r\n\t            var currentLastWin = this.overridedLastWinValue > -1\r\n\t                ? this.overridedLastWinValue\r\n\t                : this.normalizeValue(this.currentData.lastWinAmount);\r\n\t            var currentWinCount = this.currentData.winCount;\r\n\t            if (this.lastWinValue > -1) {\r\n\t                result = this.lastWinValue != currentLastWin;\r\n\t                if (!result && this.lastWinCount > -1 && currentWinCount > -1 && !this.winFromMinigame) {\r\n\t                    result = this.lastWinCount != currentWinCount;\r\n\t                }\r\n\t            }\r\n\t            this.lastWinCount = currentWinCount;\r\n\t            this.lastWinValue = currentLastWin;\r\n\t            this.overridedLastWinValue = -1;\r\n\t        }\r\n\t        return result || this.winFromMinigame;\r\n\t    };\r\n\t    JackpotCounter.prototype.initWinAnimation = function () {\r\n\t        this.resetMainTween();\r\n\t        if (this.digitTween != null) {\r\n\t            this.digitTween.eventCallback(\"onComplete\", this.startWinAnimation, [], this);\r\n\t        }\r\n\t        else {\r\n\t            this.startWinAnimation();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.startWinAnimation = function () {\r\n\t        if (this.currentCounterValue != this.lastWinValue) {\r\n\t            var oldValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t            var newValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\t            this.animateDigits(oldValue, newValue, true, true, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, this.showWinAnimation);\r\n\t            this.previousCounterValue = this.currentCounterValue;\r\n\t        }\r\n\t        else {\r\n\t            this.showWinAnimation();\r\n\t        }\r\n\t        this.winAnimationDelay.start(this.winFromMinigame ? JackpotCounter.WinFromMinigameAnimDuration : JackpotCounter.WinAnimDuration);\r\n\t    };\r\n\t    JackpotCounter.prototype.showWinAnimation = function () {\r\n\t        this.forceWinValue();\r\n\t        this.root.classList.add(\"jackpotWin\");\r\n\t        if (this.winFromMinigame) {\r\n\t            this.root.classList.add(\"fromMinigame\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.winAnimationFinished = function () {\r\n\t        this.winFromMinigame = false;\r\n\t        this.root.classList.remove(\"jackpotWin\", \"fromMinigame\");\r\n\t        this.reset();\r\n\t    };\r\n\t    JackpotCounter.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotCounter.prototype.getHeight = function () {\r\n\t        if (this.root.parentElement != null) {\r\n\t            this.root.parentElement.classList.add(\"baseCounterHeight\");\r\n\t            this.root.parentElement.offsetWidth;\r\n\t            var height = parseInt(window.getComputedStyle(this.root.parentElement).height);\r\n\t            this.root.parentElement.classList.remove(\"baseCounterHeight\");\r\n\t            return height;\r\n\t        }\r\n\t        return 0;\r\n\t    };\r\n\t    JackpotCounter.prototype.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotCounter.prototype.normalizeValue = function (value) {\r\n\t        var formattedValue = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, value.toString());\r\n\t        formattedValue = formattedValue.replace(\".\", \"\");\r\n\t        value = parseInt(formattedValue);\r\n\t        if (value >= Math.pow(10, JackpotCounter.Length)) {\r\n\t            var normalizedValue = \"\";\r\n\t            for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t                normalizedValue = \"9\" + normalizedValue;\r\n\t            }\r\n\t            return parseInt(normalizedValue);\r\n\t        }\r\n\t        return value;\r\n\t    };\r\n\t    JackpotCounter.prototype.formatValue = function (formattedValue, leading) {\r\n\t        if (formattedValue.length > JackpotCounter.Length) {\r\n\t            formattedValue = formattedValue.substr(formattedValue.length - JackpotCounter.Length);\r\n\t        }\r\n\t        else {\r\n\t            while (formattedValue.length < JackpotCounter.DecimalPlaces + 1) {\r\n\t                formattedValue = \"0\" + formattedValue;\r\n\t            }\r\n\t            while (formattedValue.length < JackpotCounter.Length) {\r\n\t                formattedValue = \"\" + (leading ? JackpotCounter.LeadingZeroLetter : \"0\") + formattedValue;\r\n\t            }\r\n\t        }\r\n\t        return formattedValue;\r\n\t    };\r\n\t    JackpotCounter.prototype.resetMainTween = function () {\r\n\t        if (this.mainTween != null) {\r\n\t            this.mainTween.kill();\r\n\t            this.mainTween.eventCallback(\"onComplete\", null);\r\n\t            this.mainTween.eventCallback(\"onUpdate\", null);\r\n\t            this.mainTween = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitTween = function (onlyCallback) {\r\n\t        if (onlyCallback === void 0) { onlyCallback = false; }\r\n\t        if (this.digitTween != null) {\r\n\t            this.digitTween.eventCallback(\"onComplete\", null);\r\n\t            if (!onlyCallback) {\r\n\t                this.digitTween.kill();\r\n\t            }\r\n\t            this.digitTween = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitsToBasePosition = function () {\r\n\t        var currentValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\t            this.digits[i].from.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\");\r\n\t            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.forceWinValue = function () {\r\n\t        var currentValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\t            this.digits[i].from.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\");\r\n\t            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.LeadingZeroLetter = \" \";\r\n\t    JackpotCounter.WinAnimDuration = 240;\r\n\t    JackpotCounter.WinFromMinigameAnimDuration = 540;\r\n\t    JackpotCounter.Length = 10;\r\n\t    JackpotCounter.DecimalPlaces = 2;\r\n\t    JackpotCounter.DigitAnimDuration = 0.1;\r\n\t    JackpotCounter.MinResetAnimCount = 15;\r\n\t    JackpotCounter.UseThousandsSeparator = true;\r\n\t    JackpotCounter.MaxNextTimeDiff = 2 * 60;\r\n\t    return JackpotCounter;\r\n\t}());\r\n\texports.JackpotCounter = JackpotCounter;\r\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Strings_1 = __webpack_require__(4);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Languages = (function () {\r\n\t    function Languages() {\r\n\t    }\r\n\t    Languages.getRid = function (rid) {\r\n\t        var value = [];\r\n\t        for (var _i = 1; _i < arguments.length; _i++) {\r\n\t            value[_i - 1] = arguments[_i];\r\n\t        }\r\n\t        if (value != null && value.length > 0) {\r\n\t            return Strings_1.Strings.getWithValues.apply(Strings_1.Strings, [rid].concat(value));\r\n\t        }\r\n\t        else {\r\n\t            return Strings_1.Strings.get(rid);\r\n\t        }\r\n\t    };\r\n\t    Languages.formatText = function (ridType, text) {\r\n\t        switch (ridType) {\r\n\t            case this.FormatMoney:\r\n\t                return neo_common_1.NumberUtils.valueToNumber(text, AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknow RidType: \" + ridType);\r\n\t                }\r\n\t        }\r\n\t        return text;\r\n\t    };\r\n\t    Languages.filterText = function (ridFilter, text) {\r\n\t        switch (ridFilter) {\r\n\t            case this.FilterNoZero:\r\n\t                if (parseFloat(text) <= 0) {\r\n\t                    return \"\";\r\n\t                }\r\n\t                else {\r\n\t                    return text;\r\n\t                }\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknow RidFilter: \" + ridFilter);\r\n\t                }\r\n\t        }\r\n\t        return text;\r\n\t    };\r\n\t    Languages.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Languages\", s);\r\n\t        }\r\n\t    };\r\n\t    Languages.FormatMoney = \"MONEY\";\r\n\t    Languages.FilterNoZero = \"NO_ZERO\";\r\n\t    return Languages;\r\n\t}());\r\n\texports.Languages = Languages;\r\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar JackpotData_1 = __webpack_require__(27);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar JackpotHistoryDialog = (function () {\r\n\t    function JackpotHistoryDialog(index, holder) {\r\n\t        this.root = this.createBaseLayout(index);\r\n\t        this.currency = \"\";\r\n\t        this.historyDataElements = {};\r\n\t        holder.appendChild(this.root);\r\n\t    }\r\n\t    JackpotHistoryDialog.prototype.initialize = function (initData) {\r\n\t        this.createDataSections();\r\n\t        this.initialized = true;\r\n\t        if (initData) {\r\n\t            this.assign(initData);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createBaseLayout = function (index) {\r\n\t        return this.createElement(\"div\", \"jackpotHistoryDialog _disabled l-\" + index);\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createDataSections = function () {\r\n\t        if (this.root) {\r\n\t            var section = void 0;\r\n\t            var dataHolder = void 0;\r\n\t            var closeBtn = this.createElement(\"div\", \"jackpotCloseBtn\", this.root);\r\n\t            closeBtn.addEventListener(\"touchstart\", function (e) {\r\n\t                e.preventDefault();\r\n\t                e.stopPropagation();\r\n\t                Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t            });\r\n\t            closeBtn.addEventListener(\"click\", function () {\r\n\t                Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t            });\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection\", this.root);\r\n\t            this.createElement(\"div\", \"jackpotLevel\", section);\r\n\t            this.createDataElement(\"div\", \"jackpotTitle\", JackpotData_1.JackpotData.DataCode, section);\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_HIGHEST_WIN\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataHighestWinDate, dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataHighestWinAmount, section);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, \"-\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NUM_WINS\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataWinCount, dataHolder);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataWinCount, \"-\");\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_LAST_WIN\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataLastWinDate, dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataLastWinAmount, section);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinDate, \"-\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            this.showWins(false);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.updateDataWithCurrency = function () {\r\n\t        if (this.lastData != null) {\r\n\t            this.assign(this.lastData);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.error = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        if (useResetAnim) {\r\n\t            this.root.classList.add(\"jackpotExpired\");\r\n\t        }\r\n\t        else {\r\n\t            if (this.initialized) {\r\n\t                this.showWins(false);\r\n\t                this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t                this.assingData(JackpotData_1.JackpotData.DataLastWinDate, \"-\");\r\n\t                this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t                this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, \"-\");\r\n\t                this.assingData(JackpotData_1.JackpotData.DataWinCount, \"-\");\r\n\t            }\r\n\t            else {\r\n\t                this.initialize(null);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.assign = function (data) {\r\n\t        this.lastData = data;\r\n\t        if (this.initialized) {\r\n\t            this.assingData(JackpotData_1.JackpotData.DataCode, data.code);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, data.lastWinAmount ? Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, data.lastWinAmount.toString()) : null, \"money\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinDate, data.lastWinDate, \"date\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, data.highestWinAmount\r\n\t                ? Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, data.highestWinAmount.toString())\r\n\t                : null, \"money\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, data.highestWinDate, \"date\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataWinCount, data.winCount ? data.winCount.toString() : null);\r\n\t            this.showWins();\r\n\t        }\r\n\t        else {\r\n\t            this.initialize(data);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.assingData = function (dataId, value, format) {\r\n\t        if (format === void 0) { format = \"\"; }\r\n\t        if (this.historyDataElements && this.historyDataElements[dataId] && !neo_common_1.StringUtils.isNullOrEmpty(value)) {\r\n\t            if (format != \"\") {\r\n\t                switch (format) {\r\n\t                    case \"money\":\r\n\t                        value = value + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                        break;\r\n\t                    case \"date\":\r\n\t                        var date = new Date(value);\r\n\t                        value =\r\n\t                            this.zerosPad(date.getDate(), 2) +\r\n\t                                \". \" +\r\n\t                                this.zerosPad(date.getMonth() + 1, 2) +\r\n\t                                \". \" +\r\n\t                                date.getFullYear();\r\n\t                }\r\n\t            }\r\n\t            this.historyDataElements[dataId].textContent = value;\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.openDialog = function () {\r\n\t        this.root.classList.remove(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.closeDialog = function () {\r\n\t        this.root.classList.add(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.isOpen = function () {\r\n\t        return !this.root.classList.contains(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.showWins = function (enabled) {\r\n\t        if (enabled === void 0) { enabled = true; }\r\n\t        var winSections = this.root.getElementsByClassName(\"jackpotHistoryData\");\r\n\t        for (var i = 0; i < winSections.length; i++) {\r\n\t            var elem = winSections[i];\r\n\t            elem.style.display = enabled ? \"\" : \"none\";\r\n\t        }\r\n\t        var titleSections = this.root.getElementsByClassName(\"jackpotTitle\");\r\n\t        for (var i = 0; i < titleSections.length; i++) {\r\n\t            var elem = titleSections[i];\r\n\t            elem.style.display = enabled ? (elem.textContent == \"\" ? \"none\" : \"\") : \"none\";\r\n\t        }\r\n\t        var noWinSections = this.root.getElementsByClassName(\"jackpotHistoryNoWins\");\r\n\t        if (enabled) {\r\n\t            for (var i = 0; i < noWinSections.length; i++) {\r\n\t                noWinSections[i].parentNode.removeChild(noWinSections[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (noWinSections.length == 0) {\r\n\t                var section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryNoWins\", this.root);\r\n\t                this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataNoWins, section);\r\n\t                this.assingData(JackpotData_1.JackpotData.DataNoWins, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createTextElement = function (tag, className, text, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        elem.textContent = text;\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createDataElement = function (tag, className, dataId, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        if (this.historyDataElements) {\r\n\t            this.historyDataElements[dataId] = elem;\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    return JackpotHistoryDialog;\r\n\t}());\r\n\texports.JackpotHistoryDialog = JackpotHistoryDialog;\r\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar JackpotData = (function () {\r\n\t    function JackpotData() {\r\n\t    }\r\n\t    JackpotData.DataCode = \"code\";\r\n\t    JackpotData.DataHighestWinDate = \"highestWinDate\";\r\n\t    JackpotData.DataHighestWinAmount = \"highestWinAmount\";\r\n\t    JackpotData.DataWinCount = \"winCount\";\r\n\t    JackpotData.DataLastWinDate = \"lastWinDate\";\r\n\t    JackpotData.DataLastWinAmount = \"lastWinAmount\";\r\n\t    JackpotData.DataNoWins = \"noWins\";\r\n\t    return JackpotData;\r\n\t}());\r\n\texports.JackpotData = JackpotData;\r\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GameData = (function () {\r\n\t    function GameData() {\r\n\t    }\r\n\t    GameData.DataTicker = \"TICKER\";\r\n\t    GameData.DataRoundId = \"ROUND_ID\";\r\n\t    GameData.DataBuildVersion = \"BUILD_VERSION\";\r\n\t    GameData.DataBalanceReal = \"BALANCE_REAL\";\r\n\t    GameData.DataBalanceBonus = \"BALANCE_BONUS\";\r\n\t    GameData.DataBalanceTotal = \"BALANCE_TOTAL\";\r\n\t    GameData.DataBalanceRealDenom = \"BALANCE_REAL_DENOM\";\r\n\t    GameData.DataBalanceBonusDenom = \"BALANCE_BONUS_DENOM\";\r\n\t    GameData.DataBalanceTotalDenom = \"BALANCE_TOTAL_DENOM\";\r\n\t    GameData.DataCurrency = \"CURRENCY\";\r\n\t    GameData.DataDenomination = \"DENOMINATION\";\r\n\t    GameData.DataCurrentWin = \"CURRENT_WIN\";\r\n\t    GameData.DataTotalWin = \"TOTAL_WIN\";\r\n\t    GameData.DataTotalWinDenom = \"TOTAL_WIN_DENOM\";\r\n\t    GameData.DataCoinSize = \"COIN_SIZE\";\r\n\t    GameData.DataCointCount = \"COIN_COUNT\";\r\n\t    GameData.DataPaylineCount = \"PAYLINE_COUNT\";\r\n\t    GameData.DataBet = \"BET\";\r\n\t    GameData.DataBetPosition = \"BET_POSITION\";\r\n\t    GameData.DataGambleCurrentWin = \"GAMBLE_WIN\";\r\n\t    GameData.DataGambleColorWin = \"GAMBLE_COLOR_WIN\";\r\n\t    GameData.DataGambleCurrentWinDenom = \"GAMBLE_WIN_DENOM\";\r\n\t    GameData.DataGambleColorWinDenom = \"GAMBLE_COLOR_WIN_DENOM\";\r\n\t    GameData.DataAutoplayCount = \"AUTOPLAY_COUNT\";\r\n\t    GameData.DataFreeSpinTotalWin = \"FREESPIN_TOTAL_WIN\";\r\n\t    GameData.DataFreeSpinTotalWinDenom = \"FREESPIN_TOTAL_WIN_DENOM\";\r\n\t    GameData.DataFreeSpinsCount = \"FREESPINS_COUNT\";\r\n\t    GameData.DataFreeSpinsRemainingCount = \"FREESPINS_REMAINING_COUNT\";\r\n\t    GameData.DataFreeSpinsWonCount = \"FREESPINS_WON_COUNT\";\r\n\t    GameData.DataGambleAttempts = \"GAMBLE_ATTEMPTS\";\r\n\t    GameData.DataHelpGameLimit = \"HELP_GAME_LIMIT\";\r\n\t    GameData.DataHelpGambleLimit = \"HELP_GAMBLE_LIMIT\";\r\n\t    GameData.DataHelpGambleCountLimit = \"HELP_GAMBLE_COUNT_LIMIT\";\r\n\t    GameData.DataHelpRTP = \"HELP_RTP\";\r\n\t    GameData.DataHelpMaxPayoutProbability = \"HELP_MAX_PAYOUT_PROBABILITY\";\r\n\t    GameData.DataHelpMaxPayoutFrequency = \"HELP_MAX_PAYOUT_FREQUENCY\";\r\n\t    GameData.DataHelpMinBet = \"HELP_MIN_BET\";\r\n\t    GameData.DataHelpMaxBet = \"HELP_MAX_BET\";\r\n\t    GameData.DataHelpVersion = \"HELP_VERSION\";\r\n\t    GameData.DataExpirationResolveHours = \"EXPIRATION_RESOLVE_HOURS\";\r\n\t    GameData.DataFrbRemainginCount = \"FRB_REMAINING_COUNT\";\r\n\t    GameData.DataFrbAssignedCount = \"FRB_ASSIGNED_COUNT\";\r\n\t    GameData.DataFrbRulesLink = \"FRB_RULES_LINK\";\r\n\t    GameData.DataFrbValidTo = \"FRB_VALID_TO\";\r\n\t    GameData.DataFrbExpiryTime = \"FRB_EXPIRY_TIME\";\r\n\t    GameData.DataFrbWin = \"FRB_WIN\";\r\n\t    GameData.DataGameTitle = \"GAME_TITLE\";\r\n\t    GameData.DataHelpJackpotVisibleLimit = \"HELP_JACKPOT_VISIBLE_LIMIT\";\r\n\t    GameData.DataHelpJackpotQualifyingBetsMin = \"HELP_JACKPOT_QUALIFYING_BETS_MIN\";\r\n\t    GameData.DataHelpJackpotQualifyingBetsMax = \"HELP_JACKPOT_QUALIFYING_BETS_MAX\";\r\n\t    return GameData;\r\n\t}());\r\n\texports.GameData = GameData;\r\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar UserAction_1 = __webpack_require__(49);\r\n\tvar QuickspinDialog_1 = __webpack_require__(50);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar GameEvents = neo_games_1.ClientHost.GameEvents;\r\n\tvar DataManager = (function () {\r\n\t    function DataManager() {\r\n\t    }\r\n\t    Object.defineProperty(DataManager, \"Autoplay\", {\r\n\t        get: function () {\r\n\t            return DataManager._autoplay;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            if (DataManager._autoplay != value) {\r\n\t                if (value) {\r\n\t                    DataManager.AutoplayStarted = true;\r\n\t                    neo_games_1.Platforms.Platforms.autoplayStarted();\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.autoplayFinished({\r\n\t                        autoplayCount: this.AutoplayCount,\r\n\t                        autoplayLossLimit: this.AutoplayLossLimit,\r\n\t                        autoplayWinLimit: this.AutoplayWinLimit,\r\n\t                    });\r\n\t                }\r\n\t                DataManager._autoplay = value;\r\n\t            }\r\n\t            else {\r\n\t                DataManager.AutoplayStarted = false;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DataManager.controlAutoplay = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null) {\r\n\t            GameApp_1.GameApp.gameClient.setAutoplay(DataManager.Autoplay);\r\n\t        }\r\n\t    };\r\n\t    DataManager.autoplayEnabled = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled && DataManager.AutoplayEnabled) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DataManager.quickspinEnabled = function () {\r\n\t        return DataManager.gameEnableQuickSpin() && DataManager.QuickspinEnabled;\r\n\t    };\r\n\t    DataManager.gameEnableQuickSpin = function () {\r\n\t        return (AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop &&\r\n\t            AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration == 0 &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan == 0 &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameEnableQuickSpin);\r\n\t    };\r\n\t    DataManager.quickspinSet = function (toValue) {\r\n\t        if (DataManager.gameEnableQuickSpin()) {\r\n\t            if (typeof toValue === \"boolean\") {\r\n\t                DataManager.QuickspinEnabled = toValue;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionQuickspinToggle, toValue ? \"true\" : \"false\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.QuickspinEnabled = !DataManager.QuickspinEnabled;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionQuickspinToggle, DataManager.QuickspinEnabled ? \"true\" : \"false\");\r\n\t            }\r\n\t            if (false) {\r\n\t                this.log(\"Quickspin \" + (DataManager.QuickspinEnabled ? \"on\" : \"off\"));\r\n\t            }\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.quickSpinEnabled(DataManager.QuickspinEnabled);\r\n\t        return DataManager.QuickspinEnabled;\r\n\t    };\r\n\t    DataManager.quickspinStopped = function () {\r\n\t        if (DataManager._quickstopTimes != null) {\r\n\t            DataManager._quickstopTimes.push(Date.now() * 0.001);\r\n\t            if (DataManager._quickstopTimes.length == AppContext_1.AppContext.gameConfiguration.QuickSpinDialogCount) {\r\n\t                var timeDiff = DataManager._quickstopTimes[DataManager._quickstopTimes.length - 1] -\r\n\t                    DataManager._quickstopTimes[0];\r\n\t                if (timeDiff < AppContext_1.AppContext.gameConfiguration.QuickSpinDecayDelay) {\r\n\t                    if (DataManager.gameEnableQuickSpin() && !DataManager.QuickspinEnabled) {\r\n\t                        QuickspinDialog_1.QuickspinDialog.openDialog();\r\n\t                        DataManager._quickstopTimes = null;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    DataManager._quickstopTimes.shift();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.vibrationSet = function (toValue) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GameEnableVibration) {\r\n\t            if (typeof toValue === \"boolean\") {\r\n\t                DataManager.VibrationEnabled = toValue;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionVibrationToggle, toValue ? \"true\" : \"false\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.VibrationEnabled = !DataManager.VibrationEnabled;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionVibrationToggle, DataManager.VibrationEnabled ? \"true\" : \"false\");\r\n\t            }\r\n\t            if (false) {\r\n\t                this.log(\"Vibration \" + (DataManager.VibrationEnabled ? \"on\" : \"off\"));\r\n\t            }\r\n\t        }\r\n\t        return DataManager.VibrationEnabled;\r\n\t    };\r\n\t    DataManager.updateResponseData = function (init) {\r\n\t        DataManager.GameRoundClosed = false;\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(GameManager_1.GameManager.gameResponse)) {\r\n\t            var status_1 = GameManager_1.GameManager.gameResponse.status;\r\n\t            if (status_1 != null && status_1 === \"closed\") {\r\n\t                DataManager.GameRoundClosed = true;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.limits != null) {\r\n\t                DataManager.GameLimit = true;\r\n\t            }\r\n\t            else {\r\n\t                DataManager.GameLimit = false;\r\n\t            }\r\n\t            if (init || !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                BalanceManager_1.BalanceManager.setBalance();\r\n\t            }\r\n\t            if (init) {\r\n\t                var initResponse = GameManager_1.GameManager.gameResponse;\r\n\t                if (initResponse.initData != null && initResponse.initData.currency != null) {\r\n\t                    DataManager.updateGameDataFromModule(GameData_1.GameData.DataCurrency, initResponse.initData.currency);\r\n\t                }\r\n\t                BetManager_1.BetManager.initializeBet();\r\n\t                DataManager.configureHelpData();\r\n\t                if (GameManager_1.GameManager.gameResponse.balance != null &&\r\n\t                    GameManager_1.GameManager.gameResponse.balance.bonus != null &&\r\n\t                    GameManager_1.GameManager.gameResponse.balance.bonus >= BetManager_1.BetManager.Bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                }\r\n\t                if (GameManager_1.GameManager.baseResponse.initData != null) {\r\n\t                    if (GameManager_1.GameManager.baseResponse.initData.customData != null &&\r\n\t                        GameManager_1.GameManager.baseResponse.initData.customData[\"betsData\"] !== null) {\r\n\t                        this.customBetsData = GameManager_1.GameManager.baseResponse.initData.customData[\"betsData\"];\r\n\t                    }\r\n\t                }\r\n\t                DataManager.updateDataElements();\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.roundId != null) {\r\n\t                var elements = document.getElementsByClassName(\"roundId\");\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    if (element != null) {\r\n\t                        if (!AppContext_1.AppContext.gameConfiguration.GameRoundIdVisible) {\r\n\t                            element.style.opacity = \"0\";\r\n\t                        }\r\n\t                        else if (GameManager_1.GameManager.gameResponse.roundId === -1) {\r\n\t                            element.style.opacity = \"1\";\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                DataManager.updateGameDataFromModule(GameData_1.GameData.DataRoundId, GameManager_1.GameManager.gameResponse.roundId === -1 ? \"DEMO\" : GameManager_1.GameManager.gameResponse.roundId.toString());\r\n\t            }\r\n\t            DataManager.updateTotalWin();\r\n\t        }\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame()) {\r\n\t            BalanceManager_1.BalanceManager.poolingBalance();\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] &&\r\n\t            GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].offline === true) {\r\n\t            Jackpot_1.Jackpot.showError();\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.reinitialize();\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateCustomBetsData = function () {\r\n\t        var customData = GameManager_1.GameManager.baseResponse.customData;\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(customData) && customData[\"betAmount\"] == BetManager_1.BetManager.Bet) {\r\n\t            for (var key in DataManager.customBetsData) {\r\n\t                if (DataManager.customBetsData[key].betAmount == BetManager_1.BetManager.Bet) {\r\n\t                    DataManager.customBetsData[key].reelsData = GameManager_1.GameManager.baseResponse.screen.reels;\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.getCustomBetDataForCurrentBetAmount = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(DataManager.customBetsData)) {\r\n\t            for (var key in DataManager.customBetsData) {\r\n\t                var customBetData = DataManager.customBetsData[key];\r\n\t                if (customBetData.betAmount == BetManager_1.BetManager.Bet) {\r\n\t                    return customBetData;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    DataManager.updateTotalWin = function () {\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null &&\r\n\t                GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                if (DataManager.GameRoundClosed) {\r\n\t                    var totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t                    DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, totalWin.toString());\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                        DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.gameResponse.totalWin != null) {\r\n\t                        var totalWin = neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"], GameManager_1.GameManager.gameResponse.totalWin);\r\n\t                        DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, totalWin.toString());\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (GameManager_1.GameManager.gameResponse.totalWin != null) {\r\n\t            DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateTotalGain = function (calculate, customWin) {\r\n\t        if (calculate === void 0) { calculate = false; }\r\n\t        if (customWin === void 0) { customWin = 0; }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalGain != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.TOTAL_GAIN) > -1) {\r\n\t            var totalGain = GameManager_1.GameManager.gameResponse.totalGain;\r\n\t            if (calculate) {\r\n\t                var bet = FreeRoundBonus_1.FreeRoundBonus.inFrb ? 0 : BetManager_1.BetManager.Bet;\r\n\t                totalGain = parseFloat(neo_common_1.NumberUtils.subtract(totalGain, bet));\r\n\t                if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n\t                    totalGain = parseFloat(neo_common_1.NumberUtils.add(totalGain, GameManager_1.GameManager.gameResponse.totalWin));\r\n\t                }\r\n\t            }\r\n\t            if (customWin > 0) {\r\n\t                totalGain = parseFloat(neo_common_1.NumberUtils.add(totalGain, customWin));\r\n\t            }\r\n\t            GameManager_1.GameManager.gameResponse.totalGain = totalGain;\r\n\t            var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t            var resize = !statusBar.hasActiveWidget();\r\n\t            statusBar.add(neo_games_1.Plugins.StatusBar.Types.TOTAL_GAIN, \"totalGain\", Languages_1.Languages.getRid(\"SB_INFO_TOTAL_GAIN\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, totalGain.toString())) +\r\n\t                \" \" +\r\n\t                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            if (resize) {\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateGameDataFromModule = function (dataId, value) {\r\n\t        if (dataId === GameData_1.GameData.DataCurrency) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(DataManager.DisplayCurrencies)) {\r\n\t                DataManager.DisplayCurrencies = {};\r\n\t                AppContext_1.AppContext.gameConfiguration.DisplayCurrencies.forEach(function (rawPair) {\r\n\t                    var parsedPair = neo_common_1.ArrayUtils.stringArray(rawPair);\r\n\t                    DataManager.DisplayCurrencies[parsedPair[0]] = parsedPair[1];\r\n\t                });\r\n\t            }\r\n\t            if (DataManager.DisplayCurrencies.hasOwnProperty(value)) {\r\n\t                DataManager._gameData[dataId] = DataManager.DisplayCurrencies[value];\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        DataManager._gameData[dataId] = value;\r\n\t    };\r\n\t    DataManager.getDataById = function (dataId) {\r\n\t        if (DataManager._gameData[dataId] != null) {\r\n\t            return DataManager._gameData[dataId];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    DataManager.updateDataElement = function (dataId, customValue) {\r\n\t        if (customValue != null) {\r\n\t            HtmlController_1.HtmlController.updateDataElement(dataId, customValue);\r\n\t        }\r\n\t        else {\r\n\t            if (DataManager._gameData[dataId] != null) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(dataId, DataManager._gameData[dataId]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateDataElements = function () {\r\n\t        HtmlController_1.HtmlController.updateDataElements(DataManager._gameData);\r\n\t        DataManager.updateTotalGain();\r\n\t    };\r\n\t    DataManager.getServerTime = function () {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient.sendServerTimerRequest().then(function (response) {\r\n\t                DataManager.serverTimeReceived(response);\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseServerTime &&\r\n\t                    neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl)) {\r\n\t                    setTimeout(function () {\r\n\t                        DataManager.getServerTime();\r\n\t                    }, 30000);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    DataManager.serverTimeReceived = function (response) {\r\n\t        if (response == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (response.utcTime == null && response.time == null) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager.utcTime = response.utcTime;\r\n\t        DataManager.time = response.time;\r\n\t        DataManager.serverTimeResponseTimestamp = Date.now();\r\n\t        if (DataManager.utcTime != null) {\r\n\t            if (DataManager.utcTime.indexOf(\"Z\") == -1) {\r\n\t                DataManager.utcTime = DataManager.utcTime + \"Z\";\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.clockSync(Date.now() - Date.parse(DataManager.utcTime));\r\n\t        }\r\n\t        if (DataManager.serverTimeOffset === -1) {\r\n\t            var currentTime = new Date().getTime();\r\n\t            var serverTime = Date.parse(DataManager.utcTime ? DataManager.utcTime.replace(\"Z\", \"\") : DataManager.time);\r\n\t            DataManager.serverTimeOffset = serverTime - currentTime;\r\n\t        }\r\n\t    };\r\n\t    DataManager.getFormattedTime = function (time) {\r\n\t        if (time == null) {\r\n\t            return null;\r\n\t        }\r\n\t        var year = time.getFullYear();\r\n\t        var month = DataManager.zerosPad(time.getMonth() + 1, 2);\r\n\t        var day = DataManager.zerosPad(time.getDate(), 2);\r\n\t        var hours = DataManager.zerosPad(time.getHours(), 2);\r\n\t        var minutes = DataManager.zerosPad(time.getMinutes(), 2);\r\n\t        var seconds = DataManager.zerosPad(time.getSeconds(), 2);\r\n\t        var milliseconds = time.getMilliseconds();\r\n\t        return year + \"-\" + month + \"-\" + day + \"T\" + hours + \":\" + minutes + \":\" + seconds + \".\" + milliseconds;\r\n\t    };\r\n\t    DataManager.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    DataManager.getTimeData = function () {\r\n\t        var currentTime = new Date();\r\n\t        var utcTime = DataManager.getUTCTime();\r\n\t        var machineLocalTimeZone = currentTime.getTimezoneOffset() * -1;\r\n\t        return {\r\n\t            utcTime: utcTime,\r\n\t            machineLocalTimeZone: machineLocalTimeZone,\r\n\t        };\r\n\t    };\r\n\t    DataManager.getUTCTime = function () {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(DataManager.utcTime)) {\r\n\t            var currentTime = new Date();\r\n\t            var utcResponseTimestamp = Date.parse(DataManager.utcTime);\r\n\t            var lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n\t            return new Date(utcResponseTimestamp + lastResponseDiff).toISOString();\r\n\t        }\r\n\t        return new Date().toISOString();\r\n\t    };\r\n\t    DataManager.getGameTime = function (utcTime) {\r\n\t        if (utcTime.indexOf(\"Z\") == -1) {\r\n\t            utcTime = utcTime + \"Z\";\r\n\t        }\r\n\t        var utcTimestamp = Date.parse(utcTime.replace(\"Z\", \"\"));\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseServerTime) {\r\n\t            var offset = DataManager.utcTime ? DataManager.serverTimeOffset : 0;\r\n\t            return DataManager.getFormattedTime(new Date(utcTimestamp - offset));\r\n\t        }\r\n\t        return DataManager.getFormattedTime(new Date(utcTime));\r\n\t    };\r\n\t    DataManager.getNonUTCGameTime = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UseServerTime) {\r\n\t            return DataManager.getFormattedTime(new Date());\r\n\t        }\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(DataManager.time)) {\r\n\t            var currentTime = new Date();\r\n\t            var utcResponseTimestamp = Date.parse(DataManager.time);\r\n\t            var lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n\t            return DataManager.getFormattedTime(new Date(utcResponseTimestamp + lastResponseDiff - DataManager.serverTimeOffset));\r\n\t        }\r\n\t        return DataManager.getFormattedTime(new Date());\r\n\t    };\r\n\t    DataManager.showTime = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UIShowTime) {\r\n\t            return;\r\n\t        }\r\n\t        var today = new Date(DataManager.getNonUTCGameTime());\r\n\t        if (DataManager.utcTime != null) {\r\n\t            var timeData = DataManager.getTimeData();\r\n\t            today = new Date(DataManager.getGameTime(timeData.utcTime));\r\n\t        }\r\n\t        var h = today.getHours();\r\n\t        var hFixed = h + \"\";\r\n\t        if (h < 10) {\r\n\t            hFixed = \"0\" + h;\r\n\t        }\r\n\t        var m = today.getMinutes();\r\n\t        var mFixed = m + \"\";\r\n\t        if (m < 10) {\r\n\t            mFixed = \"0\" + m;\r\n\t        }\r\n\t        DataManager.updateDataElement(\"TIME\", hFixed + \":\" + mFixed);\r\n\t        setTimeout(function () {\r\n\t            DataManager.showTime();\r\n\t        }, 1000);\r\n\t    };\r\n\t    DataManager.showSessionTime = function (time) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GUIShowSessionTime) {\r\n\t            if (time < 0) {\r\n\t                time = 0;\r\n\t            }\r\n\t            var sec_num = time;\r\n\t            var hours = Math.floor(sec_num / 3600);\r\n\t            var minutes = Math.floor((sec_num - hours * 3600) / 60);\r\n\t            var seconds = sec_num - hours * 3600 - minutes * 60;\r\n\t            var hoursS = hours.toString();\r\n\t            var minutesS = minutes.toString();\r\n\t            var secondsS = seconds.toString();\r\n\t            if (hours < 10) {\r\n\t                hoursS = \"0\" + hours;\r\n\t            }\r\n\t            if (minutes < 10) {\r\n\t                minutesS = \"0\" + minutes;\r\n\t            }\r\n\t            if (seconds < 10) {\r\n\t                secondsS = \"0\" + seconds;\r\n\t            }\r\n\t            var pre = AppContext_1.AppContext.gameConfiguration.UIShowTime ? \"&nbsp;|&nbsp;\" : \"\";\r\n\t            DataManager.updateDataElement(\"SESSION_TIME\", pre + hoursS + \":\" + minutesS + \":\" + secondsS);\r\n\t            time++;\r\n\t            setTimeout(function () {\r\n\t                DataManager.showSessionTime(time);\r\n\t            }, 1000);\r\n\t        }\r\n\t    };\r\n\t    DataManager.configureGameData = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage) > -1) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.StatusBarData != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.StatusBarData[neo_games_1.Plugins.StatusBar.Types.StatusBarMessage] != null) {\r\n\t                var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                statusBar.add(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", AppContext_1.AppContext.gameConfiguration.StatusBarData[neo_games_1.Plugins.StatusBar.Types.StatusBarMessage]);\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t        var gameTitle = document.getElementById(\"gameTitle\");\r\n\t        if (gameTitle != null) {\r\n\t            DataManager.updateDataElement(GameData_1.GameData.DataGameTitle, gameTitle.innerHTML);\r\n\t            var gameHeadline = document.getElementById(\"gameHeadline\");\r\n\t            if (gameHeadline != null) {\r\n\t                gameHeadline.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t        DataManager.hideDataElements(\"helpFRBNote\");\r\n\t        DataManager.hideDataElements(\"helpFRBNote2\");\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan > 0 || AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop) {\r\n\t                DataManager.showDataElements(AppContext_1.AppContext.gameConfiguration.GameEnableQuickSpin ? \"helpFRBNote\" : \"helpFRBNote2\");\r\n\t            }\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop) {\r\n\t            DataManager.hideDataElements(\"GameEnableReelsStop\");\r\n\t        }\r\n\t        else {\r\n\t            DataManager.hideDataElements(\"GameDisableReelsStop\");\r\n\t        }\r\n\t        if (!DataManager.gameEnableQuickSpin()) {\r\n\t            DataManager.hideDataElements(\"quickSpinSettings\");\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.GameEnableVibration) {\r\n\t            DataManager.hideDataElements(\"vibrationSettings\");\r\n\t        }\r\n\t        if (!DataManager.hasSettingsMenu()) {\r\n\t            DataManager.hideDataElements(\"helpGameSettings\");\r\n\t        }\r\n\t    };\r\n\t    DataManager.hasSettingsMenu = function () {\r\n\t        if (DataManager.gameEnableQuickSpin()) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DataManager.configureHelpData = function () {\r\n\t        DataManager.showDataElements(\"gambleAttempts\");\r\n\t        DataManager.showDataElements(\"helpGameLimit\");\r\n\t        DataManager.showDataElements(\"helpGambleLimit\");\r\n\t        DataManager.showDataElements(\"helpGambleCountLimit\");\r\n\t        DataManager.showDataElements(\"helpJoker\");\r\n\t        DataManager.showDataElements(\"helpRTP\");\r\n\t        DataManager.showDataElements(\"totalRTP\");\r\n\t        DataManager.hideDataElements(\"helpVersion\");\r\n\t        DataManager.showDataElements(\"helpJackpotVisibleLimit\");\r\n\t        DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsMin\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsMax\");\r\n\t        DataManager.hideDataElements(\"helpShowCumulativeWinLimit\");\r\n\t        DataManager.hideDataElements(\"helpMPP\");\r\n\t        DataManager.hideDataElements(\"helpMPF\");\r\n\t        if (AppContext_1.AppContext != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null) {\r\n\t                if (GameManager_1.GameManager.gameResponse[\"helpData\"] == null) {\r\n\t                    DataManager.hideDataElements(\"gambleAttempts\");\r\n\t                    DataManager.hideDataElements(\"helpGameLimit\");\r\n\t                    DataManager.hideDataElements(\"helpGambleLimit\");\r\n\t                    DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n\t                    DataManager.hideDataElements(\"helpJoker\");\r\n\t                    DataManager.hideDataElements(\"helpRTP\");\r\n\t                    DataManager.hideDataElements(\"totalRTP\");\r\n\t                    DataManager.hideDataElements(\"helpMPP\");\r\n\t                    DataManager.hideDataElements(\"helpMPF\");\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.gambleResponse == null) {\r\n\t                        DataManager.hideDataElements(\"hlpGambleSection\");\r\n\t                        DataManager.showDataElements(\"hlpNoGambleSection\", \"\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"hlpNoGambleSection\");\r\n\t                        DataManager.showDataElements(\"hlpGambleSection\", \"\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n\t                        DataManager.hideDataElements(\"gambleAttempts\");\r\n\t                    }\r\n\t                    else {\r\n\t                        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t                            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t                            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] -\r\n\t                                GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t                        }\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\r\n\t                        DataManager.HelpDataGameLimit = GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"];\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                        else {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                        }\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] == null ||\r\n\t                        !AppContext_1.AppContext.gameConfiguration.HelpShowGameLimit) {\r\n\t                        DataManager.hideDataElements(\"helpGameLimit\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"] != null) {\r\n\t                        DataManager.HelpDataGambleLimit = GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"];\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                        else {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"helpGambleLimit\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n\t                        DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleCountLimit, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] + \" \");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"] == null ||\r\n\t                        !GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"]) {\r\n\t                        DataManager.hideDataElements(\"helpJoker\");\r\n\t                    }\r\n\t                    var rtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"rtp\"];\r\n\t                    var totalRtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"totalRtp\"];\r\n\t                    var progressiveBonusRtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"progressiveBonusRtp\"];\r\n\t                    var ridTotalRTP = AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization\r\n\t                        ? \"HLP_AD_INFO_TOTAL_RTP_J\"\r\n\t                        : \"HLP_AD_INFO_TOTAL_RTP\";\r\n\t                    var statusBarRtp = void 0;\r\n\t                    if (totalRtp != null &&\r\n\t                        progressiveBonusRtp != null &&\r\n\t                        rtp != null &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.HelpShowRTP) {\r\n\t                        DataManager.hideDataElements(\"helpRTP\");\r\n\t                        DataManager.setDataElements(\"totalRTP\", Languages_1.Languages.getRid(ridTotalRTP, totalRtp.toString(), rtp.toString(), progressiveBonusRtp.toString()));\r\n\t                        statusBarRtp = totalRtp.toString();\r\n\t                    }\r\n\t                    else if (rtp != null && AppContext_1.AppContext.gameConfiguration.HelpShowRTP) {\r\n\t                        DataManager.hideDataElements(\"totalRTP\");\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpRTP, rtp.toString());\r\n\t                        statusBarRtp = rtp.toString();\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"helpRTP\");\r\n\t                        DataManager.hideDataElements(\"totalRTP\");\r\n\t                    }\r\n\t                    if (statusBarRtp != null &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.RTP) > -1) {\r\n\t                        var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                        statusBar.add(neo_games_1.Plugins.StatusBar.Types.RTP, \"rtp\", Languages_1.Languages.getRid(\"SB_INFO_RTP\", statusBarRtp.toString()));\r\n\t                        Scaling_1.Scaling.resizeRoot();\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"version\"] == null ||\r\n\t                        !AppContext_1.AppContext.gameConfiguration.HelpShowGameModuleVersion) {\r\n\t                        DataManager.hideDataElements(\"helpVersion\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpVersion, GameManager_1.GameManager.gameResponse[\"helpData\"][\"version\"].toString());\r\n\t                        DataManager.showDataElements(\"helpVersion\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"] != null) {\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.MaxPayoutProbability) > -1) {\r\n\t                            var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                            statusBar.add(neo_games_1.Plugins.StatusBar.Types.MaxPayoutProbability, \"maxPayoutProbability\", Languages_1.Languages.getRid(\"SB_INFO_MAX_PAYOUT_PROBABILITY\", GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"]));\r\n\t                            Scaling_1.Scaling.resizeRoot();\r\n\t                        }\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.HelpShowMaxPayoutProbabilityFrequency &&\r\n\t                            GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"] != null) {\r\n\t                            DataManager.setDataElements(\"helpMPF\", Languages_1.Languages.getRid(\"HLP_AD_INFO_MAX_PAYOUT_FREQUENCY\", GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(), GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"].toString()));\r\n\t                            DataManager.showDataElements(\"helpMPF\");\r\n\t                        }\r\n\t                        else if (AppContext_1.AppContext.gameConfiguration.HelpShowMaxPayoutProbability) {\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpMaxPayoutProbability, GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString());\r\n\t                            DataManager.showDataElements(\"helpMPP\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.ProgressiveBonusHelpShowCumulativeWinLimit &&\r\n\t                        GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\r\n\t                        DataManager.showDataElements(\"helpShowCumulativeWinLimit\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (BetManager_1.BetManager.TotalBets.length > 0) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpMinBet, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, Math.min.apply(Math, BetManager_1.BetManager.TotalBets).toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpMaxBet, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, Math.max.apply(Math, BetManager_1.BetManager.TotalBets).toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpMinBet\");\r\n\t                DataManager.hideDataElements(\"helpMaxBet\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusContributeOnlyQualified) {\r\n\t                DataManager.hideDataElements(\"helpJackpotContributionAll\");\r\n\t                DataManager.showDataElements(\"helpJackpotContributionQualifying\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n\t                DataManager.hideDataElements(\"helpJackpotContributionQualifying\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusVisibleMax > 0 &&\r\n\t                AppContext_1.AppContext.gameConfiguration.ProgressiveBonusHelpShowMaxVisibleLimit) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotVisibleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusVisibleMax.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotVisibleLimit\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet > 0) {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotQualifyingBetsMin, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMin\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet > 0) {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotQualifyingBetsMax, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMax\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n\t                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n\t                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n\t            }\r\n\t            else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n\t                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n\t                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n\t                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled) {\r\n\t                DataManager.hideDataElements(\"helpAutoplayEnabled\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpAutoplayDisabled\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.ShowHomeButton) {\r\n\t                DataManager.hideDataElements(\"gameHomeBtn\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.ShowGameRoundsHistory) {\r\n\t                DataManager.hideDataElements(\"historyBtn\");\r\n\t                DataManager.hideDataElements(\"helpHistoryBtn\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ExpirationResolveHours > 0) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataExpirationResolveHours, AppContext_1.AppContext.gameConfiguration.ExpirationResolveHours.toString());\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"expirationResolveHours\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.setDataElements = function (cls, text) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.innerHTML = text;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.hideDataElements = function (cls) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.showDataElements = function (cls, display) {\r\n\t        if (display === void 0) { display = \"block\"; }\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.style.display = display;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.cleanUpElements = function () {\r\n\t        var elements;\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null && AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t            elements = document.getElementsByClassName(\"useCoinsFalse\");\r\n\t        }\r\n\t        else {\r\n\t            elements = document.getElementsByClassName(\"useCoinsTrue\");\r\n\t        }\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            while (elements.length > 0) {\r\n\t                elements[0].parentNode.removeChild(elements[0]);\r\n\t            }\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t            elements = document.getElementsByClassName(\"helpJackpotB\");\r\n\t        }\r\n\t        else {\r\n\t            elements = document.getElementsByClassName(\"helpJackpotJ\");\r\n\t        }\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            while (elements.length > 0) {\r\n\t                elements[0].parentNode.removeChild(elements[0]);\r\n\t            }\r\n\t        }\r\n\t        elements = document.getElementsByClassName(\"settingTabItem\");\r\n\t        var hideSettingsButton = true;\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            if (elements[i].style.display != \"none\") {\r\n\t                hideSettingsButton = false;\r\n\t            }\r\n\t        }\r\n\t        if (hideSettingsButton) {\r\n\t            elements = document.getElementsByClassName(\"settingsBtn\");\r\n\t            if (elements != null && elements.length > 0) {\r\n\t                while (elements.length > 0) {\r\n\t                    elements[0].parentNode.removeChild(elements[0]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.addTrustedUserAction = function (actionId) {\r\n\t        if (DataManager.TrustedUserActions.indexOf(actionId) == -1) {\r\n\t            var groupActionId = DataManager.getGroupActionId(actionId);\r\n\t            DataManager.TrustedUserActions.push(groupActionId);\r\n\t        }\r\n\t    };\r\n\t    DataManager.getTrustedUserAction = function (groupActionId) {\r\n\t        var index = DataManager.TrustedUserActions.indexOf(groupActionId);\r\n\t        if (index == -1) {\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            DataManager.TrustedUserActions.splice(index, 1);\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    DataManager.getGroupActionId = function (actionId) {\r\n\t        var result = actionId;\r\n\t        switch (actionId) {\r\n\t            case \"BET_PLUS\":\r\n\t            case \"BET_MINUS\":\r\n\t            case \"BET_CYCLE\":\r\n\t            case \"MAX_BET\":\r\n\t            case \"COIN_SIZE_PLUS\":\r\n\t            case \"COIN_SIZE_PLUS_CYCLE\":\r\n\t            case \"COIN_SIZE_MINUS\":\r\n\t            case \"PAYLINE_COUNT_PLUS\":\r\n\t            case \"PAYLINE_COUNT_PLUS_CYCLE\":\r\n\t            case \"PAYLINE_COUNT_MINUS\":\r\n\t                result = \"BET_CHANGE\";\r\n\t                break;\r\n\t            case \"SPIN\":\r\n\t                result = \"SPIN\";\r\n\t                break;\r\n\t            case \"SPIN_OR_STOP\":\r\n\t                if (HtmlController_1.HtmlController.ActionElements[\"SPIN_STOP\"] != null) {\r\n\t                    var btn = HtmlController_1.HtmlController.ActionElements[\"SPIN_STOP\"][0];\r\n\t                    if (btn != null && btn.instance.classList.contains(\"_disabled\")) {\r\n\t                        result = \"SPIN\";\r\n\t                    }\r\n\t                }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    DataManager.stopAutoplayIfLossLimit = function () {\r\n\t        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n\t            return;\r\n\t        }\r\n\t        var lossLimit = parseFloat(DataManager.AutoplayLossLimit);\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            lossLimit += GameManager_1.GameManager.baseResponse.totalWin;\r\n\t        }\r\n\t        if (lossLimit - BetManager_1.BetManager.Bet < 0) {\r\n\t            DataManager.Autoplay = false;\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateLossLimit = function (win) {\r\n\t        if (win === void 0) { win = 0; }\r\n\t        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n\t            return;\r\n\t        }\r\n\t        var lossLimit = parseFloat(DataManager.AutoplayLossLimit);\r\n\t        if (win > 0) {\r\n\t            lossLimit += win;\r\n\t        }\r\n\t        else {\r\n\t            if (BetManager_1.BetManager.Bet != null) {\r\n\t                lossLimit = neo_common_1.NumberUtils.toNumber(neo_common_1.NumberUtils.subtract(lossLimit, BetManager_1.BetManager.Bet));\r\n\t            }\r\n\t        }\r\n\t        DataManager.AutoplayLossLimit = lossLimit + \"\";\r\n\t    };\r\n\t    DataManager.stopAutoplayIfWinLimit = function () {\r\n\t        if (!DataManager.Autoplay) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager.AutoplayWinLimit == \"∞\") {\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.gameResponse != null &&\r\n\t                GameManager_1.GameManager.gameResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.gameResponse.totalWin >= parseFloat(DataManager.AutoplayWinLimit)) {\r\n\t                DataManager.Autoplay = false;\r\n\t                return true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.gameState = function (state) {\r\n\t        if (AppContext_1.AppContext.clientHost) {\r\n\t            var messageId = GameManager_1.GameManager.gameResponse.messageId;\r\n\t            var unpaidWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t            var gameRoundId = GameManager_1.GameManager.gameResponse.roundId;\r\n\t            var gameEvent = void 0;\r\n\t            switch (state) {\r\n\t                case \"PrimaryGameEscrow\":\r\n\t                    gameEvent = GameEvents.PrimaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"PrimaryGameStarted\":\r\n\t                    gameEvent = GameEvents.PrimaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"PrimaryGameEnded\":\r\n\t                    gameEvent = GameEvents.PrimaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEntered\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEntered(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEscrow\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameStarted\":\r\n\t                    gameEvent = GameEvents.SecondaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameCollectEscrow\":\r\n\t                    gameEvent = GameEvents.GameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameCollectEscrow\":\r\n\t                    gameEvent = GameEvents.SecondaryGameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEnded\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameEnded\":\r\n\t                    gameEvent = GameEvents.GameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameHalved\":\r\n\t                    gameEvent = GameEvents.SecondaryGameHalved(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"AutoPlayStarted\":\r\n\t                    gameEvent = GameEvents.AutoPlayStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"AutoPlayEnded\":\r\n\t                    gameEvent = GameEvents.AutoPlayEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GamePlayDisabled\":\r\n\t                    gameEvent = GameEvents.GamePlayDisabled(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GamePlayEnabled\":\r\n\t                    gameEvent = GameEvents.GamePlayEnabled(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameLoaded\":\r\n\t                    gameEvent = GameEvents.GameLoaded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameEnded\":\r\n\t                    gameEvent = GameEvents.BonusGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameEscrow\":\r\n\t                    gameEvent = GameEvents.BonusGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameStarted\":\r\n\t                    gameEvent = GameEvents.BonusGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameTriggered\":\r\n\t                    gameEvent = GameEvents.BonusGameTriggered(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t            }\r\n\t            if (gameEvent != null) {\r\n\t                AppContext_1.AppContext.clientHost.notifyEventFromGame(gameEvent);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"DataManager\", s);\r\n\t        }\r\n\t    };\r\n\t    DataManager._gameData = {};\r\n\t    DataManager.DisplayCurrencies = null;\r\n\t    DataManager.serverTimeOffset = -1;\r\n\t    DataManager.time = \"\";\r\n\t    DataManager.utcTime = \"\";\r\n\t    DataManager.serverTimeResponseTimestamp = 0;\r\n\t    DataManager.TrustedUserActions = [];\r\n\t    DataManager.GameRoundClosed = false;\r\n\t    DataManager.Collectable = true;\r\n\t    DataManager.GameLimit = false;\r\n\t    DataManager.AutoplayCount = \"∞\";\r\n\t    DataManager.AutoplayLossLimit = \"∞\";\r\n\t    DataManager.AutoplayWinLimit = \"∞\";\r\n\t    DataManager._autoplay = false;\r\n\t    DataManager.AutoplayEnabled = true;\r\n\t    DataManager.AutoplayAfterGamble = false;\r\n\t    DataManager.QuickspinEnabled = false;\r\n\t    DataManager._quickstopTimes = [];\r\n\t    DataManager.VibrationEnabled = false;\r\n\t    DataManager.HelpDataGameLimit = 0;\r\n\t    DataManager.HelpDataGambleLimit = 0;\r\n\t    DataManager.BackSoundsPlayingFromGame = true;\r\n\t    DataManager.customBetsData = [];\r\n\t    DataManager.AutoplayStarted = false;\r\n\t    return DataManager;\r\n\t}());\r\n\texports.DataManager = DataManager;\r\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(44);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar SimilarGames_1 = __webpack_require__(54);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar NotificationManager_1 = __webpack_require__(56);\r\n\tvar Paytable_1 = __webpack_require__(52);\r\n\tvar SessionTimer_1 = __webpack_require__(59);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar SplashScreen_1 = __webpack_require__(60);\r\n\tvar FreespinsModel_1 = __webpack_require__(61);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameManager = (function () {\r\n\t    function GameManager() {\r\n\t    }\r\n\t    Object.defineProperty(GameManager, \"gameClient\", {\r\n\t        get: function () {\r\n\t            return GameManager._gameClient;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameManager.startGame = function (gameClient, app) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"startGame\");\r\n\t        }\r\n\t        neo_common_1.ArgValidator.ensureIsNotNullOrUndefined(gameClient, \"gameClient\");\r\n\t        GameManager._gameClient = gameClient;\r\n\t        GameManager._gameClient.onErrorResponse = GameManager.errorReceived;\r\n\t        DataManager_1.DataManager.BackSoundsPlayingFromGame =\r\n\t            AppContext_1.AppContext.current.isBackgroundMusicEnabled && AppContext_1.AppContext.current.getBackgroundMusic();\r\n\t        NotificationManager_1.NotificationManager.initialize();\r\n\t        GameManager._app = app;\r\n\t        if (ModuleManager_1.ModuleManager.connectModules()) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.wasInitialized) {\r\n\t                GameManager.init();\r\n\t            }\r\n\t            else {\r\n\t                setTimeout(function () {\r\n\t                    GameManager.init();\r\n\t                }, 3000);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                GameManager.log(\"ERROR cant connect channel and game modules\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.showGame = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"showGame\");\r\n\t        }\r\n\t        var loading = document.getElementById(\"loading\");\r\n\t        var canvas = document.getElementById(\"canvas\");\r\n\t        if (loading != null && canvas != null) {\r\n\t            Scaling_1.Scaling.onLoadComplete();\r\n\t            Jackpot_1.Jackpot.show();\r\n\t            RetentionPanel_1.RetentionPanel.show();\r\n\t            Paytable_1.Paytable.openAtStart();\r\n\t            if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t            }\r\n\t            DataManager_1.DataManager.cleanUpElements();\r\n\t            loading.style.display = \"none\";\r\n\t            canvas.style.display = \"block\";\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                GameManager.log(\"ERROR loading or canvas doesnt exist\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.setupGame = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"setupGame\");\r\n\t        }\r\n\t        GameManager.parseScreensForModules(response);\r\n\t        GameManager.parseResponses(response);\r\n\t        DataManager_1.DataManager.updateResponseData(true);\r\n\t        ModuleManager_1.ModuleManager.initModules();\r\n\t        DataManager_1.DataManager.SimilarGames = new SimilarGames_1.SimilarGames();\r\n\t        DataManager_1.DataManager.SimilarGames.initialize();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.showFreeRounds();\r\n\t    };\r\n\t    GameManager.init = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"init\");\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.getServerTime();\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.initializeFreeRounds();\r\n\t        Jackpot_1.Jackpot.initialize();\r\n\t        GameManager._gameClient.init().then(function (response) {\r\n\t            GameManager.initReceived(response);\r\n\t        });\r\n\t    };\r\n\t    GameManager.softInit = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"soft init\");\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager._gameClient.init().then(function (response) {\r\n\t            GameManager.softInitReceived(response);\r\n\t        });\r\n\t    };\r\n\t    GameManager.collect = function (module) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"collect module: \" + module);\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        GameManager.canExit();\r\n\t        this._collectModule = module;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n\t            GameManager.gameClient.collect().then(GameManager.collectReceived);\r\n\t        }\r\n\t    };\r\n\t    GameManager.initReceived = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"initReceived\");\r\n\t        }\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            if (false) {\r\n\t                GameManager.log(\"initReceived NULL response (error in send?)\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.showTime();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(AppContext_1.AppContext.gameConfiguration.GUIShowSessionTimeStartValue)) {\r\n\t            DataManager_1.DataManager.showSessionTime(AppContext_1.AppContext.gameConfiguration.GUIShowSessionTimeStartValue);\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.showSessionTime(0);\r\n\t        }\r\n\t        if (SplashScreen_1.SplashScreen.suspendInitReceived(response)) {\r\n\t            return;\r\n\t        }\r\n\t        MessageManager_1.MessageManager.postpone(GameManager.continueInitReceived, response);\r\n\t    };\r\n\t    GameManager.continueInitReceived = function (response) {\r\n\t        GameManager.setupGame(response);\r\n\t        GameManager.showGame();\r\n\t        SplashScreen_1.SplashScreen.hideSplashScreen();\r\n\t        neo_games_1.Platforms.Platforms.gameDataLoaded({\r\n\t            PlayerTokenId: AppContext_1.AppContext.gameConfiguration.PlayerTokenId,\r\n\t            HomeUrl: AppContext_1.AppContext.gameConfiguration.ExitUrl,\r\n\t            ClientToken: AppContext_1.AppContext.gameConfiguration.ClientToken,\r\n\t            GameName: GameApp_1.GameApp.key,\r\n\t            SessionData: {\r\n\t                SessionBalance: AppContext_1.AppContext.gameConfiguration.SessionBalance,\r\n\t                TotalWin: AppContext_1.AppContext.gameConfiguration.TotalWin,\r\n\t                TotalBet: AppContext_1.AppContext.gameConfiguration.TotalBet,\r\n\t            },\r\n\t            CurrencyCode: response.initData.currency != null ? response.initData.currency : \"\",\r\n\t            Balance: GameManager.gameResponse.balance.real,\r\n\t            Bet: BetManager_1.BetManager.Bet,\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.rendererType(StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer ? \"canvas\" : \"webGL\");\r\n\t        DataManager_1.DataManager.gameState(\"GameLoaded\");\r\n\t        GameManager.requestSend = false;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n\t                if (!ModuleManager_1.ModuleManager.freespinsEnabled() && !ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                    ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.softInitReceived = function (response) {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager.parseResponses(response);\r\n\t        DataManager_1.DataManager.updateResponseData(true);\r\n\t        GameManager.requestSend = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.openOther();\r\n\t    };\r\n\t    GameManager.collectReceived = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"collectReceived\");\r\n\t        }\r\n\t        MessageManager_1.MessageManager.postpone(GameManager.continueCollectReceived, response);\r\n\t    };\r\n\t    GameManager.continueCollectReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            ModuleManager_1.ModuleManager.collectInModule(GameManager._collectModule);\r\n\t            GameManager.canExit();\r\n\t        }\r\n\t        GameManager.requestSend = false;\r\n\t    };\r\n\t    GameManager.errorReceived = function (apiError) {\r\n\t        var requestName = apiError.requestInfo.request.constructor.name;\r\n\t        if (requestName === \"FreeRoundsOffersRequest\") {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.wasInitialized = true;\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            GameManager.log(\"errorReceived\");\r\n\t        }\r\n\t        window.onblur = null;\r\n\t        window.onfocus = null;\r\n\t        PIXI.sound.muteAll();\r\n\t        var localizedText = \"\";\r\n\t        var isError = true;\r\n\t        var code = apiError.httpStatusCode.toString();\r\n\t        var customData = {\r\n\t            special: false,\r\n\t            gameRoundId: neo_common_1.Utils.valueOrDefault(DataManager_1.DataManager.getDataById(\"ROUND_ID\"), \"0\"),\r\n\t            errorId: neo_common_1.Utils.isNullOrUndefined(apiError.error) ? \"\" : apiError.error.errorId,\r\n\t            actions: neo_common_1.Utils.isNullOrUndefined(apiError.error) ? [] : apiError.error[\"actions\"],\r\n\t        };\r\n\t        var ignoreShowDialog = false;\r\n\t        var hasMessages = false;\r\n\t        var callbackFnc = null;\r\n\t        var isFatalError = true;\r\n\t        if (apiError.error) {\r\n\t            var resource = \"ERROR_\" + apiError.httpStatusCode + \"_\" + apiError.error.code;\r\n\t            code = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n\t            localizedText = Languages_1.Languages.getRid(resource);\r\n\t            hasMessages = apiError.error.messages != null;\r\n\t            if (localizedText == null) {\r\n\t                resource = \"ERROR_\" + apiError.httpStatusCode;\r\n\t                code = apiError.httpStatusCode.toString();\r\n\t                localizedText = Languages_1.Languages.getRid(resource);\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 400 && apiError.error.code === 1009) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1012) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2005) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2013) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2014) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2016) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2017) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2018)) {\r\n\t                customData.special = true;\r\n\t                customData.errorId = \"\";\r\n\t                isError = false;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 500 && apiError.error.code === 2001) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2002) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2012)) {\r\n\t                customData.ultraSpecial = true;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 500 && apiError.error.code === 2015) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2016)) {\r\n\t                code = \"\";\r\n\t                localizedText = apiError.error.message;\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2017) {\r\n\t                if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.collectPartial) {\r\n\t                    localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_ALLOWED\");\r\n\t                }\r\n\t                else {\r\n\t                    localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n\t                }\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2018) {\r\n\t                localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2019) {\r\n\t                if (!hasMessages) {\r\n\t                    ignoreShowDialog = true;\r\n\t                }\r\n\t                callbackFnc = MessageManager_1.MessageManager.callbackFnc;\r\n\t                isFatalError = false;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1012)) {\r\n\t                var spbSufix = AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization ? \"_J\" : \"\";\r\n\t                localizedText = Languages_1.Languages.getRid(resource + spbSufix);\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2020) {\r\n\t                SessionTimer_1.SessionTimer.postpone(SessionTimer_1.SessionTimer.callbackFnc, SessionTimer_1.SessionTimer.prepareData(apiError.error));\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (apiError.httpStatusCode === 401) {\r\n\t                customData.ultraSpecial = true;\r\n\t            }\r\n\t            var resource = \"ERROR_\" + apiError.httpStatusCode.toString();\r\n\t            localizedText = Languages_1.Languages.getRid(resource);\r\n\t        }\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameManager\", \"[errorReceived] calling \" +\r\n\t                (\"AppContext.current.showDialog('\" + localizedText + \"', \" + isError + \", '\" + code + \"', \\n                    \" + customData.errorId + \", \" + customData.gameRoundId + \", \" + JSON.stringify(customData) + \")\"));\r\n\t        }\r\n\t        if (isError) {\r\n\t            var error_code_for_platforms = apiError.httpStatusCode.toString();\r\n\t            if (apiError.error) {\r\n\t                error_code_for_platforms = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.error(error_code_for_platforms, localizedText);\r\n\t            if (isFatalError) {\r\n\t                Jackpot_1.Jackpot.showError();\r\n\t                NotificationManager_1.NotificationManager.disconnect();\r\n\t            }\r\n\t        }\r\n\t        if (neo_games_1.Platforms.Platforms.handleShowErrorDialog || ignoreShowDialog) {\r\n\t            return;\r\n\t        }\r\n\t        if (hasMessages) {\r\n\t            MessageManager_1.MessageManager.postpone(callbackFnc, apiError.error);\r\n\t        }\r\n\t        else {\r\n\t            AppContext_1.AppContext.current.showDialog(localizedText, isError, code, customData.errorId, customData.gameRoundId, customData);\r\n\t        }\r\n\t    };\r\n\t    GameManager.parseScreensForModules = function (response) {\r\n\t        if (response.module(GameModules.Base) != null) {\r\n\t            BaseModel_1.BaseModel.LastScreen = response.module(GameModules.Base).screen;\r\n\t        }\r\n\t        if (response.module(GameModules.Freespins) != null) {\r\n\t            FreespinsModel_1.FreespinsModel.LastScreen = response.module(GameModules.Freespins).screen;\r\n\t        }\r\n\t    };\r\n\t    GameManager.parseResponses = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"parseResponses\");\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager.gameResponse = response;\r\n\t            if (response.module(GameModules.Base) != null) {\r\n\t                GameManager.baseResponse = response.module(GameModules.Base);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.baseResponse = null;\r\n\t            }\r\n\t            if (response.module(GameModules.Gamble) != null) {\r\n\t                GameManager.gambleResponse = response.module(GameModules.Gamble);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.gambleResponse = null;\r\n\t            }\r\n\t            if (response.module(GameModules.Freespins) != null) {\r\n\t                GameManager.freespinsResponse = response.module(GameModules.Freespins);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.freespinsResponse = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.collectable = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.endMsgDisplayed) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && DataManager_1.DataManager.Collectable) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    GameManager.canExit = function (exit) {\r\n\t        if (exit === void 0) { exit = false; }\r\n\t        var canExit = GameManager.collectable();\r\n\t        if (false) {\r\n\t            console.log(\"GameManager.canExit(exit: \" + exit + \") -> afterCollect: \" + canExit);\r\n\t        }\r\n\t        if (canExit &&\r\n\t            !exit &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data != null &&\r\n\t            !FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.openDialog(ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data);\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = null;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            ModuleManager_1.ModuleManager.resetWinAnimator(GameModules.Base);\r\n\t        }\r\n\t        if (GameManager.exitOnCollect && canExit) {\r\n\t            if (false) {\r\n\t                console.log((\"GameManager.canExit(exit: \" + exit + \") -> manuall call of GameApp.exit() \") +\r\n\t                    (\"because of GameManager.exitOnCollect = \" + GameManager.exitOnCollect));\r\n\t            }\r\n\t            GameApp_1.GameApp.exit();\r\n\t            return false;\r\n\t        }\r\n\t        if (canExit && exit) {\r\n\t            return canExit;\r\n\t        }\r\n\t        else {\r\n\t            if (!GameManager.exitOnCollect && exit) {\r\n\t                if (false) {\r\n\t                    console.log((\"GameManager.canExit(exit: \" + exit + \") -> \") +\r\n\t                        (\"changing GameManager.exitOnCollect(\" + GameManager.exitOnCollect + \") to value '\" + exit + \"'\"));\r\n\t                }\r\n\t                GameManager.exitOnCollect = true;\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            console.log(\"GameManager.canExit(exit: \" + exit + \") -> returns: \" + canExit);\r\n\t        }\r\n\t        return canExit;\r\n\t    };\r\n\t    GameManager.showResponsibleDialog1 = function (data) {\r\n\t        if (GameManager.canExit()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.openDialog(data);\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = null;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            ModuleManager_1.ModuleManager.resetWinAnimator(GameModules.Base);\r\n\t        }\r\n\t        else {\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = data;\r\n\t        }\r\n\t    };\r\n\t    GameManager.disablePlay = function () {\r\n\t        GameManager.disableOnCollect = true;\r\n\t        if (GameManager.collectable()) {\r\n\t            GameManager.disableGamePlay = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            DataManager_1.DataManager.gameState(\"GamePlayDisabled\");\r\n\t        }\r\n\t    };\r\n\t    GameManager.enablePlay = function () {\r\n\t        GameManager.disableOnCollect = false;\r\n\t        GameManager.disableGamePlay = false;\r\n\t        if (!GameManager.dontEnableGamePlay) {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t        DataManager_1.DataManager.gameState(\"GamePlayEnabled\");\r\n\t    };\r\n\t    GameManager.openConfirmationDialog = function (module, text) {\r\n\t        var dialogData = {\r\n\t            text: text,\r\n\t            actions: [\r\n\t                {\r\n\t                    type: \"restore\",\r\n\t                    text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                    customData: module,\r\n\t                },\r\n\t            ],\r\n\t            special: true,\r\n\t        };\r\n\t        ModuleManager_1.ModuleManager.disableChannelModule(module);\r\n\t        AppContext_1.AppContext.current.showDialog(text, false, null, null, null, dialogData);\r\n\t    };\r\n\t    GameManager.closeResponsibleDialog1 = function () {\r\n\t        GameManager.requestSend = false;\r\n\t        ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t    };\r\n\t    GameManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameManager\", s);\r\n\t        }\r\n\t    };\r\n\t    GameManager._collectModule = GameModules.Base;\r\n\t    GameManager.requestSend = false;\r\n\t    GameManager.exitOnCollect = false;\r\n\t    GameManager.disableOnCollect = false;\r\n\t    GameManager.disableGamePlay = false;\r\n\t    GameManager.dontEnableGamePlay = false;\r\n\t    return GameManager;\r\n\t}());\r\n\texports.GameManager = GameManager;\r\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar SpinBet = neo_games_1.Communication.Game.SpinBet;\r\n\tvar BetType = neo_games_1.Communication.Game.BetType;\r\n\tvar BetManager = (function () {\r\n\t    function BetManager() {\r\n\t    }\r\n\t    BetManager.initializeBet = function () {\r\n\t        if (AppContext_1.AppContext.current.getHideAmounts()) {\r\n\t            this.hideValues(true);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.initData != null) {\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.betSettings != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.betSettings.totalBets != null) {\r\n\t                BetManager.TotalBets = GameManager_1.GameManager.baseResponse.initData.betSettings.totalBets;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.betSettings != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.betSettings.coins != null) {\r\n\t                BetManager.Coins = GameManager_1.GameManager.baseResponse.initData.betSettings.coins;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.lastBet != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.lastBet.betType === BetType.Total) {\r\n\t                if (GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet != null &&\r\n\t                    !AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t                    if (BetManager.Bet != null &&\r\n\t                        BetManager.Bet !== GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet) {\r\n\t                        ModuleManager_1.ModuleManager.initNewBet();\r\n\t                    }\r\n\t                    else {\r\n\t                        ModuleManager_1.ModuleManager.initNewBet(false);\r\n\t                    }\r\n\t                    BetManager.Bet = BetHigherThanMinDialog_1.BetHigherThanMinDialog.getGameStartedWithoutFeature()\r\n\t                        ? BetManager.TotalBets[0]\r\n\t                        : GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet;\r\n\t                    BetManager.updateBetPosition();\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                }\r\n\t                else {\r\n\t                    if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                        if (GameManager_1.GameManager.baseResponse.initData.lastBet.coinSize != null) {\r\n\t                            BetManager.CoinSize = GameManager_1.GameManager.baseResponse.initData.lastBet.coinSize;\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                        }\r\n\t                        if (GameManager_1.GameManager.baseResponse.initData.lastBet.coinCount != null) {\r\n\t                            BetManager.CoinCount = parseInt(GameManager_1.GameManager.baseResponse.initData.lastBet.coinCount.toString());\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                        }\r\n\t                        if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                        }\r\n\t                        BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t                    }\r\n\t                    else if (AppContext_1.AppContext.current.getDenomination() != null && BetManager.Coins != null) {\r\n\t                        if (BetManager.Coins[AppContext_1.AppContext.current.getDenomination()] != null) {\r\n\t                            BetManager.changeDenom(AppContext_1.AppContext.current.getDenomination(), true);\r\n\t                        }\r\n\t                        else {\r\n\t                            BetManager.changeDefaultDenom();\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        BetManager.changeDefaultDenom();\r\n\t                    }\r\n\t                    if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                        BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (BetManager.DenomContainer != null) {\r\n\t                BetManager.DenomContainer.addValues();\r\n\t            }\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            if (BetManager.BetContainer != null) {\r\n\t                BetManager.BetContainer.addValues();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog(true);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        }\r\n\t        BetManager.unHideValues();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t            if (cycle) {\r\n\t                BetManager.cycleCoinCount();\r\n\t                return;\r\n\t            }\r\n\t            else if (max) {\r\n\t                BetManager.maxCoinCount();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        if (BetManager.Bet != null && BetManager.TotalBets != null && BetManager.TotalBets.length > 0) {\r\n\t            var index;\r\n\t            for (var i = 0; i < BetManager.TotalBets.length; i++) {\r\n\t                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n\t                    index = i;\r\n\t                }\r\n\t            }\r\n\t            if (index != null) {\r\n\t                if (decrease) {\r\n\t                    if (index === 0) {\r\n\t                        if (cycle) {\r\n\t                            index = BetManager.TotalBets.length - 1;\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        index--;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (max) {\r\n\t                        var findMax = false;\r\n\t                        if (!findMax) {\r\n\t                            for (var jj = BetManager.TotalBets.length - 1; jj >= 0; jj--) {\r\n\t                                if (BetManager.TotalBets[jj] <= bonus && findMax === false) {\r\n\t                                    findMax = true;\r\n\t                                    index = jj;\r\n\t                                }\r\n\t                                if (BetManager.TotalBets[jj] <= real && findMax === false) {\r\n\t                                    findMax = true;\r\n\t                                    index = jj;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (index === BetManager.TotalBets.length - 1) {\r\n\t                            if (cycle) {\r\n\t                                index = 0;\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            index++;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                BetManager.Bet = BetManager.TotalBets[index];\r\n\t                if (bonus != null) {\r\n\t                    if (bonus >= BetManager.Bet) {\r\n\t                        ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    }\r\n\t                    else {\r\n\t                        ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({\r\n\t                    totalBet: BetManager.Bet,\r\n\t                    maxBetAction: max,\r\n\t                    userAction: DataManager_1.DataManager.getTrustedUserAction(\"BET_CHANGE\"),\r\n\t                });\r\n\t                BetManager.updateBetPosition();\r\n\t            }\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.poolingBalance();\r\n\t    };\r\n\t    BetManager.sortNumber = function (a, b) {\r\n\t        return a - b;\r\n\t    };\r\n\t    BetManager.changeDefaultDenom = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            var lowestDenom = void 0;\r\n\t            for (var key in BetManager.Coins) {\r\n\t                if (lowestDenom == null) {\r\n\t                    lowestDenom = parseFloat(key);\r\n\t                }\r\n\t                else {\r\n\t                    if (parseFloat(key) < lowestDenom) {\r\n\t                        lowestDenom = parseFloat(key);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            BetManager.CoinSize = lowestDenom;\r\n\t            AppContext_1.AppContext.current.setDenomination(BetManager.CoinSize);\r\n\t            BetManager.Coins[lowestDenom].sort(BetManager.sortNumber);\r\n\t            BetManager.CoinCount = BetManager.Coins[lowestDenom][0];\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t            neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeDenom = function (value, init) {\r\n\t        if (init === void 0) { init = false; }\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null && BetManager.Coins[value] != null) {\r\n\t            BetManager.CoinSize = value;\r\n\t            AppContext_1.AppContext.current.setDenomination(BetManager.CoinSize);\r\n\t            BetManager.Coins[value].sort(BetManager.sortNumber);\r\n\t            if (!init && BetManager.CoinCount != null && !AppContext_1.AppContext.gameConfiguration.ResetCoinCountOnDenomChange) {\r\n\t                var found = false;\r\n\t                var coinCount = BetManager.CoinCount;\r\n\t                for (var i = 0; i < BetManager.Coins[value].length; i++) {\r\n\t                    if (BetManager.Coins[value][i] <= BetManager.CoinCount) {\r\n\t                        found = true;\r\n\t                        coinCount = BetManager.Coins[value][i];\r\n\t                    }\r\n\t                }\r\n\t                if (!found) {\r\n\t                    BetManager.CoinCount = BetManager.Coins[value][0];\r\n\t                }\r\n\t                else {\r\n\t                    BetManager.CoinCount = coinCount;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                BetManager.CoinCount = BetManager.Coins[value][0];\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t            neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.HelpDataGameLimit != 0) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t                BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGameLimit, BetManager.CoinSize).toString()).toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGameLimit, BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t        if (DataManager_1.DataManager.HelpDataGambleLimit != 0) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t                BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString()).toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeBetByValue = function (value) {\r\n\t        BetManager.unHideValues();\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        BetManager.Bet = value;\r\n\t        if (bonus != null) {\r\n\t            if (bonus >= BetManager.Bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t        neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t        BetManager.updateBetPosition();\r\n\t    };\r\n\t    BetManager.changeCoinCount = function (value) {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null) {\r\n\t                BetManager.CoinCount = value;\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.cycleCoinCount = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                var index = 0;\r\n\t                var coinSizes = [];\r\n\t                for (var i = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n\t                    coinSizes.push(BetManager.Coins[BetManager.CoinSize][i]);\r\n\t                }\r\n\t                coinSizes.sort(BetManager.sortNumber);\r\n\t                for (var i = 0; i < coinSizes.length; i++) {\r\n\t                    if (BetManager.CoinCount === coinSizes[i]) {\r\n\t                        index = i;\r\n\t                    }\r\n\t                }\r\n\t                if (coinSizes[index + 1] != null) {\r\n\t                    BetManager.CoinCount = coinSizes[index + 1];\r\n\t                }\r\n\t                else {\r\n\t                    BetManager.CoinCount = coinSizes[0];\r\n\t                }\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.maxCoinCount = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                var credit = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t                var coinCount = BetManager.CoinCount;\r\n\t                BetManager.Coins[BetManager.CoinSize].sort(BetManager.sortNumber);\r\n\t                for (var i = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n\t                    var bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.Coins[BetManager.CoinSize][i]));\r\n\t                    if (credit >= bet) {\r\n\t                        coinCount = BetManager.Coins[BetManager.CoinSize][i];\r\n\t                    }\r\n\t                }\r\n\t                BetManager.CoinCount = coinCount;\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.updateBetPosition = function () {\r\n\t        if (BetManager.TotalBets != null) {\r\n\t            for (var i = 0; i < BetManager.TotalBets.length; i++) {\r\n\t                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n\t                    if (i <= 0) {\r\n\t                        BetManager.minBet = true;\r\n\t                        BetManager.maxBet = false;\r\n\t                    }\r\n\t                    else if (i >= BetManager.TotalBets.length - 1) {\r\n\t                        BetManager.minBet = false;\r\n\t                        BetManager.maxBet = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        BetManager.minBet = false;\r\n\t                        BetManager.maxBet = false;\r\n\t                    }\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBetPosition, i + 1 + \"/\" + BetManager.TotalBets.length);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBetPosition);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.unHideValues = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        for (var i = 0; i < HtmlController_1.HtmlController.HideButtons.length; i++) {\r\n\t            HtmlController_1.HtmlController.HideButtons[i].unHide(credit);\r\n\t        }\r\n\t    };\r\n\t    BetManager.hideValues = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        for (var i = 0; i < HtmlController_1.HtmlController.HideButtons.length; i++) {\r\n\t            HtmlController_1.HtmlController.HideButtons[i].hide(credit);\r\n\t        }\r\n\t    };\r\n\t    BetManager.createBetForSpin = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t            return new SpinBet(BetType.Total, BetManager.CoinSize, BetManager.CoinCount, null, null);\r\n\t        }\r\n\t        else {\r\n\t            return new SpinBet(BetType.Total, null, null, null, BetManager.Bet);\r\n\t        }\r\n\t    };\r\n\t    BetManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"BetManager\", s);\r\n\t        }\r\n\t    };\r\n\t    BetManager.minBet = false;\r\n\t    BetManager.maxBet = false;\r\n\t    return BetManager;\r\n\t}());\r\n\texports.BetManager = BetManager;\r\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar ModuleManager = (function () {\r\n\t    function ModuleManager() {\r\n\t    }\r\n\t    ModuleManager.registerGameModule = function (key, module) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"registerGameModule \" + key);\r\n\t        }\r\n\t        if (ModuleManager._gameModules[key] == null) {\r\n\t            ModuleManager._gameModules[key] = module;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                ModuleManager.log(\"ERROR try to register game module with same key: \" + key);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.registerChannelModule = function (key, module) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"registerChannelModule \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] == null) {\r\n\t            ModuleManager._channelModules[key] = module;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                ModuleManager.log(\"ERROR try to register channel module with same key: \" + key);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.connectModules = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"connectModules\");\r\n\t        }\r\n\t        var allChannelsHaveController = true;\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            if (ModuleManager._gameModules[key] != null) {\r\n\t                ModuleManager._channelModules[key].addController(ModuleManager._gameModules[key]);\r\n\t                if (false) {\r\n\t                    ModuleManager.log(\"connect module key: \" + key);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    ModuleManager.log(\"cant connect module key: \" + key);\r\n\t                }\r\n\t                allChannelsHaveController = false;\r\n\t            }\r\n\t        }\r\n\t        return allChannelsHaveController;\r\n\t    };\r\n\t    ModuleManager.initModules = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"initModules\");\r\n\t        }\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            ModuleManager._channelModules[key].initReceived();\r\n\t        }\r\n\t        if (ModuleManager.gambleActive() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].initIntro();\r\n\t        }\r\n\t        else if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].initIntro();\r\n\t        }\r\n\t        else {\r\n\t            if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t                ModuleManager._channelModules[GameModules.Base].initIntro();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.gambleEnabled = function () {\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay && !AppContext_1.AppContext.gameConfiguration.AutoplayGambleEnabled) {\r\n\t            return false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.status === GameStatuses.Enabled) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.gambleActive = function () {\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            return false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.status === GameStatuses.Active) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.freespinsEnabled = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.status === GameStatuses.Enabled) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.freespinsActive = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.status === GameStatuses.Active) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.enableGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableGamble\");\r\n\t        }\r\n\t        if (ModuleManager.gambleEnabled() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.startGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startGamble\");\r\n\t        }\r\n\t        if (ModuleManager.gambleActive()) {\r\n\t            ModuleManager.outroModule(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.enableFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.startFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].start();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.endFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"endFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].end();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disableGamble\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableBase = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disableBase\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableChannelModule = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disable\" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.changeBetColor = function (green) {\r\n\t        if (green === void 0) { green = false; }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].changeBetColor(green);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.initNewBet = function (animate) {\r\n\t        if (animate === void 0) { animate = true; }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].initNewBet(animate);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.introModule = function (key, long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"introModule key: \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].intro(long);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.outroModule = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"outroModule key: \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].outro();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.collect = function (key) {\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].collect();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.collectInModule = function (key) {\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].collectReceived();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.restoreGameRound = function (key, collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].restoreGameRound(collect);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.dispatchAction = function (action) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"dispatchAction action: \" + action);\r\n\t        }\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            ModuleManager._channelModules[key].dispatchAction(action);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.cycleHelp = function () {\r\n\t        if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].cycleHelp();\r\n\t        }\r\n\t        else {\r\n\t            if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t                ModuleManager._channelModules[GameModules.Base].cycleHelp();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.setAutoplayAfterFeature = function (tf) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"setAutoplayAfterFeature to \" + tf);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].setAutoplayAfterFeature(tf);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.primaryGameEnded = function () {\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            return ModuleManager._channelModules[GameModules.Base].primaryGameEnded();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.toggleModuleSounds = function (key, enable) {\r\n\t        if (ModuleManager._gameModules[key] != null) {\r\n\t            ModuleManager._gameModules[key].toggleSounds(enable);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.resetSceneAsOnCollect = function (key) {\r\n\t        if (ModuleManager._gameModules[key] != null) {\r\n\t            ModuleManager._gameModules[key].collect();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.resetWinAnimator = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"resetWinAnimator:\" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].resetWinAnimator();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.getActiveGameModules = function () {\r\n\t        var activeModulesArray = [];\r\n\t        if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.modules != null) {\r\n\t            for (var key in GameManager_1.GameManager.gameResponse.modules) {\r\n\t                if (GameManager_1.GameManager.gameResponse.modules[key].status !== GameStatuses.Disabled) {\r\n\t                    activeModulesArray.push(key);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return activeModulesArray;\r\n\t    };\r\n\t    ModuleManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ModuleManager\", s);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager._gameModules = {};\r\n\t    ModuleManager._channelModules = {};\r\n\t    return ModuleManager;\r\n\t}());\r\n\texports.ModuleManager = ModuleManager;\r\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar CashierDialog_1 = __webpack_require__(34);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar BalanceManager = (function () {\r\n\t    function BalanceManager() {\r\n\t    }\r\n\t    BalanceManager.setBalance = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.real != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, GameManager_1.GameManager.gameResponse.balance.real.toString());\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.balance.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t                }\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.bonus != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, GameManager_1.GameManager.gameResponse.balance.bonus.toString());\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.real != null && GameManager_1.GameManager.gameResponse.balance.bonus != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.balance.real, GameManager_1.GameManager.gameResponse.balance.bonus));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.fixBalance = function () {\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        var realDenom = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceRealDenom));\r\n\t        var win = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataTotalWin));\r\n\t        var winDenom;\r\n\t        var total = parseFloat(neo_common_1.NumberUtils.add(bonus, real));\r\n\t        var bet = BetManager_1.BetManager.Bet;\r\n\t        var betDenom = BetManager_1.BetManager.CoinCount;\r\n\t        var denom = BetManager_1.BetManager.CoinSize;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            if (AppContext_1.AppContext.gameDefinition.Gamble && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod !== \"cumulative\") {\r\n\t                if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t                    var totalRealBalance = DataManager_1.DataManager.GameRoundClosed ? real : parseFloat(neo_common_1.NumberUtils.add(real, win));\r\n\t                    var totalBalance = DataManager_1.DataManager.GameRoundClosed ? total : parseFloat(neo_common_1.NumberUtils.add(total, win));\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, totalRealBalance.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, totalBalance.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, totalBalance.toString());\r\n\t                }\r\n\t            }\r\n\t            else if (!AppContext_1.AppContext.gameDefinition.Gamble && !DataManager_1.DataManager.Collectable) {\r\n\t                if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, total.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, total.toString());\r\n\t                }\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (denom != null && win != null) {\r\n\t            winDenom = parseFloat(neo_common_1.NumberUtils.devide(win, denom));\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.subtract(real, bet));\r\n\t                if (denom != null && betDenom != null) {\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.subtract(realDenom, betDenom));\r\n\t                }\r\n\t            }\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t        }\r\n\t        else {\r\n\t            if (win > 0) {\r\n\t                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.add(real, win));\r\n\t                    if (denom != null && winDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.add(realDenom, winDenom));\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(real, bet), win));\r\n\t                    if (denom != null && winDenom != null && betDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(realDenom, betDenom), winDenom));\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(total, bet), win));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(total, bet), win));\r\n\t            }\r\n\t            else {\r\n\t                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.subtract(real, bet));\r\n\t                    if (denom != null && betDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.subtract(realDenom, betDenom));\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.hasCredit = function (maxBet, onSpin) {\r\n\t        if (maxBet === void 0) { maxBet = false; }\r\n\t        if (onSpin === void 0) { onSpin = false; }\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        var win = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataTotalWin));\r\n\t        var bet = BetManager_1.BetManager.Bet;\r\n\t        var canPlay = true;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            win = 0;\r\n\t        }\r\n\t        if (bonus != null && bonus > 0) {\r\n\t            if (bonus >= bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            if (AppContext_1.AppContext.current) {\r\n\t                AppContext_1.AppContext.current.closeDialog();\r\n\t            }\r\n\t            if (CashierDialog_1.CashierDialog.opened) {\r\n\t                CashierDialog_1.CashierDialog.onClose();\r\n\t            }\r\n\t            if (onSpin) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t            }\r\n\t            canPlay = true;\r\n\t        }\r\n\t        else if (real <= 0 || real < bet) {\r\n\t            var credit = parseFloat(neo_common_1.NumberUtils.add(real, win));\r\n\t            if (credit > 0 && credit >= bet) {\r\n\t                if (AppContext_1.AppContext.current) {\r\n\t                    AppContext_1.AppContext.current.closeDialog();\r\n\t                }\r\n\t                if (CashierDialog_1.CashierDialog.opened) {\r\n\t                    CashierDialog_1.CashierDialog.onClose();\r\n\t                }\r\n\t                if (onSpin) {\r\n\t                    FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t                }\r\n\t                canPlay = true;\r\n\t            }\r\n\t            else {\r\n\t                if (AppContext_1.AppContext.current && onSpin) {\r\n\t                    ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.ShowCashierMessage) {\r\n\t                        CashierDialog_1.CashierDialog.openDialog();\r\n\t                    }\r\n\t                    else {\r\n\t                        AppContext_1.AppContext.current.showDialog(Languages_1.Languages.getRid(\"NOT_ENOUGH_CREDIT\"), false);\r\n\t                    }\r\n\t                    neo_games_1.Platforms.Platforms.clientError(\"NOT_ENOUGH_CREDIT\", Languages_1.Languages.getRid(\"NOT_ENOUGH_CREDIT\"));\r\n\t                    GameManager_1.GameManager.requestSend = false;\r\n\t                }\r\n\t                canPlay = false;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (AppContext_1.AppContext.current) {\r\n\t                AppContext_1.AppContext.current.closeDialog();\r\n\t            }\r\n\t            if (CashierDialog_1.CashierDialog.opened) {\r\n\t                CashierDialog_1.CashierDialog.onClose();\r\n\t            }\r\n\t            if (onSpin) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t            }\r\n\t            canPlay = true;\r\n\t        }\r\n\t        return canPlay;\r\n\t    };\r\n\t    BalanceManager.poolingBalance = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.PollCredit > 0 &&\r\n\t            DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balance = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t            if (balance != null && BetManager_1.BetManager.Bet != null && balance >= BetManager_1.BetManager.Bet) {\r\n\t                return;\r\n\t            }\r\n\t            else {\r\n\t                if (!BalanceManager._poolBalance) {\r\n\t                    setTimeout(function () {\r\n\t                        BalanceManager.refreshBalance();\r\n\t                    }, AppContext_1.AppContext.gameConfiguration.PollCredit);\r\n\t                    BalanceManager._poolBalance = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.refreshBalance = function (forced) {\r\n\t        if (forced === void 0) { forced = false; }\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient.balance().then(function (response) {\r\n\t                BalanceManager.balanceReceived(response, forced);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.balanceReceived = function (response, forced) {\r\n\t        if (forced === void 0) { forced = false; }\r\n\t        BalanceManager._poolBalance = false;\r\n\t        var bonus = response.bonus.toString();\r\n\t        var real = response.real.toString();\r\n\t        var total = neo_common_1.NumberUtils.add(response.bonus, response.real);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, real);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, total);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(response.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, total);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(response.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t        BalanceManager.poolingBalance();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(total), forced: forced });\r\n\t    };\r\n\t    BalanceManager.recalculateDenomBalance = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal)), BetManager_1.BetManager.CoinSize)).toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal)), BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"BalanceManager\", s);\r\n\t        }\r\n\t    };\r\n\t    BalanceManager._poolBalance = false;\r\n\t    return BalanceManager;\r\n\t}());\r\n\texports.BalanceManager = BalanceManager;\r\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Dialog_1 = __webpack_require__(35);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar CashierDialog = (function () {\r\n\t    function CashierDialog() {\r\n\t    }\r\n\t    CashierDialog.openDialog = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"openDialog()\");\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"cashier\", true);\r\n\t        CashierDialog.opened = true;\r\n\t        CashierDialog._element = document.getElementById(\"cashierDialog\");\r\n\t        if (CashierDialog._element != null) {\r\n\t            CashierDialog._cashierButton = document.getElementById(\"cashierButton\");\r\n\t            if (CashierDialog._cashierButton != null) {\r\n\t                CashierDialog._cashierButton.onclick = CashierDialog.onCashier;\r\n\t            }\r\n\t            CashierDialog._refreshButton = document.getElementById(\"refreshButton\");\r\n\t            if (CashierDialog._refreshButton != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.CashierMessageShowRefreshBalanceButton) {\r\n\t                    CashierDialog._refreshButton.onclick = CashierDialog.onRefreshBalance;\r\n\t                }\r\n\t                else {\r\n\t                    CashierDialog._refreshButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            CashierDialog._closeButton = document.getElementById(\"cashierCloseButton\");\r\n\t            if (CashierDialog._closeButton != null) {\r\n\t                CashierDialog._closeButton.onclick = CashierDialog.onClose;\r\n\t            }\r\n\t            CashierDialog._closeButtonIcon = document.getElementById(\"cashierCloseButtonIcon\");\r\n\t            if (CashierDialog._closeButtonIcon != null) {\r\n\t                CashierDialog._closeButtonIcon.onclick = CashierDialog.onClose;\r\n\t            }\r\n\t            if (CashierDialog._element.classList.contains(Dialog_1.Dialog.DisabledClass)) {\r\n\t                CashierDialog._element.classList.remove(Dialog_1.Dialog.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.onCashier = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onCashier()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.CashierUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({\r\n\t                reason: \"InsufficientFunds\",\r\n\t                target: AppContext_1.AppContext.gameConfiguration.CashierUrl,\r\n\t            });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n\t        }\r\n\t        else {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier();\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.onRefreshBalance = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onRefreshBalance()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t    };\r\n\t    CashierDialog.onClose = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onClose()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        CashierDialog.opened = false;\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"cashier\", false);\r\n\t        if (!CashierDialog._element.classList.contains(Dialog_1.Dialog.DisabledClass)) {\r\n\t            CashierDialog._element.classList.add(Dialog_1.Dialog.DisabledClass);\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.id != null || FreeRoundBonusExtended_1.FreeRoundBonusExtended.otherOfferes.length > 0) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.opened = false;\r\n\t    return CashierDialog;\r\n\t}());\r\n\texports.CashierDialog = CashierDialog;\r\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar Dialog = (function () {\r\n\t    function Dialog(app) {\r\n\t        this._app = app;\r\n\t        this._element = document.getElementById(\"dialog\");\r\n\t        this._elementHeading = document.getElementById(\"dialogHeading\");\r\n\t        this._elementCode = document.getElementById(\"errorCode\");\r\n\t        this._elementText = document.getElementById(\"dialogText\");\r\n\t        this._elementButton = document.getElementById(\"dialogButton\");\r\n\t        this._elementButtonReload = document.getElementById(\"dialogReloadButton\");\r\n\t        this._elementCustomButtons = document.getElementById(\"dialogCustomButtons\");\r\n\t        this._elementInfo = document.getElementById(\"dialogInfo\");\r\n\t        this._elementError = document.getElementById(\"dialogError\");\r\n\t        if (this._element != null && !this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t            this._element.classList.add(Dialog.DisabledClass);\r\n\t        }\r\n\t        if (this._elementInfo != null) {\r\n\t            this._elementInfo.style.display = \"none\";\r\n\t        }\r\n\t        if (this._elementError != null) {\r\n\t            this._elementError.style.display = \"none\";\r\n\t        }\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"dialogTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.closeDialog.bind(this));\r\n\t        this.onClickError = this.onClickError.bind(this);\r\n\t        this.onClickRefresh = this.onClickRefresh.bind(this);\r\n\t        this._customData = null;\r\n\t    }\r\n\t    Dialog.prototype.openDialog = function (text, code, errorId, error, special, gameRoundId, customData) {\r\n\t        if (code === void 0) { code = \"\"; }\r\n\t        if (errorId === void 0) { errorId = \"\"; }\r\n\t        if (error === void 0) { error = false; }\r\n\t        if (special === void 0) { special = false; }\r\n\t        if (gameRoundId === void 0) { gameRoundId = \"0\"; }\r\n\t        if (customData === void 0) { customData = null; }\r\n\t        this._customData = customData;\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Dialog\", (\"openDialog('\" + text + \"', code: '\" + code + \"', errorId: '\" + errorId + \"', error: \" + error + \", special: \" + special + \", \") +\r\n\t                (\"gameRoundId: \" + gameRoundId + \", customData: \" + (customData ? JSON.stringify(customData) : \"\") + \")\"));\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", true);\r\n\t        if (this._element != null) {\r\n\t            var ultraSpecial = !neo_common_1.Utils.isNullOrUndefined(this._customData) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data.ultraSpecial) &&\r\n\t                this._customData.data.ultraSpecial === true;\r\n\t            if (this._elementText != null) {\r\n\t                this._elementText.innerHTML = text;\r\n\t            }\r\n\t            if (this._elementCode != null) {\r\n\t                if (code !== \"\" && this._elementCode != null && !special) {\r\n\t                    if (errorId === \"\") {\r\n\t                        errorId = \"0\";\r\n\t                    }\r\n\t                    var errorString = gameRoundId + \"-\" + errorId;\r\n\t                    code = \"CODE_\" + code.replace(\"-\", \"_\");\r\n\t                    var errorValue = Languages_1.Languages.getRid(code, errorString);\r\n\t                    this._elementCode.textContent = errorValue.replace(/ /g, \"\");\r\n\t                    this._elementCode.style.display = \"block\";\r\n\t                }\r\n\t                else {\r\n\t                    this._elementCode.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            if (error && !ultraSpecial) {\r\n\t                if (this._element.classList.contains(Dialog.InfoClass)) {\r\n\t                    this._element.classList.remove(Dialog.InfoClass);\r\n\t                }\r\n\t                if (!this._element.classList.contains(Dialog.ErrorClass)) {\r\n\t                    this._element.classList.add(Dialog.ErrorClass);\r\n\t                }\r\n\t                if (this._elementInfo != null) {\r\n\t                    this._elementInfo.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementError != null) {\r\n\t                    this._elementError.style.display = \"block\";\r\n\t                }\r\n\t                if (this._elementHeading != null) {\r\n\t                    this._elementHeading.textContent = Languages_1.Languages.getRid(\"DLG_ERROR\");\r\n\t                }\r\n\t                if (this._elementButtonReload != null) {\r\n\t                    this._elementButtonReload.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementButton != null) {\r\n\t                    this._elementButton.style.display = \"block\";\r\n\t                    this._elementButton.onclick = this.onClickError;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this._element.classList.contains(Dialog.InfoClass)) {\r\n\t                    this._element.classList.add(Dialog.InfoClass);\r\n\t                }\r\n\t                if (this._element.classList.contains(Dialog.ErrorClass)) {\r\n\t                    this._element.classList.remove(Dialog.ErrorClass);\r\n\t                }\r\n\t                if (this._elementInfo != null) {\r\n\t                    this._elementInfo.style.display = \"block\";\r\n\t                }\r\n\t                if (this._elementError != null) {\r\n\t                    this._elementError.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementHeading != null) {\r\n\t                    this._elementHeading.textContent = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t                }\r\n\t                if (this._elementButton != null) {\r\n\t                    this._elementButton.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementButtonReload) {\r\n\t                    this._elementButtonReload.style.display = \"none\";\r\n\t                }\r\n\t                if (ultraSpecial) {\r\n\t                    if (this._elementCode != null) {\r\n\t                        this._elementCode.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._elementButton != null) {\r\n\t                        this._elementButton.style.display = \"block\";\r\n\t                        this._elementButton.onclick = this.onClickError;\r\n\t                    }\r\n\t                }\r\n\t                else if (special) {\r\n\t                    if (this._elementCode != null) {\r\n\t                        this._elementCode.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._elementButtonReload != null) {\r\n\t                        this._elementButtonReload.style.display = \"block\";\r\n\t                        this._elementButtonReload.onclick = this.onClickRefresh;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (this._timer.isPlaying()) {\r\n\t                        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t                    }\r\n\t                    this._timer.stop();\r\n\t                    this._timer.start(180);\r\n\t                }\r\n\t            }\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(this._customData.data) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data.actions)) {\r\n\t                this.handleCustomActions(this._customData.data.actions);\r\n\t            }\r\n\t            if (this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t                this._element.classList.remove(Dialog.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.errorGroup(\"Dialog\", \"ERROR no dialog\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.closeDialog = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Dialog\", \"closeDialog()\");\r\n\t        }\r\n\t        this._timer.stop();\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t        if (!this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t            this._element.classList.add(Dialog.DisabledClass);\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.id != null || FreeRoundBonusExtended_1.FreeRoundBonusExtended.otherOfferes.length > 0) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.setOpenedStatus();\r\n\t    };\r\n\t    Dialog.prototype.onClickError = function () {\r\n\t        var clientHost = AppContext_1.AppContext.clientHost;\r\n\t        if (clientHost) {\r\n\t            var request = null;\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(this._customData)) {\r\n\t                var dialogRequest = this._customData;\r\n\t                request = dialogRequest.error;\r\n\t                request.reason = dialogRequest.error.errorMessageTitle;\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Dialog\", \"onClickError -> calling client host '\" + AppContext_1.AppContext.gameDefinition.ClientHostType + \".endGame()', request: \", request);\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.exitHandler = \"dialog\";\r\n\t            neo_games_1.Platforms.Platforms.gameClosing();\r\n\t            clientHost.endGame(this._app, request);\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickRefresh = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    Dialog.prototype.handleCustomActions = function (actions) {\r\n\t        if (actions.length > 0) {\r\n\t            this.hideAllButtons();\r\n\t            var buttons = [];\r\n\t            var imageWidthCorrection = 0.82;\r\n\t            var baseWidth = 0;\r\n\t            var baseFontSize = 0;\r\n\t            var maxWidth = 0;\r\n\t            for (var i = 0; i < actions.length; i++) {\r\n\t                var currentAction = actions[i];\r\n\t                if (currentAction && currentAction[\"type\"]) {\r\n\t                    var button = document.createElement(\"div\");\r\n\t                    button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t                    this._elementCustomButtons.appendChild(button);\r\n\t                    baseWidth =\r\n\t                        parseInt(window.getComputedStyle(button).getPropertyValue(\"width\")) * imageWidthCorrection;\r\n\t                    baseFontSize = parseInt(window.getComputedStyle(button).getPropertyValue(\"font-size\"));\r\n\t                    var currentWidth = 0;\r\n\t                    if (currentAction[\"text\"]) {\r\n\t                        currentWidth = this.getButtonTextWidth(currentAction[\"text\"], baseFontSize);\r\n\t                        button.textContent = currentAction[\"text\"];\r\n\t                    }\r\n\t                    if (currentWidth > maxWidth) {\r\n\t                        maxWidth = currentWidth;\r\n\t                    }\r\n\t                    switch (currentAction[\"type\"]) {\r\n\t                        case \"continue\":\r\n\t                            button.onclick = this.onClickContinue.bind(this);\r\n\t                            break;\r\n\t                        case \"exit\":\r\n\t                            button.onclick = this.onClickClose;\r\n\t                            break;\r\n\t                        case \"history\":\r\n\t                            button.onclick = this.onClickHistory;\r\n\t                            break;\r\n\t                        case \"reload\":\r\n\t                            button.onclick = this.onClickReload;\r\n\t                            break;\r\n\t                        case \"restore\":\r\n\t                            button.onclick = this.onClickRestore.bind(this, currentAction[\"customData\"]);\r\n\t                            break;\r\n\t                    }\r\n\t                    buttons.push(button);\r\n\t                }\r\n\t            }\r\n\t            if (maxWidth > baseWidth) {\r\n\t                var newFontSize = Math.round(baseFontSize * (baseWidth / maxWidth));\r\n\t                for (var i = 0; i < buttons.length; i++) {\r\n\t                    buttons[i].style.fontSize = newFontSize + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.getButtonTextWidth = function (text, fontSize) {\r\n\t        var elem = document.createElement(\"span\");\r\n\t        elem.textContent = text;\r\n\t        elem.style.fontSize = fontSize + \"px\";\r\n\t        document.body.appendChild(elem);\r\n\t        var width = elem.offsetWidth;\r\n\t        document.body.removeChild(elem);\r\n\t        return width;\r\n\t    };\r\n\t    Dialog.prototype.hideAllButtons = function () {\r\n\t        if (this._elementButton != null) {\r\n\t            this._elementButton.style.display = \"none\";\r\n\t        }\r\n\t        if (this._elementButtonReload != null) {\r\n\t            this._elementButtonReload.style.display = \"none\";\r\n\t        }\r\n\t        while (this._elementCustomButtons.firstChild) {\r\n\t            this._elementCustomButtons.removeChild(this._elementCustomButtons.firstChild);\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickClose = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"dialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    Dialog.prototype.onClickContinue = function () {\r\n\t        this.closeDialog();\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    Dialog.prototype.onClickHistory = function () {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickReload = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    Dialog.prototype.onClickRestore = function (module) {\r\n\t        this.closeDialog();\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(module);\r\n\t    };\r\n\t    Dialog.DisabledClass = \"_disabled\";\r\n\t    Dialog.InfoClass = \"info\";\r\n\t    Dialog.ErrorClass = \"error\";\r\n\t    return Dialog;\r\n\t}());\r\n\texports.Dialog = Dialog;\r\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(39);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar FreeRoundBonusExtended = (function (_super) {\r\n\t    __extends(FreeRoundBonusExtended, _super);\r\n\t    function FreeRoundBonusExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    FreeRoundBonusExtended.activateOffer = function () {\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.status === \"active\") {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.inFrb = true;\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            GameManager_1.GameManager.softInit();\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusExtended.declineOffer = function () { };\r\n\t    FreeRoundBonusExtended.initializeFreeRounds = function () {\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.initialize();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.initialize();\r\n\t    };\r\n\t    FreeRoundBonusExtended.showFreeRounds = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus_1.FreeRoundBonus.openOther();\r\n\t    };\r\n\t    FreeRoundBonusExtended.endFreeRounds = function () { };\r\n\t    return FreeRoundBonusExtended;\r\n\t}(FreeRoundBonus_1.FreeRoundBonus));\r\n\texports.FreeRoundBonusExtended = FreeRoundBonusExtended;\r\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonusDialog = (function () {\r\n\t    function FreeRoundBonusDialog() {\r\n\t    }\r\n\t    FreeRoundBonusDialog.initialize = function () {\r\n\t        FreeRoundBonusDialog.Dialog = document.getElementById(\"frbDialog\");\r\n\t        FreeRoundBonusDialog.DialogContentOther = document.getElementById(\"frbDialogContentOther\");\r\n\t        FreeRoundBonusDialog.DialogContentOther2 = document.getElementById(\"frbDialogContentOther2\");\r\n\t        FreeRoundBonusDialog.DialogContentOtherList = document.getElementById(\"frbDialogContentOtherList\");\r\n\t        FreeRoundBonusDialog.DialogContentOtherList2 = document.getElementById(\"frbDialogContentOtherList2\");\r\n\t        FreeRoundBonusDialog.DialogContentNew = document.getElementById(\"frbDialogContentNew\");\r\n\t        FreeRoundBonusDialog.DialogContentActive = document.getElementById(\"frbDialogContentActive\");\r\n\t        FreeRoundBonusDialog.DialogContentEnd = document.getElementById(\"frbDialogContentEnd\");\r\n\t        FreeRoundBonusDialog.DialogContentExpired = document.getElementById(\"frbDialogContentExpired\");\r\n\t        FreeRoundBonusDialog.ConfirmationDialog = document.getElementById(\"frbConfirmationDialog\");\r\n\t        FreeRoundBonusDialog.DialogButtonPlay = document.getElementById(\"dialogBtnPlay\");\r\n\t        FreeRoundBonusDialog.DialogButtonPostPone = document.getElementById(\"dialogBtnPostPone\");\r\n\t        FreeRoundBonusDialog.DialogButtonDeny = document.getElementById(\"dialogBtnDeny\");\r\n\t        FreeRoundBonusDialog.DialogButtonOk = document.getElementById(\"dialogBtnOk\");\r\n\t        FreeRoundBonusDialog.DialogButtonYes = document.getElementById(\"dialogBtnYes\");\r\n\t        FreeRoundBonusDialog.DialogButtonNo = document.getElementById(\"dialogBtnNo\");\r\n\t        FreeRoundBonusDialog.bindEvents();\r\n\t        FreeRoundBonusDialog.setupFRBDialogByConfiguration();\r\n\t    };\r\n\t    FreeRoundBonusDialog.showDialog = function (type) {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus_1.FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbAssignedCount, FreeRoundBonus_1.FreeRoundBonus.assignedCount());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbValidTo, FreeRoundBonus_1.FreeRoundBonus.valid());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbWin, FreeRoundBonus_1.FreeRoundBonus.win());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus_1.FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbAssignedCount, FreeRoundBonus_1.FreeRoundBonus.assignedCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbValidTo, FreeRoundBonus_1.FreeRoundBonus.valid());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbWin, FreeRoundBonus_1.FreeRoundBonus.win());\r\n\t        FreeRoundBonusDialog.termsUrl();\r\n\t        DataManager_1.DataManager.showDataElements(\"frbRules\", \"\");\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.rulesLink() === \"\") {\r\n\t            DataManager_1.DataManager.hideDataElements(\"frbRules\");\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.win() === \"\") {\r\n\t            DataManager_1.DataManager.hideDataElements(\"frbWin\");\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.showDataElements(\"frbWin\");\r\n\t        }\r\n\t        FreeRoundBonusDialog.hideAllButtons();\r\n\t        FreeRoundBonusDialog.hideAllContents();\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbCumulative\");\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbPlatformTransactionFail\");\r\n\t        neo_games_1.Platforms.Platforms.closeMenu();\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"frb\", true);\r\n\t        switch (type) {\r\n\t            case \"new\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"new\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentNew);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbCumulative\");\r\n\t                }\r\n\t                if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t                }\r\n\t                break;\r\n\t            case \"other\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"other\";\r\n\t                FreeRoundBonusDialog.refillOtherGames();\r\n\t                if (AppContext_1.AppContext != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.ShowSimilarGames) {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther);\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther2);\r\n\t                }\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                FreeRoundBonus_1.FreeRoundBonus.openOther();\r\n\t                break;\r\n\t            case \"active\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"active\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentActive);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbCumulative\");\r\n\t                }\r\n\t                break;\r\n\t            case \"end\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"end\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentEnd);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.status === \"pending\" && FreeRoundBonus_1.FreeRoundBonus.totalWin > 0) {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbPlatformTransactionFail\");\r\n\t                }\r\n\t                break;\r\n\t            case \"expired\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"expired\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentExpired);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                break;\r\n\t        }\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbRegular\");\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbFeature\");\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.state === \"new\" || FreeRoundBonus_1.FreeRoundBonus.state === \"active\") {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.hasFeature !== null && FreeRoundBonus_1.FreeRoundBonus.hasFeature) {\r\n\t                FreeRoundBonusDialog.Dialog.classList.add(\"ffrDialog\");\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.remainingCount() === \"1\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbFeatureSingle\");\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbFeatureMultiple\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusDialog.Dialog.classList.remove(\"ffrDialog\");\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.remainingCount() === \"1\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbRegularSingle\");\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbRegularMultiple\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.Dialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.setConfirmationDialog = function (value) {\r\n\t        FreeRoundBonusDialog.isConfirmationDialogOpened = value;\r\n\t    };\r\n\t    FreeRoundBonusDialog.setPointerEventsButtons = function (value) {\r\n\t        if (value === void 0) { value = \"\"; }\r\n\t        FreeRoundBonusDialog.DialogButtonPlay.style.pointerEvents = value;\r\n\t        FreeRoundBonusDialog.DialogButtonPostPone.style.pointerEvents = value;\r\n\t        FreeRoundBonusDialog.DialogButtonDeny.style.pointerEvents = value;\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideDialog = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"frb\", false);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.Dialog);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.bindEvents = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonPlay != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonPlay.onclick = FreeRoundBonusDialog.onPlay;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonPostPone != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonPostPone.onclick = FreeRoundBonusDialog.onPostPone;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonDeny != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonDeny.onclick = FreeRoundBonusDialog.onDeny;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonOk != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonOk.onclick = FreeRoundBonusDialog.onOk;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonYes != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonYes.onclick = FreeRoundBonusDialog.onYes;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonNo != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonNo.onclick = FreeRoundBonusDialog.onNo;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideAllButtons = function () {\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideAllContents = function () {\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentActive);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentNew);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther2);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentEnd);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentExpired);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.showElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (!element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.disableElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (!element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.onPlay = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.activateOffer();\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onPostPone = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableGame();\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onDeny = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(true);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"none\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onYes = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.declineOffer();\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onNo = function () {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t    };\r\n\t    FreeRoundBonusDialog.onOk = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.finishFreeRounds();\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableGame();\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.revalidateOtherGames = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl === \"\") {\r\n\t            return false;\r\n\t        }\r\n\t        FreeRoundBonusDialog.otherOffersKeys = [];\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            var now = new Date().getTime();\r\n\t            for (var i = 0; i < FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length; i++) {\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"validTo\"] != null) {\r\n\t                    var countDownDate = new Date(FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"validTo\"] + \"+00:00\").getTime();\r\n\t                    var distance = countDownDate - now;\r\n\t                    if (distance > 0 && FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"gameCode\"] != null) {\r\n\t                        FreeRoundBonusDialog.otherOffersKeys.push(FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"gameCode\"]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.otherOffersKeys.length > 0) {\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.refillOtherGames = function () {\r\n\t        if (FreeRoundBonusDialog.DialogContentOtherList != null) {\r\n\t            FreeRoundBonusDialog.DialogContentOtherList.innerHTML = \"\";\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogContentOtherList2 != null) {\r\n\t            FreeRoundBonusDialog.DialogContentOtherList2.innerHTML = \"\";\r\n\t        }\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            if (FreeRoundBonusDialog.otherOffersKeys.length > 0 && FreeRoundBonusDialog.otherOffersKeys[i] != null) {\r\n\t                FreeRoundBonusDialog.createItem(FreeRoundBonusDialog.otherOffersKeys[i], false, FreeRoundBonusDialog.DialogContentOtherList);\r\n\t                FreeRoundBonusDialog.createItem(FreeRoundBonusDialog.otherOffersKeys[i], true, FreeRoundBonusDialog.DialogContentOtherList2);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.createItem = function (gameCode, noClick, parent) {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        var itemHolder = document.createElement(\"div\");\r\n\t        var itemLoading = document.createElement(\"div\");\r\n\t        var itemLoadingIcon = document.createElement(\"div\");\r\n\t        var itemLogo = document.createElement(\"div\");\r\n\t        itemHolder.classList.add(\"frbOfferItem\");\r\n\t        itemLoading.classList.add(\"frbGameLoading\");\r\n\t        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n\t        itemLogo.classList.add(\"frbGameLogo\");\r\n\t        itemLogo.setAttribute(\"game\", gameCode);\r\n\t        itemLogo.style.background =\r\n\t            \"url(\" + AppContext_1.AppContext.gameConfiguration.StaticContentUrl + gameCode + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n\t        itemHolder.appendChild(itemLoading);\r\n\t        itemLoading.appendChild(itemLoadingIcon);\r\n\t        itemHolder.appendChild(itemLogo);\r\n\t        if (!noClick) {\r\n\t            itemLogo.onclick = FreeRoundBonusDialog.selectGame;\r\n\t        }\r\n\t        if (parent != null) {\r\n\t            parent.appendChild(itemHolder);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.selectGame = function (e) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n\t            var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t                var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t                var token = urlInfo[\"hash\"].substring(1);\r\n\t                var newUrl_1 = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n\t                var root = document.getElementById(\"root\");\r\n\t                if (root != null) {\r\n\t                    root.style.display = \"none\";\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n\t                if (neo_games_1.Platforms.Platforms.handleChangeGame) {\r\n\t                    return;\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    window.location.href = newUrl_1;\r\n\t                }, 100);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.termsUrl = function () {\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.termsUrl != null && FreeRoundBonus_1.FreeRoundBonus.termsUrl !== \"\") {\r\n\t            var elements = document.getElementsByClassName(\"termsLink\");\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.setAttribute(\"href\", FreeRoundBonus_1.FreeRoundBonus.termsUrl);\r\n\t                    element.addEventListener(\"click\", function (e) {\r\n\t                        e.stopPropagation();\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.setupFRBDialogByConfiguration = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.FRBShowDenyButton) {\r\n\t                FreeRoundBonusDialog.hideFRBDenyButton();\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.FRBShowPostponeButton) {\r\n\t                FreeRoundBonusDialog.hideFRBPostPoneButton();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideFRBDenyButton = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonDeny) {\r\n\t            FreeRoundBonusDialog.DialogButtonDeny.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t        }\r\n\t        var infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n\t        if (infoMsg) {\r\n\t            infoMsg.parentNode.removeChild(infoMsg);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideFRBPostPoneButton = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonPostPone) {\r\n\t            FreeRoundBonusDialog.DialogButtonPostPone.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t        }\r\n\t        var infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n\t        if (infoMsg) {\r\n\t            infoMsg.parentNode.removeChild(infoMsg);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.dialogActive = function () {\r\n\t        return !FreeRoundBonusDialog.Dialog.classList.contains(\"_hidden\");\r\n\t    };\r\n\t    FreeRoundBonusDialog.otherOffersKeys = [];\r\n\t    FreeRoundBonusDialog.isConfirmationDialogOpened = false;\r\n\t    return FreeRoundBonusDialog;\r\n\t}());\r\n\texports.FreeRoundBonusDialog = FreeRoundBonusDialog;\r\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(39);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(44);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar FreeRoundBonus = (function () {\r\n\t    function FreeRoundBonus() {\r\n\t    }\r\n\t    FreeRoundBonus.initialize = function (gameClient) {\r\n\t        if (!FreeRoundBonus.wasInitialized && gameClient != null) {\r\n\t            gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.activateOffer = function () {\r\n\t        if (FreeRoundBonus.status === \"active\") {\r\n\t            FreeRoundBonus.inFrb = true;\r\n\t            neo_games_1.Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t                GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t            }\r\n\t            GameManager_1.GameManager.softInit();\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t                GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t                GameApp_1.GameApp.gameClient\r\n\t                    .sendFreeRoundsActivateOfferRequest(GameApp_1.GameApp.key, FreeRoundBonus.id)\r\n\t                    .then(function (response) {\r\n\t                    FreeRoundBonus.activateOfferReceived(response);\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.declineOffer = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsDeclineOfferRequest(GameApp_1.GameApp.key, FreeRoundBonus.id)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.declineOfferReceived(response);\r\n\t                FreeRoundBonus.refreshCurrentOffers();\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.initializeFreeRounds = function () {\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.initialize();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.initialize();\r\n\t        if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null && FreeRoundBonus.status === \"active\") {\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.inFrb = true;\r\n\t            neo_games_1.Platforms.Platforms.featureInit({ type: \"FRB\" });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.showFreeRounds = function () {\r\n\t        if (FreeRoundBonus.id != null) {\r\n\t            FreeRoundBonus.countDown();\r\n\t            if (FreeRoundBonus.status !== \"active\") {\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                    FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                    FreeRoundBonus.enableUi();\r\n\t                }\r\n\t                else {\r\n\t                    if (!FreeRoundBonus.playing) {\r\n\t                        FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                        FreeRoundBonus.disableUi();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    FreeRoundBonus.frbSpin();\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                    FreeRoundBonus.disableUi();\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus.openOther();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.reopenFreeRounds = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.disableUi();\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus.status === \"new\" && FreeRoundBonus.state === \"new\") {\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.hideDialog();\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"active\") {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"end\") {\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.disableUi();\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"other\") {\r\n\t            if (FreeRoundBonus.validTo != null) {\r\n\t                var countDownDate = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n\t                var now = new Date().getTime();\r\n\t                var distance = countDownDate - now;\r\n\t                if (distance > 0) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                    FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                    FreeRoundBonus.enableUi();\r\n\t                }\r\n\t            }\r\n\t            else if (FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t                FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.enableUi();\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"\") {\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.openOther = function () {\r\n\t        if (FreeRoundBonus.id == null && FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t            FreeRoundBonus.countDownOther();\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.disableUi();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.endFreeRounds = function () {\r\n\t        if (FreeRoundBonus.id != null) {\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t            FreeRoundBonus.disableUi();\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null) {\r\n\t                if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                    FreeRoundBonus.totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t                }\r\n\t                if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"] != null) {\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"] === \"pending\") {\r\n\t                        FreeRoundBonus.status = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"];\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.finishFreeRounds = function () {\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.inFrb = false;\r\n\t        neo_games_1.Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n\t        FreeRoundBonus.isLastFrb = false;\r\n\t        FreeRoundBonus.endMsgDisplayed = false;\r\n\t        FreeRoundBonus.wasInitialized = false;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t        FreeRoundBonus.status = null;\r\n\t        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                ModuleManager_1.ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t        FreeRoundBonus.refreshCurrentOffers();\r\n\t    };\r\n\t    FreeRoundBonus.refreshCurrentOffers = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null) {\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t                if (FreeRoundBonus.id != null) {\r\n\t                    FreeRoundBonus.softInit = true;\r\n\t                    if (FreeRoundBonus.status === \"active\") {\r\n\t                        FreeRoundBonus.initializeFreeRounds();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonus.showFreeRounds();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    GameManager_1.GameManager.softInit();\r\n\t                    FreeRoundBonus.disableUi();\r\n\t                    if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                        GameManager_1.GameManager.canExit();\r\n\t                    }\r\n\t                }\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t                GameManager_1.GameManager.softInit();\r\n\t                FreeRoundBonus.disableUi();\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    GameManager_1.GameManager.canExit();\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.expiredFreeRounds = function () {\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.inFrb = false;\r\n\t        neo_games_1.Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n\t        FreeRoundBonus.isLastFrb = false;\r\n\t        FreeRoundBonus.endMsgDisplayed = false;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"expired\");\r\n\t    };\r\n\t    FreeRoundBonus.getCurrentOfferReceived = function (response) {\r\n\t        FreeRoundBonus.totalWin = 0;\r\n\t        FreeRoundBonus.termsUrl = null;\r\n\t        if (response != null) {\r\n\t            FreeRoundBonus.wasInitialized = true;\r\n\t            response.currentOffer = null;\r\n\t            if (response.currentOffer != null) {\r\n\t                if (response.currentOffer.id != null)\r\n\t                    FreeRoundBonus.id = response.currentOffer.id;\r\n\t                if (response.currentOffer.termsUrl != null)\r\n\t                    FreeRoundBonus.termsUrl = response.currentOffer.termsUrl;\r\n\t                if (response.currentOffer.roundsAssigned != null)\r\n\t                    FreeRoundBonus.roundsAssigned = response.currentOffer.roundsAssigned;\r\n\t                if (response.currentOffer.roundsStarted != null)\r\n\t                    FreeRoundBonus.roundsStarted = response.currentOffer.roundsStarted;\r\n\t                if (response.currentOffer.roundsPlayed != null)\r\n\t                    FreeRoundBonus.roundsPlayed = response.currentOffer.roundsPlayed;\r\n\t                if (response.currentOffer.remainingCount != null)\r\n\t                    FreeRoundBonus.remainingFrbCount = response.currentOffer.remainingCount;\r\n\t                if (response.currentOffer.playing != null)\r\n\t                    FreeRoundBonus.playing = response.currentOffer.playing;\r\n\t                if (response.currentOffer.status != null)\r\n\t                    FreeRoundBonus.status = response.currentOffer.status;\r\n\t                if (response.currentOffer.winType != null)\r\n\t                    FreeRoundBonus.winType = response.currentOffer.winType;\r\n\t                if (response.currentOffer.validTo != null)\r\n\t                    FreeRoundBonus.validTo = response.currentOffer.validTo;\r\n\t                if (response.currentOffer.winPayMethod != null)\r\n\t                    FreeRoundBonus.winPayMethod = response.currentOffer.winPayMethod;\r\n\t                if (response.currentOffer.collectPartial != null)\r\n\t                    FreeRoundBonus.collectPartial = response.currentOffer.collectPartial;\r\n\t                if (response.currentOffer.hasBuyFeature != null)\r\n\t                    FreeRoundBonus.hasFeature = response.currentOffer.hasBuyFeature;\r\n\t                if (response.currentOffer.buyFeatureName != null)\r\n\t                    FreeRoundBonus.featureName = response.currentOffer.buyFeatureName;\r\n\t                if (FreeRoundBonus.remainingFrbCount == null) {\r\n\t                    if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                        FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t                    }\r\n\t                }\r\n\t                if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n\t                    FreeRoundBonus.isLastFrb = true;\r\n\t                }\r\n\t            }\r\n\t            FreeRoundBonus.otherOfferes = [];\r\n\t            if (response.otherOffers != null) {\r\n\t                FreeRoundBonus.otherOfferes = response.otherOffers;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.activateOfferReceived = function (response) {\r\n\t        FreeRoundBonus.inFrb = true;\r\n\t        neo_games_1.Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n\t        FreeRoundBonus.status = \"active\";\r\n\t        GameManager_1.GameManager.softInit();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t    };\r\n\t    FreeRoundBonus.declineOfferReceived = function (response) {\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t    };\r\n\t    FreeRoundBonus.valid = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.validTo != null) {\r\n\t            str = FreeRoundBonus.validTo;\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.assignedCount = function () {\r\n\t        var str = \"0\";\r\n\t        if (FreeRoundBonus.roundsAssigned != null) {\r\n\t            str = FreeRoundBonus.roundsAssigned.toString();\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.remainingCount = function () {\r\n\t        var str = \"0\";\r\n\t        if (FreeRoundBonus.remainingFrbCount == null) {\r\n\t            if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus.remainingFrbCount != null) {\r\n\t            if (FreeRoundBonus.id === -1 && FreeRoundBonus.isLastFrb) {\r\n\t                str = \"0\";\r\n\t            }\r\n\t            else {\r\n\t                str = FreeRoundBonus.remainingFrbCount.toString();\r\n\t            }\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.rulesLink = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.termsUrl != null) {\r\n\t            str = '<a href=\"' + FreeRoundBonus.termsUrl + '\" target=\"_blank\">' + FreeRoundBonus.termsUrl + \"</a>\";\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.win = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n\t            str =\r\n\t                Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, FreeRoundBonus.totalWin.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.frbSpin = function () {\r\n\t        if (FreeRoundBonus.id == null && !FreeRoundBonus.inFrb) {\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus.inFrb) {\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"] != null) {\r\n\t                FreeRoundBonus.roundsStarted = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"];\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                FreeRoundBonus.totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                FreeRoundBonus.remainingFrbCount = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"remainingCount\"];\r\n\t            }\r\n\t            else {\r\n\t                if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                    FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n\t        if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n\t            FreeRoundBonus.isLastFrb = true;\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.countDown = function () {\r\n\t        if (FreeRoundBonus.validTo != null) {\r\n\t            var countDownDate = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n\t            var now = new Date().getTime();\r\n\t            var distance = countDownDate - now;\r\n\t            var days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n\t            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n\t            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n\t            var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\t            if (distance < 0) {\r\n\t                FreeRoundBonus.id = null;\r\n\t                FreeRoundBonus.softInit = false;\r\n\t                FreeRoundBonus.remainingFrbCount = null;\r\n\t                FreeRoundBonus.roundsAssigned = 0;\r\n\t                FreeRoundBonus.roundsPlayed = 0;\r\n\t                FreeRoundBonus.roundsStarted = 0;\r\n\t                FreeRoundBonus.hasFeature = false;\r\n\t                if (FreeRoundBonus.state !== \"end\" && FreeRoundBonus.state !== \"other\") {\r\n\t                    if (!FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t                        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t                        FreeRoundBonus.state = \"expired\";\r\n\t                        FreeRoundBonus.enableGame();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                        FreeRoundBonus.enableGame();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (days > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, days + \"d\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, days + \"d\");\r\n\t                }\r\n\t                else if (hours > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n\t                }\r\n\t                else if (minutes > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    FreeRoundBonus.countDown();\r\n\t                }, 1000);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.countDownOther = function () {\r\n\t        if (!FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t            FreeRoundBonus.enableGame();\r\n\t        }\r\n\t        else {\r\n\t            setTimeout(function () {\r\n\t                FreeRoundBonus.countDownOther();\r\n\t            }, 2000);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.hasNewActiveOffer = function () {\r\n\t        if (FreeRoundBonus.id == null && FreeRoundBonus.remainingFrbCount > 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    FreeRoundBonus.updateRemainingCount = function (count) {\r\n\t        if (FreeRoundBonus.id == null || (FreeRoundBonus.id > -1 && FreeRoundBonus.status != \"active\")) {\r\n\t            if (count > 0) {\r\n\t                if (FreeRoundBonus.canInitDynamicFRB()) {\r\n\t                    FreeRoundBonus.softInitialize();\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.status === GameStatuses.Enabled) {\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                    }\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (FreeRoundBonus.id === -1) {\r\n\t            if (count > 0) {\r\n\t                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n\t                    FreeRoundBonus.isLastFrb = false;\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                }\r\n\t            }\r\n\t            else if (count === 0) {\r\n\t                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    FreeRoundBonus.isLastFrb = true;\r\n\t                    if (DataManager_1.DataManager.GameRoundClosed && !DataManager_1.DataManager.Autoplay && FreeRoundBonus.enabledUi) {\r\n\t                        FreeRoundBonus.endFreeRounds();\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.canInitDynamicFRB = function () {\r\n\t        return (!FreeRoundBonusIcon_1.FreeRoundBonusIcon.isDisabled() &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            !DataManager_1.DataManager.Autoplay &&\r\n\t            !ResponsibleDialog1_1.ResponsibleDialog1.opened);\r\n\t    };\r\n\t    FreeRoundBonus.softInitialize = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        ModuleManager_1.ModuleManager.disableBase();\r\n\t        if (!FreeRoundBonus.softInit) {\r\n\t            FreeRoundBonus.softInit = true;\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t                FreeRoundBonus.initializeFreeRounds();\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.softInit = false;\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t                ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.disableUi = function () {\r\n\t        FreeRoundBonus.enabledUi = false;\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t    };\r\n\t    FreeRoundBonus.enableUi = function () {\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            FreeRoundBonus.enabledUi = true;\r\n\t            if (FreeRoundBonus.hasNewActiveOffer()) {\r\n\t                FreeRoundBonus.softInitialize();\r\n\t                return;\r\n\t            }\r\n\t            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod == \"cumulative\") {\r\n\t                return;\r\n\t            }\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.enableActiveIcon();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.enableGame = function () {\r\n\t        if (FreeRoundBonus.softInit) {\r\n\t            GameManager_1.GameManager.softInit();\r\n\t            FreeRoundBonus.softInit = false;\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.getActiveGameModules().length == 0 ||\r\n\t            ModuleManager_1.ModuleManager.getActiveGameModules().indexOf(GameModules.Base) != -1) {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonus.inFrb = false;\r\n\t    FreeRoundBonus.isLastFrb = false;\r\n\t    FreeRoundBonus.playing = false;\r\n\t    FreeRoundBonus.otherOfferes = [];\r\n\t    FreeRoundBonus.wasInitialized = false;\r\n\t    FreeRoundBonus.state = \"\";\r\n\t    FreeRoundBonus.endMsgDisplayed = false;\r\n\t    FreeRoundBonus.softInit = false;\r\n\t    FreeRoundBonus.enabledUi = false;\r\n\t    return FreeRoundBonus;\r\n\t}());\r\n\texports.FreeRoundBonus = FreeRoundBonus;\r\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar FreeRoundBonusIcon = (function () {\r\n\t    function FreeRoundBonusIcon() {\r\n\t    }\r\n\t    FreeRoundBonusIcon.initialize = function () {\r\n\t        FreeRoundBonusIcon.IconNew = document.getElementById(\"frbIconNew\");\r\n\t        FreeRoundBonusIcon.IconActive = document.getElementById(\"frbIconActive\");\r\n\t        FreeRoundBonusIcon.bindEvents();\r\n\t    };\r\n\t    FreeRoundBonusIcon.showIcon = function (type) {\r\n\t        FreeRoundBonusIcon.hideAllIcons();\r\n\t        switch (type) {\r\n\t            case \"new\":\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB\", \"block\");\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n\t                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconNew);\r\n\t                RetentionPanel_1.RetentionPanel.revalidate();\r\n\t                break;\r\n\t            case \"active\":\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB\", \"block\");\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n\t                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconActive);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                        FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n\t                    }\r\n\t                }\r\n\t                RetentionPanel_1.RetentionPanel.revalidate();\r\n\t                break;\r\n\t        }\r\n\t        FreeRoundBonusIcon.toggleCumulative();\r\n\t    };\r\n\t    FreeRoundBonusIcon.toggleCumulative = function () {\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                FreeRoundBonusIcon.IconActive.classList.add(\"cumulativeFrb\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                FreeRoundBonusIcon.IconActive.classList.remove(\"cumulativeFrb\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.bindEvents = function () {\r\n\t        if (FreeRoundBonusIcon.IconNew != null) {\r\n\t            FreeRoundBonusIcon.IconNew.onclick = FreeRoundBonusIcon.handleIconClick.bind(this, FreeRoundBonusIcon.onNew);\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null) {\r\n\t            FreeRoundBonusIcon.IconActive.onclick = FreeRoundBonusIcon.handleIconClick.bind(this, FreeRoundBonusIcon.onActive);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.hideAllIcons = function () {\r\n\t        DataManager_1.DataManager.hideDataElements(\"helpFRB\");\r\n\t        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconNew);\r\n\t        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconActive);\r\n\t    };\r\n\t    FreeRoundBonusIcon.disableActiveIcon = function () {\r\n\t        if (FreeRoundBonusIcon.IconNew != null &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconNew.classList.add(\"_disabled\");\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.enableActiveIcon = function () {\r\n\t        if (DataManager_1.DataManager.Autoplay && (parseFloat(DataManager_1.DataManager.AutoplayCount) > 0 || DataManager_1.DataManager.AutoplayCount === \"∞\")) {\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconNew != null &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n\t            FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconNew.classList.remove(\"_disabled\");\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n\t            FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconActive.classList.remove(\"_disabled\");\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusIcon.showElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"true\") {\r\n\t                element.setAttribute(\"active\", \"true\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.hideElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (!element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"false\") {\r\n\t                element.setAttribute(\"active\", \"false\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.disableElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (!element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"true\") {\r\n\t                element.setAttribute(\"active\", \"true\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.isDisabled = function () {\r\n\t        var isDis = false;\r\n\t        if (FreeRoundBonusIcon.IconNew != null && FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            isDis = true;\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null && FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            isDis = true;\r\n\t        }\r\n\t        return isDis;\r\n\t    };\r\n\t    FreeRoundBonusIcon.handleIconClick = function (callback, event) {\r\n\t        var element = event.target;\r\n\t        if (!FreeRoundBonusIcon.isDisabled() && element != null) {\r\n\t            element.classList.add(\"_loading\");\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                if (response != null) {\r\n\t                    if (response.currentOffer != null || response.otherOffers != null) {\r\n\t                        callback();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonusExtended_1.FreeRoundBonusExtended.expiredFreeRounds();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonusExtended_1.FreeRoundBonusExtended.expiredFreeRounds();\r\n\t                }\r\n\t            })\r\n\t                .finally(function () {\r\n\t                element.classList.remove(\"_loading\");\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.onNew = function () {\r\n\t        if (!FreeRoundBonusIcon.isDisabled()) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.id != null) {\r\n\t                FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t            }\r\n\t            else {\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                }\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.onActive = function () {\r\n\t        if (!FreeRoundBonusIcon.isDisabled() && parseInt(FreeRoundBonus_1.FreeRoundBonus.remainingCount()) > 0) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    return FreeRoundBonusIcon;\r\n\t}());\r\n\texports.FreeRoundBonusIcon = FreeRoundBonusIcon;\r\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar SoundManager_1 = __webpack_require__(41);\r\n\tvar PlayList = (function () {\r\n\t    function PlayList() {\r\n\t    }\r\n\t    PlayList.addToPlayList = function (song) {\r\n\t        PlayList.Songs[song.id] = song;\r\n\t    };\r\n\t    PlayList.prototype.create = function (node) {\r\n\t        SoundManager_1.SoundManager.parseElements(node, node.nodeName);\r\n\t    };\r\n\t    PlayList.isPlaying = function (song) {\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            return PlayList.Songs[song].isPlaying();\r\n\t        }\r\n\t    };\r\n\t    PlayList.play = function (song, fadeIn, reset) {\r\n\t        if (fadeIn === void 0) { fadeIn = 0; }\r\n\t        if (reset === void 0) { reset = true; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].play(false, fadeIn, reset);\r\n\t        }\r\n\t    };\r\n\t    PlayList.loop = function (song, fadeIn, reset) {\r\n\t        if (fadeIn === void 0) { fadeIn = 0; }\r\n\t        if (reset === void 0) { reset = false; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].play(true, fadeIn, reset);\r\n\t        }\r\n\t    };\r\n\t    PlayList.stop = function (song, fadeOut) {\r\n\t        if (fadeOut === void 0) { fadeOut = 0; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].stop(fadeOut);\r\n\t        }\r\n\t    };\r\n\t    PlayList.stopAll = function (fadeOut) {\r\n\t        if (fadeOut === void 0) { fadeOut = 0; }\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].stop(fadeOut);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.stopAllInGroup = function (group, toggle) {\r\n\t        if (toggle === void 0) { toggle = false; }\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].toggleGroup(group, toggle);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.setVolume = function (song, volume) {\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].setVolume(volume);\r\n\t        }\r\n\t    };\r\n\t    PlayList.restoreVolume = function (song) {\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].restoreVolume();\r\n\t        }\r\n\t    };\r\n\t    PlayList.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    PlayList.Songs = {};\r\n\t    PlayList = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.PlayList)\r\n\t    ], PlayList);\r\n\t    return PlayList;\r\n\t}());\r\n\texports.PlayList = PlayList;\r\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar SoundManager = (function () {\r\n\t    function SoundManager() {\r\n\t    }\r\n\t    SoundManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"SoundManager\", data);\r\n\t        }\r\n\t    };\r\n\t    SoundManager.parseElements = function (node, playList) {\r\n\t        if (playList === void 0) { playList = \"\"; }\r\n\t        if (node != null) {\r\n\t            var next = node.firstElementChild;\r\n\t            while (next != null) {\r\n\t                var cls = \"\";\r\n\t                if (next.hasAttribute(\"Class\")) {\r\n\t                    cls = next.getAttribute(\"Class\");\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING element with name: \" + next.nodeName + \" has no class\");\r\n\t                    }\r\n\t                }\r\n\t                if (cls !== \"\") {\r\n\t                    if (neo_common_1.EngineComponentFactory.isTypeOf(cls, ComponentTypes_1.ComponentTypes.PlayList)) {\r\n\t                        var element = neo_common_1.EngineComponentFactory.get(cls);\r\n\t                        SoundManager.PlayLists[next.nodeName] = element;\r\n\t                        element.create(next);\r\n\t                    }\r\n\t                    else if (neo_common_1.EngineComponentFactory.isTypeOf(cls, ComponentTypes_1.ComponentTypes.Song)) {\r\n\t                        var element = neo_common_1.EngineComponentFactory.get(cls);\r\n\t                        element.create(next);\r\n\t                        if (playList !== \"\") {\r\n\t                            PlayList_1.PlayList.addToPlayList(element);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SoundManager.PlayLists = {};\r\n\t    return SoundManager;\r\n\t}());\r\n\texports.SoundManager = SoundManager;\r\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar RetentionPanel = (function () {\r\n\t    function RetentionPanel() {\r\n\t        this.screen = null;\r\n\t        this.panel = null;\r\n\t        this.icons = null;\r\n\t        this.lastCount = 0;\r\n\t        this.createPanel();\r\n\t    }\r\n\t    RetentionPanel.prototype.revalidate = function () {\r\n\t        if (!RetentionPanel.canShow) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.screen == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.panel == null) {\r\n\t            return;\r\n\t        }\r\n\t        this.log(\"revalidate\");\r\n\t        if (this.hasActiveIcon()) {\r\n\t            document.body.classList.add(\"retention-panel-active\");\r\n\t            RetentionPanel.panelWidth = parseInt(window.getComputedStyle(this.panel).width);\r\n\t        }\r\n\t        else {\r\n\t            document.body.classList.remove(\"retention-panel-active\");\r\n\t            RetentionPanel.panelWidth = 0;\r\n\t        }\r\n\t        this.showPeakHelpIcon();\r\n\t        Scaling_1.Scaling.LeftPanelWidth = RetentionPanel.panelWidth;\r\n\t    };\r\n\t    RetentionPanel.prototype.showPeakHelpIcon = function () {\r\n\t        var _this = this;\r\n\t        var peakHelp = document.querySelector(\".hlpTournamentsBtn\");\r\n\t        if (RetentionPanel.peakActive) {\r\n\t            var peakHelpIcon = document.querySelector(\".btnTournaments\");\r\n\t            var peakHelpIconBackground = document.getElementById(\"peakMenuBtn\") != null\r\n\t                ? window.getComputedStyle(document.getElementById(\"peakMenuBtn\")).backgroundImage\r\n\t                : false;\r\n\t            var peakHelpIconBackgroundSize = document.querySelector(\".hlpMenu\") != null\r\n\t                ? window.getComputedStyle(document.querySelector(\".hlpMenu\")).width\r\n\t                : false;\r\n\t            if (peakHelp != null && peakHelpIcon != null && peakHelpIconBackground && peakHelpIconBackgroundSize) {\r\n\t                peakHelpIcon.setAttribute(\"style\", \"background-image:\" +\r\n\t                    peakHelpIconBackground +\r\n\t                    \"; height:100%; background-position: center; background-size: auto \" +\r\n\t                    peakHelpIconBackgroundSize +\r\n\t                    \"; -webkit-transform: scale(0.66); transform: scale(0.66);\");\r\n\t                peakHelp.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                setTimeout(function () {\r\n\t                    _this.showPeakHelpIcon();\r\n\t                }, RetentionPanel.initRevalidateTimeout);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            peakHelp.classList.add(\"_hidden\");\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.prototype.createPanel = function () {\r\n\t        var root = document.getElementById(RetentionPanel.panelParentId);\r\n\t        if (root == null) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR - panel with id \" + RetentionPanel.panelParentId + \" was not found\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        this.screen = this.createElement(\"div\", \"retentionScreen\", [\"screen\"]);\r\n\t        this.content = this.createElement(\"div\", \"retentionContent\");\r\n\t        this.panel = this.createElement(\"div\", \"retentionPanel\", [\"gameControls\"]);\r\n\t        this.icons = this.createElement(\"div\", \"retentionPanelIcons\");\r\n\t        this.createContentPlaceholder(this.content);\r\n\t        this.createIconsPlaceholder(this.icons);\r\n\t        this.screen.appendChild(this.content);\r\n\t        this.screen.appendChild(this.panel);\r\n\t        this.panel.appendChild(this.icons);\r\n\t        root.appendChild(this.screen);\r\n\t    };\r\n\t    RetentionPanel.prototype.createContentPlaceholder = function (contentHolder) {\r\n\t        if (contentHolder == null) {\r\n\t            return;\r\n\t        }\r\n\t        contentHolder.appendChild(this.createElement(\"div\", \"peakContentHolder\", [\"retentionContentHolder\"]));\r\n\t        contentHolder.appendChild(this.createElement(\"div\", \"frbContentHolder\", [\"retentionContentHolder\"]));\r\n\t    };\r\n\t    RetentionPanel.prototype.createIconsPlaceholder = function (iconsHolder) {\r\n\t        if (iconsHolder == null) {\r\n\t            return;\r\n\t        }\r\n\t        iconsHolder.appendChild(this.createElement(\"div\", \"peakIconHolder\", [\"retentionIconHolder\"]));\r\n\t        iconsHolder.appendChild(this.createElement(\"div\", \"frbIconHolder\", [\"retentionIconHolder\"]));\r\n\t        for (var i = 0; i < iconsHolder.children.length; i++) {\r\n\t            var child = iconsHolder.children[i];\r\n\t            child.addEventListener(\"click\", function (event) {\r\n\t                BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.prototype.createElement = function (type, id, classList) {\r\n\t        if (id === void 0) { id = \"\"; }\r\n\t        if (classList === void 0) { classList = []; }\r\n\t        var elem = document.createElement(type);\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(id)) {\r\n\t            elem.id = id;\r\n\t        }\r\n\t        if (classList.length > 0) {\r\n\t            for (var i = 0; i < classList.length; i++) {\r\n\t                elem.classList.add(classList[i]);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    RetentionPanel.prototype.updateCount = function (currentCount) {\r\n\t        if (currentCount === void 0) { currentCount = -1; }\r\n\t        currentCount = currentCount == -1 ? this.lastCount : currentCount;\r\n\t        var isPortrait = Scaling_1.Scaling.isPortrait();\r\n\t        var slots = isPortrait\r\n\t            ? RetentionPanel.portraitMaxIconCount - currentCount\r\n\t            : RetentionPanel.landscapeMaxIconCount - currentCount;\r\n\t        if (this.iconsSlotsCount != slots) {\r\n\t            this.iconsSlotsCount = slots;\r\n\t            neo_games_1.Platforms.Platforms.iconsCountAvailable(slots);\r\n\t        }\r\n\t        var isMultiIcon = this.isMultiIcon(currentCount);\r\n\t        this.icons.classList.remove(\"retention-icon-count-\" + this.lastCount, \"retention-icon-count-\" + this.lastCount + \"-m\");\r\n\t        this.icons.classList.add(\"retention-icon-count-\" + currentCount + (isMultiIcon || RetentionPanel.peakActive ? \"-m\" : \"\"));\r\n\t        this.lastCount = currentCount;\r\n\t    };\r\n\t    RetentionPanel.prototype.isMultiIcon = function (count) {\r\n\t        if (count == 0 || count > 1) {\r\n\t            return false;\r\n\t        }\r\n\t        var style = window.getComputedStyle(this.icons);\r\n\t        var width = parseInt(style.width);\r\n\t        var height = parseInt(style.height);\r\n\t        return width != 0 ? height / width > 1.5 : false;\r\n\t    };\r\n\t    RetentionPanel.prototype.hasActiveIcon = function () {\r\n\t        if (this.panel == null) {\r\n\t            return false;\r\n\t        }\r\n\t        if (this.icons == null) {\r\n\t            return false;\r\n\t        }\r\n\t        var result = false;\r\n\t        var count = 0;\r\n\t        var children = this.icons.children;\r\n\t        for (var i = 0; i < children.length; i++) {\r\n\t            var child = children[i];\r\n\t            if (child != null) {\r\n\t                var iconChildren = child.children;\r\n\t                if (child.id == \"peakIconHolder\") {\r\n\t                    RetentionPanel.peakActive = iconChildren.length > 0;\r\n\t                }\r\n\t                for (var j = 0; j < iconChildren.length; j++) {\r\n\t                    var iconChild = iconChildren[j];\r\n\t                    if (iconChild.getAttribute(\"active\") == \"true\") {\r\n\t                        result = true;\r\n\t                        count++;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.updateCount(count);\r\n\t        return result;\r\n\t    };\r\n\t    RetentionPanel.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"RetentionPanel\", \"RetentionPanel \" + s);\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.getInstance = function () {\r\n\t        if (RetentionPanel.instance == null) {\r\n\t            RetentionPanel.instance = new RetentionPanel();\r\n\t        }\r\n\t        return RetentionPanel.instance;\r\n\t    };\r\n\t    RetentionPanel.initialize = function () {\r\n\t        RetentionPanel.getInstance();\r\n\t    };\r\n\t    RetentionPanel.show = function () {\r\n\t        RetentionPanel.canShow = true;\r\n\t        RetentionPanel.revalidate();\r\n\t        Scaling_1.Scaling.Emitter.on(Scaling_1.Scaling.EventResize, function () {\r\n\t            RetentionPanel.getInstance().updateCount();\r\n\t            RetentionPanel.getInstance().revalidate();\r\n\t        });\r\n\t        setTimeout(function () {\r\n\t            RetentionPanel.revalidate();\r\n\t        }, RetentionPanel.initRevalidateTimeout);\r\n\t    };\r\n\t    RetentionPanel.revalidate = function () {\r\n\t        RetentionPanel.getInstance().revalidate();\r\n\t        Scaling_1.Scaling.resizeRoot(false, false);\r\n\t    };\r\n\t    RetentionPanel.panelParentId = \"root\";\r\n\t    RetentionPanel.initRevalidateTimeout = 500;\r\n\t    RetentionPanel.landscapeMaxIconCount = window[\"CHANNEL\"] === \"mobile\" ? 4 : 5;\r\n\t    RetentionPanel.portraitMaxIconCount = 2;\r\n\t    RetentionPanel.panelWidth = 0;\r\n\t    RetentionPanel.canShow = false;\r\n\t    RetentionPanel.peakActive = false;\r\n\t    return RetentionPanel;\r\n\t}());\r\n\texports.RetentionPanel = RetentionPanel;\r\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar BetHigherThanMinDialog = (function () {\r\n\t    function BetHigherThanMinDialog() {\r\n\t    }\r\n\t    BetHigherThanMinDialog.openDialog = function () {\r\n\t        if (!this.canNotifyBetHigherThanMin() ||\r\n\t            (this._wasOpened && !this._reopenDialog) ||\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        var minBet = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.getMinBet().toString()) +\r\n\t            \" \" +\r\n\t            DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t        var message = Languages_1.Languages.getRid(\"EXCEED_MIN_BET\", minBet);\r\n\t        var dialogData = {\r\n\t            text: message,\r\n\t            actions: [\r\n\t                {\r\n\t                    type: \"restore\",\r\n\t                    text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                    customData: neo_games_1.Communication.Game.GameModules.Base,\r\n\t                },\r\n\t            ],\r\n\t            special: true,\r\n\t        };\r\n\t        AppContext_1.AppContext.current.showDialog(message, false, null, null, null, dialogData);\r\n\t        this._wasOpened = true;\r\n\t        this._isOpened = true;\r\n\t    };\r\n\t    BetHigherThanMinDialog.canOpenDialog = function () {\r\n\t        return (AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n\t            !this.isMinBet() &&\r\n\t            !ModuleManager_1.ModuleManager.gambleActive() &&\r\n\t            !(FreeRoundBonus_1.FreeRoundBonus.status && FreeRoundBonus_1.FreeRoundBonus.status === \"active\") &&\r\n\t            !Jackpot_1.Jackpot.hasMiniGame() &&\r\n\t            !this._wasOpened &&\r\n\t            this._gameStartedWithFeature);\r\n\t    };\r\n\t    BetHigherThanMinDialog.closeDialog = function (changeBet) {\r\n\t        if (this._isOpened) {\r\n\t            this._isOpened = false;\r\n\t            AppContext_1.AppContext.current.closeDialog();\r\n\t        }\r\n\t        if (changeBet) {\r\n\t            this._wasOpened = true;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.hideDialog = function () {\r\n\t        if (this._isOpened) {\r\n\t            this._reopenDialog = true;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.restoreDialog = function () {\r\n\t        if (this._reopenDialog) {\r\n\t            this.openDialog();\r\n\t            this._reopenDialog = false;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.setOpenedStatus = function () {\r\n\t        if (this._isOpened) {\r\n\t            this._isOpened = false;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.gameFeatureActive = function () {\r\n\t        return (ModuleManager_1.ModuleManager.gambleActive() ||\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.status && FreeRoundBonus_1.FreeRoundBonus.status === \"active\") ||\r\n\t            Jackpot_1.Jackpot.hasMiniGame() ||\r\n\t            !DataManager_1.DataManager.GameRoundClosed);\r\n\t    };\r\n\t    BetHigherThanMinDialog.isMinBet = function () {\r\n\t        BetManager_1.BetManager.updateBetPosition();\r\n\t        return BetManager_1.BetManager.minBet;\r\n\t    };\r\n\t    BetHigherThanMinDialog.canNotifyBetHigherThanMin = function () {\r\n\t        return (!this.isMinBet() &&\r\n\t            AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n\t            this._gameStartedWithFeature &&\r\n\t            !this.gameFeatureActive());\r\n\t    };\r\n\t    BetHigherThanMinDialog.getMinBet = function () {\r\n\t        return Math.min.apply(Math, BetManager_1.BetManager.TotalBets);\r\n\t    };\r\n\t    BetHigherThanMinDialog.getGameStartedWithoutFeature = function () {\r\n\t        if (this._gameStarted) {\r\n\t            this._gameStartedWithFeature = this.gameFeatureActive();\r\n\t            this._gameStarted = false;\r\n\t        }\r\n\t        return !this._gameStartedWithFeature && AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin;\r\n\t    };\r\n\t    BetHigherThanMinDialog._wasOpened = false;\r\n\t    BetHigherThanMinDialog._isOpened = false;\r\n\t    BetHigherThanMinDialog._reopenDialog = false;\r\n\t    BetHigherThanMinDialog._gameStartedWithFeature = false;\r\n\t    BetHigherThanMinDialog._gameStarted = true;\r\n\t    return BetHigherThanMinDialog;\r\n\t}());\r\n\texports.BetHigherThanMinDialog = BetHigherThanMinDialog;\r\n\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar ResponsibleDialog1 = (function () {\r\n\t    function ResponsibleDialog1() {\r\n\t    }\r\n\t    ResponsibleDialog1.openDialog = function (data) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIInfo) {\r\n\t            GameManager_1.GameManager.gameClient.getRealityCheckInfo().then(function (response) {\r\n\t                ResponsibleDialog1.openDialogContinue(data, response);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            ResponsibleDialog1.openDialogContinue(data);\r\n\t        }\r\n\t    };\r\n\t    ResponsibleDialog1.openDialogContinue = function (data, info) {\r\n\t        if (info === void 0) { info = null; }\r\n\t        if (ResponsibleDialog1._element == null) {\r\n\t            ResponsibleDialog1._element = document.getElementById(\"responsibleGamingDialog\");\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(info) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(info[\"messages\"]) &&\r\n\t            info[\"messages\"].length > 0) {\r\n\t            MessageManager_1.MessageManager.postpone(ResponsibleDialog1.onContinue, info);\r\n\t            return;\r\n\t        }\r\n\t        var elementWin = document.getElementById(\"rciWin\");\r\n\t        var elementLost = document.getElementById(\"rciLost\");\r\n\t        var totalGain = 0;\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", true);\r\n\t        if (info != null) {\r\n\t            if (info.totalGain <= 0) {\r\n\t                elementWin.style.display = \"none\";\r\n\t                elementLost.style.display = \"block\";\r\n\t                totalGain = -1 * info.totalGain;\r\n\t            }\r\n\t            else {\r\n\t                elementWin.style.display = \"block\";\r\n\t                elementLost.style.display = \"none\";\r\n\t                totalGain = info.totalGain;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            elementWin.style.display = \"none\";\r\n\t            elementLost.style.display = \"none\";\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.hideDialog();\r\n\t        AppContext_1.AppContext.current.closeDialog();\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t        ResponsibleDialog1.opened = true;\r\n\t        if (ResponsibleDialog1._continueButton == null) {\r\n\t            ResponsibleDialog1._continueButton = document.getElementById(\"continueButton\");\r\n\t            if (ResponsibleDialog1._continueButton != null) {\r\n\t                ResponsibleDialog1._continueButton.onclick = ResponsibleDialog1.onContinue;\r\n\t                if (data.continue) {\r\n\t                    ResponsibleDialog1._continueButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    ResponsibleDialog1._continueButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._historyButton == null) {\r\n\t            ResponsibleDialog1._historyButton = document.getElementById(\"historyButton\");\r\n\t            if (ResponsibleDialog1._historyButton != null) {\r\n\t                if (data.history) {\r\n\t                    ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onHistory;\r\n\t                    ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                        ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n\t                        ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                    }\r\n\t                    else {\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.RCIShowHistoryButton) {\r\n\t                            ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n\t                            ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                        }\r\n\t                        else {\r\n\t                            ResponsibleDialog1._historyButton.style.display = \"none\";\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._closeButton == null) {\r\n\t            ResponsibleDialog1._closeButton = document.getElementById(\"closeButton\");\r\n\t            if (ResponsibleDialog1._closeButton != null) {\r\n\t                ResponsibleDialog1._closeButton.onclick = ResponsibleDialog1.onClose;\r\n\t                if (data.exit) {\r\n\t                    ResponsibleDialog1._closeButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    ResponsibleDialog1._closeButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var startTime = (Date.now() - data.startTime.getTime()) / 1000;\r\n\t        var interval = \"\";\r\n\t        var t = startTime / 60;\r\n\t        var h = parseInt(t / 60 + \"\") + \"\";\r\n\t        if (parseInt(h) < 10) {\r\n\t            h = \"0\" + h;\r\n\t        }\r\n\t        var m = parseInt((t % 60) + \"\") + \"\";\r\n\t        if (parseInt(m) < 10) {\r\n\t            m = \"0\" + m;\r\n\t        }\r\n\t        if (data.interval % 60 === 0) {\r\n\t            interval = (data.interval / 60).toFixed(0);\r\n\t        }\r\n\t        else {\r\n\t            interval = (data.interval / 60).toFixed(2);\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1\", Math.floor(t) + \"\");\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIInfo) {\r\n\t            if (info != null) {\r\n\t                if (DataManager_1.DataManager.DisplayCurrencies.hasOwnProperty(info.currency)) {\r\n\t                    info.currency = DataManager_1.DataManager.DisplayCurrencies[info.currency];\r\n\t                }\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                    DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_SUM\", neo_common_1.NumberUtils.devide(totalGain, BetManager_1.BetManager.CoinSize).toString() + \" \" + info.currency);\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_SUM\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, totalGain.toString()) + \" \" + info.currency);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_INTERVAL\", interval);\r\n\t        var elementRciIntervalInfo = document.getElementById(\"rciIntervalInfo\");\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIIntervalInfo) {\r\n\t            if (elementRciIntervalInfo != null) {\r\n\t                elementRciIntervalInfo.style.display = \"block\";\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (elementRciIntervalInfo != null) {\r\n\t                elementRciIntervalInfo.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._element != null) {\r\n\t            if (ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t                ResponsibleDialog1._element.classList.remove(ResponsibleDialog1.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.errorGroup(\"ResponsibleDialog1\", \"ERROR no responsibleDialog1\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ResponsibleDialog1.onContinue = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.continue();\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onHistory = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.closeRealityCheck();\r\n\t        GameApp_1.GameApp.history();\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onGameRoundHistory = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.closeRealityCheck();\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onClose = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    ResponsibleDialog1.opened = false;\r\n\t    ResponsibleDialog1.DisabledClass = \"_disabled\";\r\n\t    ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t    return ResponsibleDialog1;\r\n\t}());\r\n\texports.ResponsibleDialog1 = ResponsibleDialog1;\r\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar MessageManager = (function () {\r\n\t    function MessageManager() {\r\n\t    }\r\n\t    MessageManager.postpone = function (callback, response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(response.messages) &&\r\n\t            response.messages.length > 0) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                MessageManager.dialog = document.getElementById(\"messageDialog\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                    MessageManager.title = MessageManager.dialog.getElementsByTagName(\"h3\")[0];\r\n\t                    MessageManager.text = document.getElementById(\"messageDialogText\");\r\n\t                    MessageManager.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n\t                    MessageManager.buttons = [];\r\n\t                }\r\n\t            }\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                callback(response);\r\n\t            }\r\n\t            else {\r\n\t                MessageManager.callback = callback;\r\n\t                MessageManager.response = response;\r\n\t                MessageManager.step = 0;\r\n\t                MessageManager.handle();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            callback(response);\r\n\t        }\r\n\t    };\r\n\t    MessageManager.updateDialogData = function (data) {\r\n\t        MessageManager.resetDialogData();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"title\"])) {\r\n\t            MessageManager.title.innerHTML = data[\"title\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"text\"])) {\r\n\t            MessageManager.text.innerHTML = data[\"text\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"actions\"])) {\r\n\t            MessageManager.removeAllButtons();\r\n\t            for (var i = 0; i < data[\"actions\"].length; i++) {\r\n\t                var action = data[\"actions\"][i];\r\n\t                switch (action.type) {\r\n\t                    case \"continue\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionContinue.bind(this, action));\r\n\t                        break;\r\n\t                    case \"exit\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionExit.bind(this, action));\r\n\t                        break;\r\n\t                    case \"history\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionHistory.bind(this, action));\r\n\t                        break;\r\n\t                    case \"reload\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionReload.bind(this, action));\r\n\t                        break;\r\n\t                    case \"cashier\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionCashier.bind(this, action));\r\n\t                        break;\r\n\t                    case \"link\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionLink.bind(this, action));\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MessageManager.resetDialogData = function () {\r\n\t        MessageManager.title.innerHTML = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t        MessageManager.removeAllButtons();\r\n\t        MessageManager.createButton(Languages_1.Languages.getRid(\"CONTINUE\"), MessageManager.actionContinue);\r\n\t    };\r\n\t    MessageManager.removeAllButtons = function () {\r\n\t        while (MessageManager.buttons.length > 0) {\r\n\t            var button = MessageManager.buttons.pop();\r\n\t            MessageManager.buttonsHolder.removeChild(button);\r\n\t        }\r\n\t    };\r\n\t    MessageManager.createButton = function (text, action) {\r\n\t        var button = document.createElement(\"div\");\r\n\t        button.textContent = text;\r\n\t        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t        button.onclick = action;\r\n\t        MessageManager.buttonsHolder.appendChild(button);\r\n\t        MessageManager.buttons.push(button);\r\n\t    };\r\n\t    MessageManager.actionContinue = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        MessageManager.handle();\r\n\t    };\r\n\t    MessageManager.actionExit = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"messageDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    MessageManager.actionReload = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    MessageManager.actionHistory = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: data[\"linkUrl\"] });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t    };\r\n\t    MessageManager.actionCashier = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({ reason: \"InsufficientFunds\", target: data[\"linkUrl\"] });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_self\");\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.CashierUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({\r\n\t                reason: \"InsufficientFunds\",\r\n\t                target: AppContext_1.AppContext.gameConfiguration.CashierUrl,\r\n\t            });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n\t        }\r\n\t    };\r\n\t    MessageManager.actionLink = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    MessageManager.handle = function () {\r\n\t        if (MessageManager.response.messages.length === MessageManager.step) {\r\n\t            MessageManager.dialog.classList.add(\"_disabled\");\r\n\t            MessageManager.callback(MessageManager.response);\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t        }\r\n\t        else {\r\n\t            if (MessageManager.response.messages[MessageManager.step].type == \"plugin\") {\r\n\t                neo_games_1.Platforms.Platforms.sendPluginMessage(MessageManager.response.messages[MessageManager.step].text);\r\n\t                MessageManager.step++;\r\n\t                MessageManager.handle();\r\n\t            }\r\n\t            else {\r\n\t                MessageManager.dialog.classList.remove(\"_disabled\");\r\n\t                MessageManager.updateDialogData(MessageManager.response.messages[MessageManager.step]);\r\n\t                MessageManager.step++;\r\n\t                neo_games_1.Platforms.Platforms.dialogOpened(\"default\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MessageManager.callbackFnc = function (response) {\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    return MessageManager;\r\n\t}());\r\n\texports.MessageManager = MessageManager;\r\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar BaseModel = (function () {\r\n\t    function BaseModel(controller) {\r\n\t        this.controller = controller;\r\n\t        this._spinDelayed = FrameTimer_1.CreateFrameTimer(\"spinDelayed\");\r\n\t        this._spinDelayed.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinReceivedDelayed.bind(this));\r\n\t    }\r\n\t    BaseModel.prototype.spin = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        BaseModel.GameRequest = {};\r\n\t        BaseModel.GameRequest.module = neo_games_1.Communication.Game.GameModules.Base;\r\n\t        BaseModel.GameRequest.bet = BetManager_1.BetManager.createBetForSpin();\r\n\t        BaseModel.GameRequest.callBackFcn = this.spinReceived.bind(this);\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient\r\n\t            .spin(neo_games_1.Communication.Game.GameModules.Base, BetManager_1.BetManager.createBetForSpin())\r\n\t            .then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.spinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BaseModel.spinContinue = function () {\r\n\t        if (!GameManager_1.GameManager.requestSend && BaseModel.GameRequest) {\r\n\t            GameManager_1.GameManager.requestSend = true;\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .spin(BaseModel.GameRequest.module, BaseModel.GameRequest.bet)\r\n\t                .then(function (response) {\r\n\t                MessageManager_1.MessageManager.postpone(BaseModel.GameRequest.callBackFcn, response);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.roundStarted({\r\n\t                totalBet: BetManager_1.BetManager.Bet,\r\n\t                freeRound: FreeRoundBonus_1.FreeRoundBonus.inFrb,\r\n\t                userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BaseModel.prototype.spinReceived = function (response) {\r\n\t        this._delayedResponse = response;\r\n\t        if (response.module(GameModules.Base) != null) {\r\n\t            BaseModel.LastScreen = response.module(GameModules.Base).screen;\r\n\t        }\r\n\t        this._spinDelayed.start(30);\r\n\t    };\r\n\t    BaseModel.prototype.spinReceivedDelayed = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this._delayedResponse)) {\r\n\t            GameManager_1.GameManager.parseResponses(this._delayedResponse);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            BaseModel.GameRequest = null;\r\n\t            this.controller.spinReceived();\r\n\t            neo_games_1.Platforms.Platforms.spinReceived({\r\n\t                balance: parseFloat(neo_common_1.NumberUtils.add(this._delayedResponse.balance.real, this._delayedResponse.balance.bonus)),\r\n\t                win: GameManager_1.GameManager.baseResponse.currentWin,\r\n\t                totalBet: BetManager_1.BetManager.createBetForSpin().totalBet,\r\n\t                roundId: this._delayedResponse.roundId,\r\n\t            });\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BaseModel.LastScreen = {};\r\n\t    BaseModel.GameRequest = null;\r\n\t    return BaseModel;\r\n\t}());\r\n\texports.BaseModel = BaseModel;\r\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar BaseActions = (function () {\r\n\t    function BaseActions() {\r\n\t    }\r\n\t    BaseActions.ActionSpin = \"SPIN\";\r\n\t    BaseActions.ActionSpinStop = \"SPIN_STOP\";\r\n\t    BaseActions.ActionAutoplay = \"AUTOPLAY\";\r\n\t    BaseActions.ActionAutoplayStop = \"AUTOPLAY_STOP\";\r\n\t    BaseActions.ActionBetPlus = \"BET_PLUS\";\r\n\t    BaseActions.ActionBetMinus = \"BET_MINUS\";\r\n\t    BaseActions.ActionBetCycle = \"BET_CYCLE\";\r\n\t    BaseActions.ActionMaxBet = \"MAX_BET\";\r\n\t    BaseActions.ActionBaseCollect = \"BASE_COLLECT\";\r\n\t    BaseActions.ActionSelectPayline = \"SELECT_PAYLINE_\";\r\n\t    BaseActions.ActionDenomSelect = \"DENOM_SELECT\";\r\n\t    BaseActions.ActionDenomSelectValue = \"DENOM_SELECT_VALUE_\";\r\n\t    BaseActions.ActionCoinCountSelect = \"COIN_COUNT_SELECT\";\r\n\t    BaseActions.ActionCoinCountSelectValue = \"COIN_COUNT_SELECT_VALUE_\";\r\n\t    BaseActions.ActionBetSelect = \"BET_SELECT\";\r\n\t    BaseActions.ActionBetSelectValue = \"BET_SELECT_VALUE_\";\r\n\t    return BaseActions;\r\n\t}());\r\n\texports.BaseActions = BaseActions;\r\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar UserAction_1 = __webpack_require__(49);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar QuickspinDialog_1 = __webpack_require__(50);\r\n\tvar Paytable_1 = __webpack_require__(52);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar HtmlController = (function () {\r\n\t    function HtmlController() {\r\n\t    }\r\n\t    HtmlController.registerActionElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerActionElement action: \" + action);\r\n\t        }\r\n\t        if (this.ActionElements[action] == null) {\r\n\t            this.ActionElements[action] = [];\r\n\t        }\r\n\t        this.ActionElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiActionElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiActionElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiActionElements[action] == null) {\r\n\t            this.UiActionElements[action] = [];\r\n\t        }\r\n\t        this.UiActionElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiDispatchElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiDispatchElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiDispatchElements[action] == null) {\r\n\t            this.UiDispatchElements[action] = [];\r\n\t        }\r\n\t        this.UiDispatchElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerActionsHoldersElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerActionsHoldersElement action: \" + action);\r\n\t        }\r\n\t        if (this.ActionsHoldersElements[action] == null) {\r\n\t            this.ActionsHoldersElements[action] = [];\r\n\t        }\r\n\t        this.ActionsHoldersElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiActionDispatchElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiDispatchElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiActionDispatchElements[action] == null) {\r\n\t            this.UiActionDispatchElements[action] = [];\r\n\t        }\r\n\t        this.UiActionDispatchElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerDataElement = function (data, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerDataElement data: \" + data);\r\n\t        }\r\n\t        if (this.DataElements[data] == null) {\r\n\t            this.DataElements[data] = [];\r\n\t        }\r\n\t        this.DataElements[data].push(element);\r\n\t    };\r\n\t    HtmlController.dispatchAction = function (action) {\r\n\t        if (false) {\r\n\t            this.log(\"dispatchAction action: \" + action);\r\n\t        }\r\n\t        if (!HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        var updateUI = true;\r\n\t        if (action === BaseActions_1.BaseActions.ActionDenomSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t                BetManager_1.BetManager.CoinCountContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionCoinCountSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                BetManager_1.BetManager.DenomContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionBetSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                BetManager_1.BetManager.DenomContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    updateUI = false;\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    updateUI = false;\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t        if (updateUI) {\r\n\t            this.dispatchUiAction(\"\");\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t    };\r\n\t    HtmlController.setSound = function (level) {\r\n\t        if (HtmlController.SoundContainer != null) {\r\n\t            HtmlController.SoundContainer.setLevel(level);\r\n\t            return;\r\n\t        }\r\n\t        for (var i = 0; i < HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound].length; i++) {\r\n\t            var ele = HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound][i];\r\n\t            if (ele.instance != null) {\r\n\t                ele.instance.classList.remove(\"off\");\r\n\t                ele.instance.classList.remove(\"on1\");\r\n\t                ele.instance.classList.remove(\"on2\");\r\n\t                ele.instance.classList.remove(\"on3\");\r\n\t                switch (level) {\r\n\t                    case 0:\r\n\t                        ele.instance.classList.add(\"off\");\r\n\t                        PIXI.sound.volumeAll = 0;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(0);\r\n\t                        break;\r\n\t                    case 1:\r\n\t                        ele.instance.classList.add(\"on1\");\r\n\t                        PIXI.sound.volumeAll = 0.25;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(1);\r\n\t                        break;\r\n\t                    case 2:\r\n\t                        ele.instance.classList.add(\"on2\");\r\n\t                        PIXI.sound.volumeAll = 0.5;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(2);\r\n\t                        break;\r\n\t                    case 3:\r\n\t                    default:\r\n\t                        ele.instance.classList.add(\"on3\");\r\n\t                        PIXI.sound.volumeAll = 1;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(3);\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.dispatchUiAction = function (action) {\r\n\t        if (false) {\r\n\t            this.log(\"dispatchUiAction action: \" + action);\r\n\t        }\r\n\t        if (!HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t        Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t        neo_games_1.Platforms.Platforms.gameCloseMenu();\r\n\t        if (action === \"EMPTY\") {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            action = \"\";\r\n\t        }\r\n\t        var playSound = true;\r\n\t        if (HtmlController.ContainerElementsById[\"autoplaySelector\"]) {\r\n\t            var autoplaySelector = HtmlController.ContainerElementsById[\"autoplaySelector\"];\r\n\t            if (autoplaySelector != null &&\r\n\t                autoplaySelector.instance != null &&\r\n\t                !autoplaySelector.instance.classList.contains(\"_disabled\")) {\r\n\t                if (autoplaySelector.recalculateHeight) {\r\n\t                    autoplaySelector.instance.removeAttribute(\"style\");\r\n\t                }\r\n\t                autoplaySelector.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        if (HtmlController.ContainerElementsById[\"autoplayDialog\"]) {\r\n\t            var autoplayDialog = HtmlController.ContainerElementsById[\"autoplayDialog\"];\r\n\t            if (autoplayDialog != null &&\r\n\t                autoplayDialog.instance != null &&\r\n\t                !autoplayDialog.instance.classList.contains(\"_disabled\")) {\r\n\t                autoplayDialog.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t            BetManager_1.BetManager.DenomContainer.disable();\r\n\t        }\r\n\t        if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t            BetManager_1.BetManager.CoinCountContainer.disable();\r\n\t        }\r\n\t        if (action !== UserAction_1.UserAction.ActionExit && DataManager_1.DataManager.SimilarGames != null) {\r\n\t            DataManager_1.DataManager.SimilarGames.disable();\r\n\t        }\r\n\t        switch (action) {\r\n\t            case \"\":\r\n\t                Paytable_1.Paytable.clearListeners();\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                playSound = false;\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpTerminal:\r\n\t                ModuleManager_1.ModuleManager.cycleHelp();\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionGameRoundReport:\r\n\t                HtmlController.dispatchUiAction(\"\");\r\n\t                GameApp_1.GameApp.openGameRoundHistory(true);\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionExit:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (DataManager_1.DataManager.SimilarGames != null && DataManager_1.DataManager.SimilarGames.enabled) {\r\n\t                    if (DataManager_1.DataManager.SimilarGames.open()) {\r\n\t                    }\r\n\t                    else {\r\n\t                        this.dispatchUiAction(\"\");\r\n\t                    }\r\n\t                    if (HtmlController.SoundContainer != null) {\r\n\t                        HtmlController.SoundContainer.disable();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.exitHandler = \"exitBtn\";\r\n\t                    GameApp_1.GameApp.exit();\r\n\t                }\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionExit + \"2\":\r\n\t                neo_games_1.Platforms.Platforms.exitHandler = \"similarGamesExitBtn\";\r\n\t                GameApp_1.GameApp.exit();\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleSound:\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.toggle();\r\n\t                }\r\n\t                else {\r\n\t                    if (HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound] != null) {\r\n\t                        for (var i = 0; i < HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound].length; i++) {\r\n\t                            var ele = HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound][i];\r\n\t                            if (ele.instance != null) {\r\n\t                                if (ele.instance.classList.contains(\"off\")) {\r\n\t                                    ele.instance.classList.remove(\"off\");\r\n\t                                    ele.instance.classList.add(\"on3\");\r\n\t                                    PIXI.sound.volumeAll = 1;\r\n\t                                    AppContext_1.AppContext.current.setVolume(3);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(3);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on1\")) {\r\n\t                                    ele.instance.classList.remove(\"on1\");\r\n\t                                    ele.instance.classList.add(\"off\");\r\n\t                                    playSound = false;\r\n\t                                    PIXI.sound.volumeAll = 0;\r\n\t                                    AppContext_1.AppContext.current.setVolume(0);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(0);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on2\")) {\r\n\t                                    ele.instance.classList.remove(\"on2\");\r\n\t                                    ele.instance.classList.add(\"on1\");\r\n\t                                    PIXI.sound.volumeAll = 0.25;\r\n\t                                    AppContext_1.AppContext.current.setVolume(1);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(1);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on3\")) {\r\n\t                                    ele.instance.classList.remove(\"on3\");\r\n\t                                    ele.instance.classList.add(\"on2\");\r\n\t                                    PIXI.sound.volumeAll = 0.5;\r\n\t                                    AppContext_1.AppContext.current.setVolume(2);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(2);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleBet:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionTogglePaytable:\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.toggleUiAction(UserAction_1.UserAction.ActionHelpOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                Paytable_1.Paytable.instance.updateDataValues();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleMenu:\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"remove\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleMenuBack:\r\n\t                this.toggleUiAction(UserAction_1.UserAction.ActionToggleMenu, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoHelp();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpOff:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionPaytableOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"remove\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoPaytable();\r\n\t                Paytable_1.Paytable.instance.updateDataValues();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionPaytableOff:\r\n\t                Paytable_1.Paytable.clearListeners();\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSwitchControls:\r\n\t                var body = document.body;\r\n\t                if (body.classList.contains(\"reverse\")) {\r\n\t                    body.classList.remove(\"reverse\");\r\n\t                }\r\n\t                else {\r\n\t                    body.classList.add(\"reverse\");\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSettingsOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoSettings();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSettingsOff:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionQuickspinDialogOff:\r\n\t                QuickspinDialog_1.QuickspinDialog.closeDialog();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionQuickspinToggle:\r\n\t                DataManager_1.DataManager.quickspinSet();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionVibrationToggle:\r\n\t                DataManager_1.DataManager.vibrationSet();\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"No element with ui disptacher: \" + action);\r\n\t                }\r\n\t        }\r\n\t        if (playSound) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t    };\r\n\t    HtmlController.disableAllUiDispatchers = function (action) {\r\n\t        for (var key in this.UiDispatchElements) {\r\n\t            for (var i = 0; i < this.UiDispatchElements[key].length; i++) {\r\n\t                if (this.UiDispatchElements[key][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n\t                    false &&\r\n\t                    key != action) {\r\n\t                    this.UiDispatchElements[key][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    if (this.UiActionDispatchElements[key] != null) {\r\n\t                        for (var j = 0; j < this.UiActionDispatchElements[key].length; j++) {\r\n\t                            this.UiActionDispatchElements[key][j].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.changeUiAcionDispatchers = function (action, type) {\r\n\t        if (this.UiActionDispatchElements[action] != null) {\r\n\t            for (var i = 0; i < this.UiActionDispatchElements[action].length; i++) {\r\n\t                if (type === \"add\") {\r\n\t                    if (this.UiActionDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) === false) {\r\n\t                        this.UiActionDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    }\r\n\t                }\r\n\t                else if (type === \"remove\") {\r\n\t                    this.UiActionDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    this.UiActionDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.toggleUiAction = function (action, type) {\r\n\t        if (this.UiDispatchElements[action] != null) {\r\n\t            for (var i = 0; i < this.UiDispatchElements[action].length; i++) {\r\n\t                if (type === \"add\") {\r\n\t                    if (this.UiDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n\t                        false) {\r\n\t                        this.UiDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    }\r\n\t                }\r\n\t                else if (type === \"remove\") {\r\n\t                    this.UiDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    this.UiDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateDataElement = function (data, value) {\r\n\t        if (this.DataElements[data] != null) {\r\n\t            for (var i = 0; i < this.DataElements[data].length; i++) {\r\n\t                HtmlController.currencyNoZero(data, value);\r\n\t                this.DataElements[data][i].setText(value);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"No element with data id: \" + data);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateDataElements = function (gameData) {\r\n\t        if (false) {\r\n\t            this.log(\"udpateDataElements\");\r\n\t        }\r\n\t        for (var key in gameData) {\r\n\t            if (this.DataElements[key] != null) {\r\n\t                for (var i = 0; i < this.DataElements[key].length; i++) {\r\n\t                    HtmlController.currencyNoZero(key, gameData[key]);\r\n\t                    this.DataElements[key][i].setText(gameData[key]);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"No element with data id: \" + key);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.currencyNoZero = function (data, value) {\r\n\t        var parsedValue;\r\n\t        if (value === \"\") {\r\n\t            parsedValue = 0;\r\n\t        }\r\n\t        else {\r\n\t            parsedValue = parseFloat(value);\r\n\t        }\r\n\t        if (data === GameData_1.GameData.DataTotalWin) {\r\n\t            if (parsedValue === 0) {\r\n\t                HtmlController.toggleElementsByClass(\"currencyNoZero\");\r\n\t            }\r\n\t            else {\r\n\t                HtmlController.toggleElementsByClass(\"currencyNoZero\", true);\r\n\t            }\r\n\t        }\r\n\t        else if (data === GameData_1.GameData.DataGambleColorWin) {\r\n\t            if (parsedValue === 0) {\r\n\t                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\");\r\n\t            }\r\n\t            else {\r\n\t                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.toggleElementsByClass = function (cls, show) {\r\n\t        if (show === void 0) { show = false; }\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                if (show) {\r\n\t                    element.style.display = \"\";\r\n\t                }\r\n\t                else {\r\n\t                    element.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateActionElements = function (actionData) {\r\n\t        if (false) {\r\n\t            this.log(\"updateActionElements\");\r\n\t        }\r\n\t        for (var key in actionData) {\r\n\t            if (this.ActionElements[key] != null) {\r\n\t                var i;\r\n\t                for (i = 0; i < this.ActionElements[key].length; i++) {\r\n\t                    this.ActionElements[key][i].changeState(actionData[key]);\r\n\t                }\r\n\t                if (this.ActionsHoldersElements[key] != null) {\r\n\t                    for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n\t                        this.ActionsHoldersElements[key][i].changeState(actionData[key]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    var keys = neo_common_1.lodash.keys(this.ActionElements).join(\";\");\r\n\t                    this.log(\"No element with data id: \" + key + \", current keys: \" + keys);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateActionElement = function (key, value) {\r\n\t        var i;\r\n\t        if (this.ActionElements[key] != null) {\r\n\t            for (i = 0; i < this.ActionElements[key].length; i++) {\r\n\t                this.ActionElements[key][i].changeState(value);\r\n\t            }\r\n\t        }\r\n\t        if (this.ActionsHoldersElements[key] != null) {\r\n\t            for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n\t                this.ActionsHoldersElements[key][i].changeState(value);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"HtmlController\", data);\r\n\t        }\r\n\t    };\r\n\t    HtmlController.Configurations = { SHOW_BONUS_BALANCE: false };\r\n\t    HtmlController.ActionElements = {};\r\n\t    HtmlController.UiActionElements = {};\r\n\t    HtmlController.UiDispatchElements = {};\r\n\t    HtmlController.UiActionDispatchElements = {};\r\n\t    HtmlController.ActionsHoldersElements = {};\r\n\t    HtmlController.ContainerElementsById = {};\r\n\t    HtmlController.DataElements = {};\r\n\t    HtmlController.RidElements = [];\r\n\t    HtmlController.DisabledClass = \"_disabled\";\r\n\t    HtmlController.HideButtons = [];\r\n\t    HtmlController.dispatchActionAllowed = true;\r\n\t    return HtmlController;\r\n\t}());\r\n\texports.HtmlController = HtmlController;\r\n\n\n/***/ },\n/* 49 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar UserAction = (function () {\r\n\t    function UserAction() {\r\n\t    }\r\n\t    UserAction.ActionToggleSound = \"TOGGLE_SOUND\";\r\n\t    UserAction.ActionExit = \"EXIT\";\r\n\t    UserAction.ActionTogglePaytable = \"TOGGLE_PAYTABLE\";\r\n\t    UserAction.ActionPaytableOn = \"PAYTABLE_ON\";\r\n\t    UserAction.ActionPaytableOff = \"PAYTABLE_OFF\";\r\n\t    UserAction.ActionMenuOn = \"MENU_ON\";\r\n\t    UserAction.ActionMenuOff = \"MENU_OFF\";\r\n\t    UserAction.ActionToggleMenu = \"TOGGLE_MENU\";\r\n\t    UserAction.ActionToggleMenuBack = \"TOGGLE_MENU_BACK\";\r\n\t    UserAction.ActionSwitchControls = \"SWITCH_CONTROLS\";\r\n\t    UserAction.ActionHelpOn = \"HELP_ON\";\r\n\t    UserAction.ActionHelpOff = \"HELP_OFF\";\r\n\t    UserAction.ActionHelpTerminal = \"TERMINAL_HELP_CYCLE\";\r\n\t    UserAction.ActionToggleBet = \"TOGGLE_BET\";\r\n\t    UserAction.ActionSettingsOn = \"SETTINGS_ON\";\r\n\t    UserAction.ActionSettingsOff = \"SETTINGS_OFF\";\r\n\t    UserAction.ActionQuickspinDialogOff = \"QUICKSPIN_DIALOG_OFF\";\r\n\t    UserAction.ActionQuickspinToggle = \"QUICKSPIN_TOGGLE\";\r\n\t    UserAction.ActionVibrationToggle = \"VIBRATION_TOGGLE\";\r\n\t    UserAction.ActionGameRoundReport = \"GAME_ROUND_REPORT\";\r\n\t    return UserAction;\r\n\t}());\r\n\texports.UserAction = UserAction;\r\n\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(51);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar QuickspinDialog = (function () {\r\n\t    function QuickspinDialog() {\r\n\t    }\r\n\t    QuickspinDialog.openDialog = function () {\r\n\t        QuickspinDialog.initializeDialog();\r\n\t        if (!QuickspinDialog._opened && !QuickspinDialog._wasOpened) {\r\n\t            if (QuickspinDialog._container != null && QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n\t                QuickspinDialog._container.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            PIXI.sound.pauseAll();\r\n\t            StageController_1.StageController.pauseAnimations();\r\n\t            FrameTimerPool_1.FrameTimerPool.pause();\r\n\t            gsap_1.TweenMax.pauseAll();\r\n\t            PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t            QuickspinDialog._opened = true;\r\n\t            QuickspinDialog._wasOpened = true;\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"quickspin\", true);\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog.closeDialog = function () {\r\n\t        if (QuickspinDialog._opened) {\r\n\t            QuickspinDialog.initializeDialog();\r\n\t            if (QuickspinDialog._container != null && !QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n\t                QuickspinDialog._container.classList.add(\"_disabled\");\r\n\t            }\r\n\t            PIXI.sound.resumeAll();\r\n\t            StageController_1.StageController.resumeAnimations();\r\n\t            FrameTimerPool_1.FrameTimerPool.unpause();\r\n\t            gsap_1.TweenMax.resumeAll();\r\n\t            PageVisibilityHandler_1.PageVisibilityHandler.Enabled = true;\r\n\t            QuickspinDialog._opened = false;\r\n\t            neo_games_1.Platforms.Platforms.quickSpinDialog(DataManager_1.DataManager.quickspinEnabled());\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"quickspin\", false);\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog.initializeDialog = function () {\r\n\t        if (QuickspinDialog._container == null) {\r\n\t            QuickspinDialog._container = document.getElementById(\"quickspinDialog\");\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog._opened = false;\r\n\t    QuickspinDialog._wasOpened = false;\r\n\t    return QuickspinDialog;\r\n\t}());\r\n\texports.QuickspinDialog = QuickspinDialog;\r\n\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar PageVisibilityHandler = (function () {\r\n\t    function PageVisibilityHandler() {\r\n\t    }\r\n\t    PageVisibilityHandler.handle = function () {\r\n\t        var hidden;\r\n\t        var visibilityChange;\r\n\t        if (typeof document.hidden !== \"undefined\") {\r\n\t            hidden = \"hidden\";\r\n\t            visibilityChange = \"visibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.mozHidden !== \"undefined\") {\r\n\t            hidden = \"mozHidden\";\r\n\t            visibilityChange = \"mozvisibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.msHidden !== \"undefined\") {\r\n\t            hidden = \"msHidden\";\r\n\t            visibilityChange = \"msvisibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.webkitHidden !== \"undefined\") {\r\n\t            hidden = \"webkitHidden\";\r\n\t            visibilityChange = \"webkitvisibilitychange\";\r\n\t        }\r\n\t        else {\r\n\t            return;\r\n\t        }\r\n\t        document.addEventListener(visibilityChange, function (e) {\r\n\t            if (PageVisibilityHandler.Enabled) {\r\n\t                var isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t                if (document[hidden]) {\r\n\t                    PageVisibilityHandler.pauseAll();\r\n\t                }\r\n\t                else {\r\n\t                    if (isIos) {\r\n\t                        clearTimeout(PageVisibilityHandler.Timer);\r\n\t                        PageVisibilityHandler.Timer = setTimeout(function () {\r\n\t                            PageVisibilityHandler.resumeAll();\r\n\t                        }, 200);\r\n\t                    }\r\n\t                    else {\r\n\t                        PageVisibilityHandler.resumeAll();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }, false);\r\n\t        window.addEventListener(\"focus\", function () {\r\n\t            var isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t            if (isIos) {\r\n\t                var context = PIXI.sound.context.audioContext;\r\n\t                if (context.state === \"suspended\" || context.state === \"interrupted\") {\r\n\t                    context.resume();\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    PageVisibilityHandler.pauseAll = function () {\r\n\t        gsap_1.TweenMax.pauseAll();\r\n\t        FrameTimerPool_1.FrameTimerPool.pause();\r\n\t        PIXI.sound.pauseAll();\r\n\t    };\r\n\t    PageVisibilityHandler.resumeAll = function () {\r\n\t        gsap_1.TweenMax.resumeAll();\r\n\t        FrameTimerPool_1.FrameTimerPool.unpause();\r\n\t        PIXI.sound.resumeAll();\r\n\t        PIXI.sound.unmuteAll();\r\n\t    };\r\n\t    PageVisibilityHandler.Enabled = true;\r\n\t    return PageVisibilityHandler;\r\n\t}());\r\n\texports.PageVisibilityHandler = PageVisibilityHandler;\r\n\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar UserAction_1 = __webpack_require__(49);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar Paytable = (function () {\r\n\t    function Paytable() {\r\n\t        Paytable.instance = this;\r\n\t    }\r\n\t    Paytable.prototype.initialize = function () {\r\n\t        var prewPageButton = document.getElementById(\"paytableButtonLeft\");\r\n\t        var nextPageButton = document.getElementById(\"paytableButtonRight\");\r\n\t        if (prewPageButton != null) {\r\n\t            prewPageButton.onclick = this.prewPage.bind(this);\r\n\t        }\r\n\t        if (nextPageButton != null) {\r\n\t            nextPageButton.onclick = this.nextPage.bind(this);\r\n\t        }\r\n\t        this._pages = document.getElementsByClassName(\"paytablePage\");\r\n\t        this._paginations = document.getElementsByClassName(\"paytablePageNumber\");\r\n\t        this.updateDataValues();\r\n\t    };\r\n\t    Paytable.prototype.updateDataValues = function () {\r\n\t        var config = Configuration_1.Configuration.Configurations[\"PaytableConfiguration\"];\r\n\t        if (config != null) {\r\n\t            var data = {};\r\n\t            var next = config.firstElementChild;\r\n\t            var maxValue = 0;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName == \"Pages\") {\r\n\t                    if (next.hasAttribute(\"Payouts\")) {\r\n\t                        Paytable.payoutPage = parseInt(next.getAttribute(\"Payouts\")) - 1;\r\n\t                    }\r\n\t                }\r\n\t                else if (next.hasAttribute(\"Symbol\")) {\r\n\t                    var id = next.getAttribute(\"Symbol\");\r\n\t                    var attrCounts = null;\r\n\t                    var attrValues = null;\r\n\t                    var i;\r\n\t                    if (next.hasAttribute(\"Counts\")) {\r\n\t                        attrCounts = next.getAttribute(\"Counts\");\r\n\t                        var counts = next.getAttribute(\"Counts\").split(\";\");\r\n\t                        for (i = 0; i < counts.length; i++) {\r\n\t                            data[\"PTB_SYMBOL_\" + id + \"_COUNT_\" + (i + 1)] =\r\n\t                                Paytable.Configurations.PAYTABLE_COUNT_PREFIX +\r\n\t                                    counts[i] +\r\n\t                                    Paytable.Configurations.PAYTABLE_COUNT_POSTFIX;\r\n\t                        }\r\n\t                    }\r\n\t                    if (next.hasAttribute(\"Values\")) {\r\n\t                        attrValues = next.getAttribute(\"Values\");\r\n\t                        var values = next.getAttribute(\"Values\").split(\";\");\r\n\t                        for (i = 0; i < values.length; i++) {\r\n\t                            if (parseInt(values[i]) > maxValue) {\r\n\t                                maxValue = parseInt(values[i]);\r\n\t                            }\r\n\t                            data[\"PTB_SYMBOL_\" + id + \"_VALUE_\" + (i + 1)] = this.getPaytableValue(values[i]);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t                var elements = document.getElementsByClassName(\"ptbTotalBetMultiplierDisplay\");\r\n\t                for (var i_1 = 0; i_1 < elements.length; i_1++) {\r\n\t                    elements[i_1].classList.add(\"_hidden\");\r\n\t                }\r\n\t                elements = document.getElementsByClassName(\"ptbTotalBetMultiplier\");\r\n\t                for (var i_2 = 0; i_2 < elements.length; i_2++) {\r\n\t                    elements[i_2].classList.add(\"_invisible\");\r\n\t                }\r\n\t            }\r\n\t            if (data != null) {\r\n\t                this.updateFontSize(maxValue, data);\r\n\t                HtmlController_1.HtmlController.updateDataElements(data);\r\n\t            }\r\n\t            this.customContent();\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.getPaytableValue = function (value, valueSepratator) {\r\n\t        if (valueSepratator === void 0) { valueSepratator = \"-\"; }\r\n\t        var valueArray = value.split(valueSepratator);\r\n\t        for (var i = 0; i < valueArray.length; i++) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t                valueArray[i] =\r\n\t                    Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, neo_common_1.NumberUtils.multiply(valueArray[i], BetManager_1.BetManager.Bet)) +\r\n\t                        \" \" +\r\n\t                        DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t            }\r\n\t            else {\r\n\t                valueArray[i] =\r\n\t                    Paytable.Configurations.PAYTABLE_VALUE_PREFIX +\r\n\t                        valueArray[i] +\r\n\t                        Paytable.Configurations.PAYTABLE_VALUE_POSTFIX;\r\n\t            }\r\n\t        }\r\n\t        return valueArray.join(valueSepratator);\r\n\t    };\r\n\t    Paytable.prototype.updateFontSize = function (maxValue, data) {\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t            return;\r\n\t        }\r\n\t        var elements = HtmlController_1.HtmlController.DataElements[\"PTB_SYMBOL_1_VALUE_1\"];\r\n\t        var conversionRate = 1;\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            var element = elements[0].instance;\r\n\t            element.removeAttribute(\"style\");\r\n\t            if (this._defaultWidth == undefined) {\r\n\t                this._defaultFontSize = parseInt(window.getComputedStyle(element).fontSize);\r\n\t                var defaultWidth = window.getComputedStyle(element).width;\r\n\t                this._defaultWidth =\r\n\t                    defaultWidth.indexOf(\"%\") > -1 ? undefined : parseInt(window.getComputedStyle(element).width);\r\n\t                this._maxBet = Math.max.apply(Math, BetManager_1.BetManager.TotalBets);\r\n\t            }\r\n\t            element.textContent =\r\n\t                Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, neo_common_1.NumberUtils.multiply(maxValue, BetManager_1.BetManager.Bet)) +\r\n\t                    \" \" +\r\n\t                    DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t            element.style.fontSize = this._defaultFontSize + \"px\";\r\n\t            element.style.width = \"auto\";\r\n\t            element.style.whiteSpace = \"nowrap\";\r\n\t            element.offsetWidth;\r\n\t            var currentWidth = parseFloat(window.getComputedStyle(element).width);\r\n\t            conversionRate = this._defaultWidth / (currentWidth * 1.1);\r\n\t            if (isNaN(conversionRate) || conversionRate > 1) {\r\n\t                conversionRate = 1;\r\n\t            }\r\n\t            element.style.fontSize = \"\";\r\n\t            element.style.width = \"\";\r\n\t        }\r\n\t        var fontConversion = window[\"CHANNEL\"] == \"mobile\" ? 0.75 : 1;\r\n\t        var fontSize = Math.floor(this._defaultFontSize * conversionRate * fontConversion) + \"px\";\r\n\t        for (var key in data) {\r\n\t            elements = HtmlController_1.HtmlController.DataElements[key];\r\n\t            if (elements != null) {\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    elements[i].instance.style.fontSize = fontSize;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.customContent = function () {\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.prewPage = function () {\r\n\t        var activeIndex = this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            if (activeIndex === 0) {\r\n\t                this._pages[this._pages.length - 1].classList.remove(\"_disabled\");\r\n\t                this._pages[this._pages.length - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._pages[activeIndex - 1].classList.remove(\"_disabled\");\r\n\t                this._pages[activeIndex - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            if (activeIndex === 0) {\r\n\t                this._paginations[this._paginations.length - 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[this._paginations.length - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._paginations[activeIndex - 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[activeIndex - 1].classList.add(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.nextPage = function () {\r\n\t        var activeIndex = this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            if (activeIndex === this._pages.length - 1) {\r\n\t                this._pages[0].classList.remove(\"_disabled\");\r\n\t                this._pages[0].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._pages[activeIndex + 1].classList.remove(\"_disabled\");\r\n\t                this._pages[activeIndex + 1].classList.add(\"_active\");\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            if (activeIndex === this._paginations.length - 1) {\r\n\t                this._paginations[0].classList.remove(\"_disabled\");\r\n\t                this._paginations[0].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._paginations[activeIndex + 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[activeIndex + 1].classList.add(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.setPage = function (page) {\r\n\t        if (page < 0 || page > this._pages.length - 1) {\r\n\t            return;\r\n\t        }\r\n\t        this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            this._pages[page].classList.remove(\"_disabled\");\r\n\t            this._pages[page].classList.add(\"_active\");\r\n\t            this._pages[page].scrollIntoView();\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            this._paginations[page].classList.remove(\"_disabled\");\r\n\t            this._paginations[page].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.disableElementsAndReturnActive = function () {\r\n\t        var activeIndex = 0;\r\n\t        for (var i = 0; i < this._pages.length; i++) {\r\n\t            var element = this._pages[i];\r\n\t            if (element != null) {\r\n\t                if (!element.classList.contains(\"_disabled\")) {\r\n\t                    element.classList.add(\"_disabled\");\r\n\t                }\r\n\t                if (element.classList.contains(\"_active\")) {\r\n\t                    activeIndex = i;\r\n\t                    element.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this._paginations.length; i++) {\r\n\t            var element = this._paginations[i];\r\n\t            if (element != null) {\r\n\t                if (!element.classList.contains(\"_disabled\")) {\r\n\t                    element.classList.add(\"_disabled\");\r\n\t                }\r\n\t                if (element.classList.contains(\"_active\")) {\r\n\t                    element.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return activeIndex;\r\n\t    };\r\n\t    Paytable.openAtStart = function (newGameRound) {\r\n\t        if (newGameRound === void 0) { newGameRound = false; }\r\n\t        if (Paytable.shouldOpen(newGameRound)) {\r\n\t            Paytable.show();\r\n\t        }\r\n\t    };\r\n\t    Paytable.show = function () {\r\n\t        Paytable.hasBeenDisplayed = true;\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        Paytable.openPayoutPage();\r\n\t        window.addEventListener(\"resize\", Paytable.openPayoutPage);\r\n\t    };\r\n\t    Paytable.openPayoutPage = function () {\r\n\t        Paytable.instance.setPage(Paytable.payoutPage);\r\n\t    };\r\n\t    Paytable.clearListeners = function () {\r\n\t        window.removeEventListener(\"resize\", Paytable.openPayoutPage);\r\n\t    };\r\n\t    Paytable.shouldOpen = function (newGameRound, isSpin) {\r\n\t        if (newGameRound === void 0) { newGameRound = false; }\r\n\t        if (isSpin === void 0) { isSpin = false; }\r\n\t        if (!AppContext_1.AppContext || !AppContext_1.AppContext.gameConfiguration.ShowPaytableAtStart) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Paytable.hasBeenDisplayed && newGameRound) {\r\n\t            return false;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed && !isSpin) {\r\n\t            return false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    Paytable.Configurations = {\r\n\t        PAYTABLE_COUNT_PREFIX: \"\",\r\n\t        PAYTABLE_COUNT_POSTFIX: \"\",\r\n\t        PAYTABLE_VALUE_PREFIX: \"\",\r\n\t        PAYTABLE_VALUE_POSTFIX: \"x\",\r\n\t    };\r\n\t    Paytable.hasBeenDisplayed = false;\r\n\t    Paytable.payoutPage = -1;\r\n\t    return Paytable;\r\n\t}());\r\n\texports.Paytable = Paytable;\r\n\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Configuration = (function () {\r\n\t    function Configuration() {\r\n\t    }\r\n\t    Configuration.Configurations = {};\r\n\t    Configuration = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Element)\r\n\t    ], Configuration);\r\n\t    return Configuration;\r\n\t}());\r\n\texports.Configuration = Configuration;\r\n\texports.GeneralConfigurationAttributes = {\r\n\t    REEL_COUNT: \"ReelCount\",\r\n\t    REEL_X: \"ReelX\",\r\n\t    REEL_Y: \"ReelY\",\r\n\t    SYMBOL_WIDTH: \"SymbolWidth\",\r\n\t    SYMBOL_HEIGHT: \"SymbolHeight\",\r\n\t    SYMBOL_BOTTOM_COUNT: \"SymbolBottomCount\",\r\n\t    SYMBOL_TOP_COUNT: \"SymbolTopCount\",\r\n\t    VISIBLE_SYMBOL_COUNT: \"VisibleSymbolCount\",\r\n\t    WINS_MULTIPLIERS: \"WinsMultipliers\",\r\n\t    WINS_ANIMATIONS: \"WinsAnimations\",\r\n\t};\r\n\texports.ReelConfigurationAttributes = {\r\n\t    FORCE_SPEED: \"ForceSpeed\",\r\n\t    FORCE_SPEED_MULTIPLER: \"ForceSpeedMultipler\",\r\n\t    PRE_ROLL: \"PreRoll\",\r\n\t    PRE_ROLL_SPEED: \"PreRollSpeed\",\r\n\t    POST_ROLL: \"PostRoll\",\r\n\t    POST_ROLL_SPEED: \"PostRollSpeed\",\r\n\t    SPEED: \"Speed\",\r\n\t};\r\n\texports.MachineConfigurationAttributes = {\r\n\t    MIN_SPIN_ROTATION: \"MinSpinRotation\",\r\n\t    MIN_SPIN_ROTATION_LONG: \"MinSpinRotationLong\",\r\n\t    START_DELAY: \"StartDelay\",\r\n\t    STOP_DELAY: \"StopDelay\",\r\n\t    REEL_CONFIGURATION: \"ReelConfiguration\",\r\n\t    TEASINGS: \"Teasings\",\r\n\t    TEASING_SYMBOLS: \"TeasingSymbols\",\r\n\t    TEASING_STOP_DELAY: \"TeasingStopDelay\",\r\n\t};\r\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar SimilarGames = (function () {\r\n\t    function SimilarGames() {\r\n\t        this.enabled = false;\r\n\t        this._pages = [];\r\n\t        this._paging = [];\r\n\t        this._actualPage = 0;\r\n\t    }\r\n\t    SimilarGames.prototype.initialize = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.ShowSimilarGames &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl !== \"\" &&\r\n\t            this.getSimilarGamesList().length > 0) {\r\n\t            this._holder = document.getElementById(\"similarGames\");\r\n\t            this._pagesHolder = document.getElementById(\"similarGamesPagesContainer\");\r\n\t            this._pagingHolder = document.getElementById(\"similarGamesPaging\");\r\n\t            if (this._holder != null && this._pagesHolder != null) {\r\n\t                this.createPages();\r\n\t                this.enabled = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.getSimilarGamesList = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.SimilarGamesList.length > 0) {\r\n\t            return AppContext_1.AppContext.gameConfiguration.SimilarGamesList.filter(function (e) { return e !== GameApp_1.GameApp.key; });\r\n\t        }\r\n\t        return [];\r\n\t    };\r\n\t    SimilarGames.prototype.createPages = function () {\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null && this.getSimilarGamesList().length > 0) {\r\n\t            var filterArray = this.getSimilarGamesList();\r\n\t            var page = 0;\r\n\t            for (var i = 0; i < filterArray.length; i++) {\r\n\t                if (i % 15 === 0) {\r\n\t                    page = this.createNextPage();\r\n\t                }\r\n\t                this.createPageItem(filterArray[i], page);\r\n\t            }\r\n\t        }\r\n\t        if (this._pages.length > 1) {\r\n\t            var prewPageButton = document.getElementById(\"similarGamesPrewArrow\");\r\n\t            var nextPageButton = document.getElementById(\"similarGamesNextArrow\");\r\n\t            if (prewPageButton != null) {\r\n\t                prewPageButton.classList.remove(\"_hidden\");\r\n\t                prewPageButton.onclick = this.prewPage.bind(this);\r\n\t            }\r\n\t            if (nextPageButton != null) {\r\n\t                nextPageButton.classList.remove(\"_hidden\");\r\n\t                nextPageButton.onclick = this.nextPage.bind(this);\r\n\t            }\r\n\t            if (this._pagingHolder != null) {\r\n\t                this._pagingHolder.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t        var exitBtn = document.getElementById(\"exitBtn\");\r\n\t        if (exitBtn != null) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.ShowExitGameButton) {\r\n\t                exitBtn.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                exitBtn.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.createNextPage = function () {\r\n\t        var newPage = document.createElement(\"div\");\r\n\t        var newPageChild = document.createElement(\"div\");\r\n\t        var newPaging = document.createElement(\"div\");\r\n\t        newPage.classList.add(\"similarGamesPage\");\r\n\t        newPageChild.classList.add(\"customContent\");\r\n\t        newPaging.classList.add(\"similarGamesPageNumber\");\r\n\t        if (this._pages.length === 0) {\r\n\t            newPage.classList.add(\"_active\");\r\n\t            newPaging.classList.add(\"_active\");\r\n\t        }\r\n\t        else {\r\n\t            newPage.classList.add(\"_disabled\");\r\n\t        }\r\n\t        newPage.appendChild(newPageChild);\r\n\t        this._pages.push(newPage);\r\n\t        this._paging.push(newPaging);\r\n\t        if (this._pagesHolder != null) {\r\n\t            this._pagesHolder.appendChild(newPage);\r\n\t        }\r\n\t        if (this._pagingHolder != null) {\r\n\t            this._pagingHolder.appendChild(newPaging);\r\n\t        }\r\n\t        return this._pages.length - 1;\r\n\t    };\r\n\t    SimilarGames.prototype.createPageItem = function (name, page) {\r\n\t        var itemHolder = document.createElement(\"div\");\r\n\t        var item = document.createElement(\"div\");\r\n\t        var itemLoading = document.createElement(\"div\");\r\n\t        var itemLoadingIcon = document.createElement(\"div\");\r\n\t        var itemLogo = document.createElement(\"div\");\r\n\t        itemHolder.classList.add(\"similarGameContainer\");\r\n\t        item.classList.add(\"similarGameItem\");\r\n\t        itemLoading.classList.add(\"similarGameLoading\");\r\n\t        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n\t        itemLogo.classList.add(\"similarGameLogo\");\r\n\t        itemLogo.setAttribute(\"game\", name);\r\n\t        var img = document.createElement(\"img\");\r\n\t        img.setAttribute(\"src\", AppContext_1.AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg\");\r\n\t        img.addEventListener(\"load\", this.setItemLogo.bind(this, itemLogo, itemLoading, name));\r\n\t        itemHolder.appendChild(item);\r\n\t        item.appendChild(itemLoading);\r\n\t        itemLoading.appendChild(itemLoadingIcon);\r\n\t        item.appendChild(itemLogo);\r\n\t        itemLogo.onclick = this.selectGame.bind(this);\r\n\t        if (this._pages[page] != null) {\r\n\t            this._pages[page].firstChild.appendChild(itemHolder);\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.setItemLogo = function (itemLogo, itemLoading, name) {\r\n\t        itemLoading.parentNode.removeChild(itemLoading);\r\n\t        itemLogo.style.background =\r\n\t            \"url(\" + AppContext_1.AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n\t    };\r\n\t    SimilarGames.prototype.prewPage = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        this.disableAllPages();\r\n\t        this._actualPage--;\r\n\t        if (this._pages[this._actualPage] == null) {\r\n\t            this._actualPage = this._pages.length - 1;\r\n\t        }\r\n\t        if (this._pages[this._actualPage] != null) {\r\n\t            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n\t            this._pages[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t        if (this._paging[this._actualPage] != null) {\r\n\t            this._paging[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.nextPage = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        this.disableAllPages();\r\n\t        this._actualPage++;\r\n\t        if (this._pages[this._actualPage] == null) {\r\n\t            this._actualPage = 0;\r\n\t        }\r\n\t        if (this._pages[this._actualPage] != null) {\r\n\t            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n\t            this._pages[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t        if (this._paging[this._actualPage] != null) {\r\n\t            this._paging[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.disableAllPages = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        for (var i = 0; i < this._pages.length; i++) {\r\n\t            if (this._pages[i].classList.contains(\"_active\")) {\r\n\t                this._pages[i].classList.remove(\"_active\");\r\n\t            }\r\n\t            if (!this._pages[i].classList.contains(\"_disabled\")) {\r\n\t                this._pages[i].classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this._paging.length; i++) {\r\n\t            if (this._paging[i].classList.contains(\"_active\")) {\r\n\t                this._paging[i].classList.remove(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.selectGame = function (e) {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n\t            var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t                var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t                var token = urlInfo[\"hash\"].substring(1);\r\n\t                var newUrl_1 = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n\t                var root = document.getElementById(\"root\");\r\n\t                if (root != null) {\r\n\t                    root.style.display = \"none\";\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n\t                if (neo_games_1.Platforms.Platforms.handleChangeGame) {\r\n\t                    return;\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    window.location.replace(newUrl_1);\r\n\t                }, 100);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.open = function () {\r\n\t        if (this.enabled) {\r\n\t            if (this._holder.classList.contains(\"_disabled\")) {\r\n\t                this._holder.classList.remove(\"_disabled\");\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.disable = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (!this._holder.classList.contains(\"_disabled\")) {\r\n\t            this._holder.classList.add(\"_disabled\");\r\n\t        }\r\n\t    };\r\n\t    return SimilarGames;\r\n\t}());\r\n\texports.SimilarGames = SimilarGames;\r\n\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar LimitDialog = (function () {\r\n\t    function LimitDialog() {\r\n\t    }\r\n\t    LimitDialog.openDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (!LimitDialog._opened) {\r\n\t            LimitDialog._openTimer.start(1);\r\n\t            if (LimitDialog._limit != null) {\r\n\t                LimitDialog._limit.style.display = \"block\";\r\n\t            }\r\n\t            LimitDialog._opened = true;\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"limit\", true);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.closeDialog = function () {\r\n\t        if (LimitDialog._opened) {\r\n\t            LimitDialog.initializeDialog();\r\n\t            LimitDialog._closeTimer.start(60);\r\n\t            if (LimitDialog._limit != null && !LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n\t                LimitDialog._limit.classList.add(\"_disabled\");\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"limit\", false);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.initializeDialog = function () {\r\n\t        if (LimitDialog._limit == null) {\r\n\t            LimitDialog._limit = document.getElementById(\"limitDialog\");\r\n\t        }\r\n\t        if (LimitDialog._openTimer == null) {\r\n\t            LimitDialog._openTimer = FrameTimer_1.CreateFrameTimer(\"openTimer\");\r\n\t            LimitDialog._openTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.showDialog);\r\n\t        }\r\n\t        if (LimitDialog._closeTimer == null) {\r\n\t            LimitDialog._closeTimer = FrameTimer_1.CreateFrameTimer(\"closeTimer\");\r\n\t            LimitDialog._closeTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.hideDialog);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.showDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (LimitDialog._limit != null && LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n\t            LimitDialog._limit.classList.remove(\"_disabled\");\r\n\t            PlayList_1.PlayList.play(\"SND_BaseLimit\");\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.hideDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (LimitDialog._limit != null) {\r\n\t            LimitDialog._limit.style.display = \"none\";\r\n\t        }\r\n\t        LimitDialog._opened = false;\r\n\t    };\r\n\t    LimitDialog._opened = false;\r\n\t    return LimitDialog;\r\n\t}());\r\n\texports.LimitDialog = LimitDialog;\r\n\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar WebSocketClient_1 = __webpack_require__(57);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(51);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(38);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar WebSocketClientHub_1 = __webpack_require__(58);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar NotificationManager = (function () {\r\n\t    function NotificationManager() {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl) {\r\n\t            this.webSocketClientHub = new WebSocketClientHub_1.WebSocketClientHub();\r\n\t        }\r\n\t        else {\r\n\t            this.webSocketClient = new WebSocketClient_1.WebSocketClient();\r\n\t        }\r\n\t        this.bindMessages();\r\n\t    }\r\n\t    NotificationManager.prototype.bindMessages = function () {\r\n\t        if (this.webSocketClient != null) {\r\n\t            this.webSocketClient.on(\"RefreshBalance\", this.refreshBalance.bind(this));\r\n\t            this.webSocketClient.on(\"CloseSession\", this.closeSession.bind(this));\r\n\t            this.webSocketClient.on(\"UpdateStatusBar\", this.updateStatusBar.bind(this));\r\n\t        }\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.onReceiveMessage(this.messageReceiver.bind(this));\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.sendMessage = function (message) {\r\n\t        if (this.webSocketClient != null) {\r\n\t            var methodName = message.action;\r\n\t            var data = message.data;\r\n\t            if (methodName == \"event/log\") {\r\n\t                methodName = \"LogEvent\";\r\n\t            }\r\n\t            this.webSocketClient.sendMessage(methodName, data);\r\n\t        }\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            if (!this.webSocketClientHub.isConnectionEstablished()) {\r\n\t                this.webSocketClientHub.addMessage(this.sendMessage.bind(this, message));\r\n\t                return;\r\n\t            }\r\n\t            this.webSocketClientHub\r\n\t                .sendMessage(message)\r\n\t                .then(function () {\r\n\t                if (false) {\r\n\t                    console.log(\"Message received\");\r\n\t                }\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                if (false) {\r\n\t                    console.log(error);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.invokeCommand = function (message) {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            return this.webSocketClientHub.invokeCommand(message);\r\n\t        }\r\n\t        return Promise.reject({ code: \"Hub connection not initialized\" });\r\n\t    };\r\n\t    NotificationManager.prototype.onReceiveMessage = function (receiver) {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.webSocketClientHub.onReceiveMessage(receiver);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.disconnect = function () {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.webSocketClientHub.disconnect();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.messageReceiver = function (message) {\r\n\t        if (message == null) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR - message object was not received from websocket\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (message.application.toLowerCase() != \"neo\") {\r\n\t            if (false) {\r\n\t                console.log('ERROR - message application was not \"NEO\"');\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (message.service.toLowerCase() == \"notification\") {\r\n\t            switch (message.action.toLowerCase()) {\r\n\t                case \"refreshbalance\":\r\n\t                    this.refreshBalance(message.data);\r\n\t                    break;\r\n\t                case \"closesession\":\r\n\t                    this.closeSession();\r\n\t                    break;\r\n\t                case \"updatestatusbar\":\r\n\t                    this.updateStatusBar(message.data);\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t        if (message.service.toLowerCase() == \"servertime\") {\r\n\t            switch (message.action.toLowerCase()) {\r\n\t                case \"update\":\r\n\t                    this.updateServerTime(message.data);\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.refreshBalance = function (data) {\r\n\t        if (data[\"freeRounds\"] != null) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.updateRemainingCount(data[\"freeRounds\"]);\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasActiveGame()) {\r\n\t            return;\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.balanceReceived(data);\r\n\t    };\r\n\t    NotificationManager.prototype.closeSession = function () {\r\n\t        for (var key in neo_games_1.Communication.Game.GameModules) {\r\n\t            ModuleManager_1.ModuleManager.disableChannelModule(neo_games_1.Communication.Game.GameModules[key]);\r\n\t        }\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        GameManager_1.GameManager.errorReceived({\r\n\t            requestInfo: {\r\n\t                request: NotificationManager,\r\n\t                url: null,\r\n\t                gameKey: null,\r\n\t            },\r\n\t            httpStatusCode: 401,\r\n\t        });\r\n\t    };\r\n\t    NotificationManager.prototype.updateStatusBar = function (data) {\r\n\t        var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t        if (statusBar.hasActiveWidget(\"statusBarMessage\") && data != null && data[\"statusBarMessage\"]) {\r\n\t            statusBar.add(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", data[\"statusBarMessage\"]);\r\n\t            Scaling_1.Scaling.resizeRoot();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.updateServerTime = function (data) {\r\n\t        if (data == null) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.serverTimeReceived(data);\r\n\t    };\r\n\t    NotificationManager.initialize = function () {\r\n\t        if (NotificationManager.instance == null) {\r\n\t            NotificationManager.instance = new NotificationManager();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.sendMessage = function (message) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            NotificationManager.instance.sendMessage(message);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.invokeCommand = function (message) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            return NotificationManager.instance.invokeCommand(message);\r\n\t        }\r\n\t        return Promise.reject({ code: \"Hub connection not initialized\" });\r\n\t    };\r\n\t    NotificationManager.onReceiveMessage = function (receiver) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            return NotificationManager.instance.onReceiveMessage(receiver);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.disconnect = function () {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            NotificationManager.instance.disconnect();\r\n\t        }\r\n\t    };\r\n\t    return NotificationManager;\r\n\t}());\r\n\texports.NotificationManager = NotificationManager;\r\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar WebSocketClient = (function () {\r\n\t    function WebSocketClient() {\r\n\t        this.connected = false;\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t            var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t            try {\r\n\t                this.hubConnection = new GameClientHub.GameClientHubConnection(serverUrl, this.getToken, AppContext_1.AppContext.gameConfiguration);\r\n\t                this.connected = true;\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (false) {\r\n\t                    console.log(\"ERROR websocket connection was not created: \" + e);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    WebSocketClient.prototype.getToken = function () {\r\n\t        var token = \"\";\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n\t            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n\t        }\r\n\t        return token;\r\n\t    };\r\n\t    WebSocketClient.prototype.sendMessage = function (methodName, data) {\r\n\t        if (this.hubConnection != null && this.connected) {\r\n\t            this.hubConnection.sendMessage(methodName, data);\r\n\t        }\r\n\t    };\r\n\t    WebSocketClient.prototype.on = function (methodName, callbackFn) {\r\n\t        if (this.hubConnection != null) {\r\n\t            this.hubConnection.on(methodName, callbackFn);\r\n\t        }\r\n\t    };\r\n\t    return WebSocketClient;\r\n\t}());\r\n\texports.WebSocketClient = WebSocketClient;\r\n\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar ClientHubConnection = ClientHub.ClientHubConnection;\r\n\tvar UpdateTokenRequest = ClientHub.UpdateTokenRequest;\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar WebSocketClientHub = (function () {\r\n\t    function WebSocketClientHub() {\r\n\t        var _this = this;\r\n\t        if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        try {\r\n\t            this.stackedMessages = [];\r\n\t            this.connectionEstablished = false;\r\n\t            this.clientHubConnection = new ClientHubConnection(AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl, this.getToken, function () {\r\n\t                _this.connectionEstablished = true;\r\n\t                neo_games_1.Platforms.Platforms.webSocketsInitialized();\r\n\t                _this.sendStackedMessages();\r\n\t            });\r\n\t            this.jwtToken = this.getToken();\r\n\t        }\r\n\t        catch (e) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR websocket connection was not created: \" + e);\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    WebSocketClientHub.prototype.getToken = function () {\r\n\t        var token = \"\";\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n\t            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n\t        }\r\n\t        return token;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.tokenChanged = function () {\r\n\t        var currentToken = this.getToken();\r\n\t        return currentToken != this.jwtToken;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.updateToken = function () {\r\n\t        if (!this.tokenChanged()) {\r\n\t            return;\r\n\t        }\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        var _self = this;\r\n\t        var token = this.getToken();\r\n\t        this.clientHubConnection\r\n\t            .updateToken(new UpdateTokenRequest(token))\r\n\t            .then(function () {\r\n\t            if (false) {\r\n\t                console.log(\"Websocket connection token was updated successfully.\");\r\n\t            }\r\n\t            _self.jwtToken = token;\r\n\t        })\r\n\t            .catch(function (e) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR websocket token was not updated: \" + e);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    WebSocketClientHub.prototype.sendStackedMessages = function () {\r\n\t        for (var i = 0; i < this.stackedMessages.length; i++) {\r\n\t            var fn = this.stackedMessages[i];\r\n\t            if (fn) {\r\n\t                fn();\r\n\t            }\r\n\t        }\r\n\t        this.stackedMessages = [];\r\n\t    };\r\n\t    WebSocketClientHub.prototype.addMessage = function (message) {\r\n\t        if (this.stackedMessages != null) {\r\n\t            this.stackedMessages.push(message);\r\n\t        }\r\n\t    };\r\n\t    WebSocketClientHub.prototype.isConnectionEstablished = function () {\r\n\t        return this.connectionEstablished;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.sendMessage = function (message) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return Promise.reject(new Error(\"Not initialized\"));\r\n\t        }\r\n\t        this.updateToken();\r\n\t        return this.clientHubConnection.sendMessage(message);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.invokeCommand = function (message) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return Promise.reject({ code: \"Not initialized\" });\r\n\t        }\r\n\t        this.updateToken();\r\n\t        return this.clientHubConnection.invokeCommand(message);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.onReceiveMessage = function (receiver) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        this.updateToken();\r\n\t        this.clientHubConnection.onReceiveMessage(receiver);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.disconnect = function () {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        this.clientHubConnection.disconnect().catch(function (e) {\r\n\t            console.log(\"ERROR websocket connection was disconnected: \" + e);\r\n\t        });\r\n\t    };\r\n\t    return WebSocketClientHub;\r\n\t}());\r\n\texports.WebSocketClientHub = WebSocketClientHub;\r\n\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SessionTimer = (function () {\r\n\t    function SessionTimer() {\r\n\t    }\r\n\t    SessionTimer.postpone = function (callback, response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(response.messages) &&\r\n\t            response.messages.length > 0) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                SessionTimer.dialog = document.getElementById(\"messageDialog\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                    SessionTimer.dialog.classList.add(\"sessionTimer\");\r\n\t                    SessionTimer.title = SessionTimer.dialog.getElementsByTagName(\"h3\")[0];\r\n\t                    SessionTimer.text = document.getElementById(\"messageDialogText\");\r\n\t                    SessionTimer.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n\t                    SessionTimer.buttons = [];\r\n\t                }\r\n\t            }\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                callback(response);\r\n\t            }\r\n\t            else {\r\n\t                SessionTimer.callback = callback;\r\n\t                SessionTimer.response = response;\r\n\t                SessionTimer.step = 0;\r\n\t                SessionTimer.handle();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            callback(response);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.updateDialogData = function (data) {\r\n\t        SessionTimer.resetDialogData();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"title\"])) {\r\n\t            SessionTimer.title.innerHTML = data[\"title\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"text\"])) {\r\n\t            SessionTimer.text.innerHTML = data[\"text\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"actions\"])) {\r\n\t            SessionTimer.removeAllButtons();\r\n\t            for (var i = 0; i < data[\"actions\"].length; i++) {\r\n\t                var action = data[\"actions\"][i];\r\n\t                switch (action.type) {\r\n\t                    case \"continue\":\r\n\t                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionContinue.bind(this, action));\r\n\t                        break;\r\n\t                    case \"exit\":\r\n\t                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionExit.bind(this, action));\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"intervals\"])) {\r\n\t            SessionTimer.createIntervals(data[\"intervals\"]);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.resetDialogData = function () {\r\n\t        SessionTimer.title.innerHTML = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t        SessionTimer.removeAllButtons();\r\n\t        SessionTimer.createButton(Languages_1.Languages.getRid(\"CONTINUE\"), SessionTimer.actionContinue);\r\n\t        if (SessionTimer.intervalHolder != null) {\r\n\t            SessionTimer.intervalHolder.parentElement.removeChild(SessionTimer.intervalHolder);\r\n\t            SessionTimer.intervalHolder = null;\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.removeAllButtons = function () {\r\n\t        while (SessionTimer.buttons.length > 0) {\r\n\t            var button = SessionTimer.buttons.pop();\r\n\t            SessionTimer.buttonsHolder.removeChild(button);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.disableAllButtons = function () {\r\n\t        for (var i = 0; i < SessionTimer.buttons.length; i++) {\r\n\t            var button = SessionTimer.buttons[i];\r\n\t            if (button != null) {\r\n\t                button.classList.add(\"_disabled\");\r\n\t                button.onclick = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.createButton = function (text, action) {\r\n\t        var button = document.createElement(\"div\");\r\n\t        button.textContent = text;\r\n\t        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t        button.onclick = action;\r\n\t        SessionTimer.buttonsHolder.appendChild(button);\r\n\t        SessionTimer.buttons.push(button);\r\n\t    };\r\n\t    SessionTimer.actionContinue = function () {\r\n\t        var _this = this;\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        SessionTimer.disableAllButtons();\r\n\t        var interval;\r\n\t        if (SessionTimer.intervals != null && SessionTimer.intervalIndex > 0) {\r\n\t            interval = SessionTimer.intervals[SessionTimer.intervalIndex];\r\n\t        }\r\n\t        GameManager_1.GameManager.gameClient.resetRealityCheck(interval).then(function (response) {\r\n\t            _this.onActionContinueReceived();\r\n\t        });\r\n\t    };\r\n\t    SessionTimer.onActionContinueReceived = function () {\r\n\t        SessionTimer.handle();\r\n\t    };\r\n\t    SessionTimer.actionExit = function () {\r\n\t        var _this = this;\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        SessionTimer.disableAllButtons();\r\n\t        GameManager_1.GameManager.gameClient.closeRealityCheck().then(function (response) {\r\n\t            _this.onActionExitReceived();\r\n\t        });\r\n\t    };\r\n\t    SessionTimer.onActionExitReceived = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    SessionTimer.handle = function () {\r\n\t        if (SessionTimer.response.messages.length === SessionTimer.step) {\r\n\t            SessionTimer.dialog.classList.add(\"_disabled\");\r\n\t            SessionTimer.callback(SessionTimer.response);\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"sessionTimer\", false);\r\n\t        }\r\n\t        else {\r\n\t            if (SessionTimer.response.messages[SessionTimer.step].type == \"plugin\") {\r\n\t                neo_games_1.Platforms.Platforms.sendPluginMessage(SessionTimer.response.messages[SessionTimer.step].text);\r\n\t                SessionTimer.step++;\r\n\t                SessionTimer.handle();\r\n\t            }\r\n\t            else {\r\n\t                SessionTimer.dialog.classList.remove(\"_disabled\");\r\n\t                SessionTimer.updateDialogData(SessionTimer.response.messages[SessionTimer.step]);\r\n\t                SessionTimer.step++;\r\n\t                neo_games_1.Platforms.Platforms.dialogOpened(\"sessionTimer\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.createIntervals = function (intervals) {\r\n\t        if (SessionTimer.buttonsHolder != null) {\r\n\t            SessionTimer.intervals = intervals;\r\n\t            SessionTimer.intervalIndex = 0;\r\n\t            SessionTimer.intervalHolder = document.createElement(\"div\");\r\n\t            SessionTimer.intervalHolder.setAttribute(\"class\", \"sessionIntervals\");\r\n\t            var buttonMinus = document.createElement(\"div\");\r\n\t            buttonMinus.setAttribute(\"class\", \"minusBtn\");\r\n\t            buttonMinus.textContent = \"-\";\r\n\t            var buttonPlus = document.createElement(\"div\");\r\n\t            buttonPlus.setAttribute(\"class\", \"plusBtn\");\r\n\t            buttonPlus.textContent = \"+\";\r\n\t            buttonMinus.addEventListener(\"click\", SessionTimer.changeInterval.bind(this, true, buttonMinus, buttonPlus));\r\n\t            buttonPlus.addEventListener(\"click\", SessionTimer.changeInterval.bind(this, false, buttonMinus, buttonPlus));\r\n\t            SessionTimer.intervalDisplay = document.createElement(\"div\");\r\n\t            SessionTimer.intervalDisplay.setAttribute(\"class\", \"value\");\r\n\t            SessionTimer.intervalDisplay.innerText = intervals[0].toString();\r\n\t            if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n\t                buttonMinus.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (SessionTimer.intervalIndex == 0) {\r\n\t                buttonPlus.classList.add(\"_disabled\");\r\n\t            }\r\n\t            SessionTimer.intervalHolder.appendChild(buttonMinus);\r\n\t            SessionTimer.intervalHolder.appendChild(SessionTimer.intervalDisplay);\r\n\t            SessionTimer.intervalHolder.appendChild(buttonPlus);\r\n\t            SessionTimer.buttonsHolder.parentElement.insertBefore(SessionTimer.intervalHolder, SessionTimer.buttonsHolder);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.changeInterval = function (increase, buttonMinus, buttonPlus) {\r\n\t        if (increase === void 0) { increase = false; }\r\n\t        buttonMinus.classList.remove(\"_disabled\");\r\n\t        buttonPlus.classList.remove(\"_disabled\");\r\n\t        if (increase) {\r\n\t            if (SessionTimer.intervalIndex < SessionTimer.intervals.length - 1) {\r\n\t                SessionTimer.intervalIndex++;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (SessionTimer.intervalIndex > 0) {\r\n\t                SessionTimer.intervalIndex--;\r\n\t            }\r\n\t        }\r\n\t        if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n\t            buttonMinus.classList.add(\"_disabled\");\r\n\t        }\r\n\t        if (SessionTimer.intervalIndex == 0) {\r\n\t            buttonPlus.classList.add(\"_disabled\");\r\n\t        }\r\n\t        SessionTimer.intervalDisplay.innerText = SessionTimer.intervals[SessionTimer.intervalIndex].toString();\r\n\t    };\r\n\t    SessionTimer.callbackFnc = function (response) {\r\n\t        SessionTimer.dialog.classList.remove(\"sessionTimer\");\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    SessionTimer.prepareData = function (response) {\r\n\t        return {\r\n\t            messages: [\r\n\t                {\r\n\t                    text: response.message,\r\n\t                    actions: [\r\n\t                        {\r\n\t                            type: \"continue\",\r\n\t                            text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                        },\r\n\t                        {\r\n\t                            type: \"exit\",\r\n\t                            text: Languages_1.Languages.getRid(\"CLOSE\"),\r\n\t                        },\r\n\t                    ],\r\n\t                    intervals: response.intervals,\r\n\t                },\r\n\t            ],\r\n\t        };\r\n\t    };\r\n\t    return SessionTimer;\r\n\t}());\r\n\texports.SessionTimer = SessionTimer;\r\n\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar SplashScreen = (function () {\r\n\t    function SplashScreen(htmlInstance) {\r\n\t        var _this = this;\r\n\t        if (htmlInstance != null) {\r\n\t            this._htmlInstance = {};\r\n\t            this._htmlInstance[\"instance\"] = htmlInstance;\r\n\t            SplashScreen.suspendInit = true;\r\n\t            this._autoCloseTimerFinished = false;\r\n\t            this._continueEnabled = false;\r\n\t            this._timer = setTimeout(function () {\r\n\t                _this.autoCloseTimer();\r\n\t            }, SplashScreen.AutoCloseDelay * 1000);\r\n\t        }\r\n\t    }\r\n\t    SplashScreen.prototype.onInitReceived = function (initResponse) {\r\n\t        this._initResponse = initResponse;\r\n\t        if (this._initResponse.status != null && this._initResponse.status == neo_games_1.Communication.Game.GameStatus.Closed) {\r\n\t            this.showContinueButton();\r\n\t        }\r\n\t        else {\r\n\t            this.showGame();\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.prototype.autoCloseTimer = function () {\r\n\t        this._autoCloseTimerFinished = true;\r\n\t        if (this._continueEnabled) {\r\n\t            this.showGame();\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.prototype.showContinueButton = function () {\r\n\t        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n\t            this._continueEnabled = true;\r\n\t            if (this._autoCloseTimerFinished) {\r\n\t                this.showGame();\r\n\t            }\r\n\t            else {\r\n\t                this._htmlInstance[\"instance\"].showContinueButton(this.showGame.bind(this));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.prototype.showGame = function () {\r\n\t        clearTimeout(this._timer);\r\n\t        SplashScreen.suspendInit = false;\r\n\t        MessageManager_1.MessageManager.postpone(GameManager_1.GameManager.continueInitReceived, this._initResponse);\r\n\t    };\r\n\t    SplashScreen.prototype.hideSplashScreen = function () {\r\n\t        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n\t            this._htmlInstance[\"instance\"].hideSplashScreen();\r\n\t            this._htmlInstance = null;\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.prototype.showError = function () {\r\n\t        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n\t            this._htmlInstance[\"instance\"].showError();\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.createSplashScreen = function (htmlInstance) {\r\n\t        if (SplashScreen.instance == null) {\r\n\t            SplashScreen.instance = new SplashScreen(htmlInstance);\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.hideSplashScreen = function () {\r\n\t        if (SplashScreen.instance != null) {\r\n\t            SplashScreen.instance.hideSplashScreen();\r\n\t            SplashScreen.instance = null;\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.suspendInitReceived = function (initResponse) {\r\n\t        if (SplashScreen.suspendInit && SplashScreen.instance != null) {\r\n\t            SplashScreen.instance.onInitReceived(initResponse);\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    SplashScreen.showError = function () {\r\n\t        if (SplashScreen.instance != null) {\r\n\t            SplashScreen.instance.showError();\r\n\t        }\r\n\t    };\r\n\t    SplashScreen.AutoCloseDelay = 15;\r\n\t    SplashScreen.suspendInit = false;\r\n\t    SplashScreen.instance = null;\r\n\t    return SplashScreen;\r\n\t}());\r\n\texports.SplashScreen = SplashScreen;\r\n\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar FreespinsModel = (function () {\r\n\t    function FreespinsModel(controller) {\r\n\t        this.controller = controller;\r\n\t        this._spinDelayed = FrameTimer_1.CreateFrameTimer(\"spinDelayed\");\r\n\t        this._spinDelayed.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinReceivedDelayed.bind(this));\r\n\t    }\r\n\t    FreespinsModel.prototype.start = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Freespins).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.spin = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.freespin(neo_games_1.Communication.Game.GameModules.Freespins).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.spinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.end = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.endFreespin().then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.endReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            if (response.module(GameModules.Freespins) != null) {\r\n\t                FreespinsModel.LastScreen = response.module(GameModules.Freespins).screen;\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.featureStarted({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.prototype.spinReceived = function (response) {\r\n\t        this._delayedResponse = response;\r\n\t        if (response.module(GameModules.Freespins) != null) {\r\n\t            FreespinsModel.LastScreen = response.module(GameModules.Freespins).screen;\r\n\t        }\r\n\t        this._spinDelayed.start(30);\r\n\t    };\r\n\t    FreespinsModel.prototype.spinReceivedDelayed = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this._delayedResponse)) {\r\n\t            GameManager_1.GameManager.parseResponses(this._delayedResponse);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.spinReceived();\r\n\t            neo_games_1.Platforms.Platforms.spinReceived({\r\n\t                balance: parseFloat(neo_common_1.NumberUtils.add(this._delayedResponse.balance.real, this._delayedResponse.balance.bonus)),\r\n\t                win: GameManager_1.GameManager.freespinsResponse.currentWin,\r\n\t                totalBet: BetManager_1.BetManager.createBetForSpin().totalBet,\r\n\t                roundId: this._delayedResponse.roundId,\r\n\t            });\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.prototype.endReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            neo_games_1.Platforms.Platforms.featureFinished({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t            this.controller.endReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.LastScreen = {};\r\n\t    return FreespinsModel;\r\n\t}());\r\n\texports.FreespinsModel = FreespinsModel;\r\n\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar GsapEffects_1 = __webpack_require__(16);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar CustomEase_1 = __webpack_require__(19);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AmbientBackground_1 = __webpack_require__(63);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar JackpotGame = (function () {\r\n\t    function JackpotGame(holder) {\r\n\t        this.holder = holder;\r\n\t        this.root = this.createBaseLayout();\r\n\t        this.holder.appendChild(this.root);\r\n\t        var intro = this.createAnimations();\r\n\t        this.holder.appendChild(intro);\r\n\t        this.stopTimer = FrameTimer_1.CreateFrameTimer(\"MiniGameSpinStop\");\r\n\t        this.stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\t        this.buzzerTimer = FrameTimer_1.CreateFrameTimer(\"BuzzerTimer\");\r\n\t        this.buzzerTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.buzzerTimeFinished.bind(this));\r\n\t        this.showWinDelay = FrameTimer_1.CreateFrameTimer(\"BuzzerTimer\");\r\n\t        this.showWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.updateWin.bind(this));\r\n\t        this.gameInitialized = false;\r\n\t        this.gameStarted = false;\r\n\t        this.autostart = false;\r\n\t        this.showHandPayDialog = false;\r\n\t        this.assetsLoaded = false;\r\n\t        this.startAfterLoad = false;\r\n\t        CustomEase_1.CustomEase.create(\"miniGameSpinStopEase\", \"M0,0,C0,0,0.212,0.616,0.452,0.842,0.519,0.905,0.627,1.008,0.716,1.026,0.768,1.036,0.819,1.031,0.848,1.028,0.89,1.022,1,1,1,1\");\r\n\t    }\r\n\t    JackpotGame.prototype.createBaseLayout = function () {\r\n\t        var root = this.createElement(\"div\", \"jackpotGame\");\r\n\t        this.reel = this.createElement(\"div\", \"jackpotReel\", root);\r\n\t        this.createElement(\"div\", \"jackpotTextOverlay\", root);\r\n\t        var hintContainer = this.createElement(\"div\", \"jackpotStartHint\", root);\r\n\t        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages_1.Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n\t        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages_1.Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n\t        this.createElement(\"div\", \"jackpotFrameLeft\", root);\r\n\t        this.createElement(\"div\", \"jackpotFrameRight\", root);\r\n\t        this.createElement(\"div\", \"jackpotGlowLeft\", root);\r\n\t        this.createElement(\"div\", \"jackpotGlowRight\", root);\r\n\t        var arrows = this.createElement(\"div\", \"jackpotArrows\", root);\r\n\t        var arrow = this.createElement(\"div\", \"jackpotArrowLeft\", arrows);\r\n\t        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n\t        arrow = this.createElement(\"div\", \"jackpotArrowRight\", arrows);\r\n\t        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n\t        this.createTextElement(\"div\", \"jackpotGameName\", document.getElementById(\"gameTitle\").innerHTML, root);\r\n\t        return root;\r\n\t    };\r\n\t    JackpotGame.prototype.createAnimations = function () {\r\n\t        var intro = this.createElement(\"div\", \"jackpotIntro\");\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            var firework = this.createElement(\"div\", \"jackpotFireworks\", intro);\r\n\t            for (var j = 0; j < 8; j++) {\r\n\t                this.createElement(\"div\", \"fireworksPart\", firework);\r\n\t            }\r\n\t        }\r\n\t        var titles = this.createElement(\"div\", \"jackpotTitles\", intro);\r\n\t        var _self = this;\r\n\t        document.body.classList.add(\"jpt-loading\");\r\n\t        Promise.all([\r\n\t            this.getCustomContent(\"jackpotTextSynot\", \".png\"),\r\n\t            this.getCustomContent(\"jackpotTextProgressive\", \".png\"),\r\n\t            this.getCustomContent(\"jackpotTextBonus\", \".png\"),\r\n\t        ]).then(function (values) {\r\n\t            for (var i = 0; i < values.length; i++) {\r\n\t                var elem = _self.createElement(\"div\", values[i][0], titles);\r\n\t                if (values[i][1] != \"\") {\r\n\t                    elem.style.background = \"url(\" + values[i][1] + \") no-repeat\";\r\n\t                }\r\n\t            }\r\n\t            document.body.classList.remove(\"jpt-loading\");\r\n\t            _self.assetsLoaded = true;\r\n\t            if (_self.startAfterLoad) {\r\n\t                _self.intro();\r\n\t            }\r\n\t        });\r\n\t        this.createElement(\"div\", \"jackpotTextOverlay\", intro);\r\n\t        this.winContainer = this.createElement(\"div\", \"jackpotWinValue\", intro);\r\n\t        return intro;\r\n\t    };\r\n\t    JackpotGame.prototype.init = function (autostart, callback) {\r\n\t        if (this.ticket == null && GameManager_1.GameManager.gameResponse && GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket) {\r\n\t            this.ticket = GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n\t            this.gameInitialized = false;\r\n\t            this.autostart = autostart;\r\n\t            this.callback = callback;\r\n\t            this.initSymbols();\r\n\t            this.createSymbols();\r\n\t            this.sendInitBonusGameRequest();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.initFinished = function () {\r\n\t        this.gameInitialized = true;\r\n\t        if (this.autostart) {\r\n\t            if (this.callback != null) {\r\n\t                this.callback();\r\n\t            }\r\n\t            this.intro();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.start = function () {\r\n\t        if (!this.autostart) {\r\n\t            this.intro();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.startGame = function () {\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoBeforeSpin(this.sendSpinBonusGameRequest.bind(this));\r\n\t        this.spinStart();\r\n\t    };\r\n\t    JackpotGame.prototype.spinStop = function (fromMachine, fromServer) {\r\n\t        if (fromMachine === void 0) { fromMachine = true; }\r\n\t        if (fromServer === void 0) { fromServer = false; }\r\n\t        if (fromMachine) {\r\n\t            this.stoppedFromMachine = true;\r\n\t        }\r\n\t        if (fromServer) {\r\n\t            this.stoppedFromServer = true;\r\n\t        }\r\n\t        if (this.stoppedFromMachine && this.stoppedFromServer) {\r\n\t            this.isStopping = true;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.closeMiniGame = function () {\r\n\t        if (this.callback != null && this.autostart) {\r\n\t            this.callback();\r\n\t        }\r\n\t        this.outroFinished(false);\r\n\t    };\r\n\t    JackpotGame.prototype.setBaseGameSound = function (enable) {\r\n\t        ModuleManager_1.ModuleManager.toggleModuleSounds(GameModules.Base, enable);\r\n\t    };\r\n\t    JackpotGame.prototype.hasInitializedGame = function () {\r\n\t        return this.gameInitialized;\r\n\t    };\r\n\t    JackpotGame.prototype.hasStartedGame = function () {\r\n\t        return this.gameStarted;\r\n\t    };\r\n\t    JackpotGame.prototype.disableAutostart = function () {\r\n\t        this.autostart = false;\r\n\t        this.clearJackpotGameResponse();\r\n\t    };\r\n\t    JackpotGame.prototype.clearJackpotGame = function () {\r\n\t        if (this.holder) {\r\n\t            this.holder.classList.remove(\"outro\");\r\n\t            this.holder.classList.add(\"_hidden\");\r\n\t            this.holder.className = \"jackpotGameHolder _hidden\";\r\n\t        }\r\n\t        if (this.root) {\r\n\t            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n\t        }\r\n\t        if (this.reel) {\r\n\t            this.reel.innerHTML = \"\";\r\n\t            this.currentOffset = 0;\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.currentSymbols = [];\r\n\t            this.currentSymbolsHeight = [];\r\n\t        }\r\n\t        if (this.winContainer) {\r\n\t            this.winContainer.style.transform = \"scale(0)\";\r\n\t            this.winContainer.innerHTML = \"\";\r\n\t            this.winContainer.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.winContainer.removeEventListener(\"animationend\", this.lastEvent);\r\n\t        }\r\n\t        this.ticket = null;\r\n\t    };\r\n\t    JackpotGame.prototype.clearJackpotGameResponse = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse[\"progressiveBonus\"]) {\r\n\t            GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.sendInitBonusGameRequest = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendMaxPowerBonusInitRequest(this.ticket)\r\n\t                .then(function (response) {\r\n\t                if (response != null && response.status == \"Active\") {\r\n\t                    _this.initFinished();\r\n\t                }\r\n\t                else {\r\n\t                    _this.closeMiniGame();\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.sendSpinBonusGameRequest = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendMaxPowerBonusSpinRequest(this.ticket)\r\n\t                .then(function (response) {\r\n\t                _this.setGameData(response);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.setGameData = function (response) {\r\n\t        if (response != null) {\r\n\t            this.gameData = response;\r\n\t            this.spinStop(false, true);\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.GameRoundIdVisible) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataRoundId, this.ticket.id);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.showError();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.intro = function () {\r\n\t        var _this = this;\r\n\t        if (!this.assetsLoaded) {\r\n\t            this.startAfterLoad = true;\r\n\t            return;\r\n\t        }\r\n\t        if (!this.gameStarted) {\r\n\t            this.gameStarted = true;\r\n\t            PlayList_1.PlayList.loop(\"SND_JackpotBuzzer\");\r\n\t            this.bounceCounters(true);\r\n\t            this.buzzerTimer.stop();\r\n\t            this.buzzerTimer.start(JackpotGame.BuzzerDuration);\r\n\t            setTimeout(function () {\r\n\t                _this.setBaseGameSound(false);\r\n\t            }, 1);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.buzzerTimeFinished = function () {\r\n\t        this.buzzerTimer.stop();\r\n\t        this.bounceCounters(false);\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotBuzzer\");\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        DataManager_1.DataManager.GameLimit = false;\r\n\t        if (this.holder) {\r\n\t            this.lastEvent = this.introFinished.bind(this);\r\n\t            this.root.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.addEventListener(\"animationend\", this.lastEvent);\r\n\t            AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"jackpotBg\", 1000, 5500);\r\n\t            PlayList_1.PlayList.play(\"SND_JackpotIntroHit\");\r\n\t            PlayList_1.PlayList.loop(\"SND_JackpotIntroWaitingLoop\", 360);\r\n\t            this.holder.classList.remove(\"_hidden\");\r\n\t            void this.holder.offsetWidth;\r\n\t            this.holder.classList.add(\"start\");\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.introFinished = function () {\r\n\t        if (this.holder) {\r\n\t            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n\t            PlayList_1.PlayList.stop(\"SND_JackpotIntroHit\");\r\n\t            this.holder.classList.add(\"startFinished\");\r\n\t            this.setStageVisibility(false);\r\n\t            this.createSpinBtn();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.outro = function () {\r\n\t        this.setStageVisibility(true);\r\n\t        this.holder.classList.remove(\"spin\");\r\n\t        void this.holder.offsetWidth;\r\n\t        this.holder.classList.add(\"outro\");\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 2000, 8000);\r\n\t        this.lastEvent = this.outroFinished.bind(this);\r\n\t        this.winContainer.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t        this.winContainer.addEventListener(\"animationend\", this.lastEvent);\r\n\t    };\r\n\t    JackpotGame.prototype.outroFinished = function (collect) {\r\n\t        if (collect === void 0) { collect = true; }\r\n\t        if (collect) {\r\n\t            this.updateBalance();\r\n\t        }\r\n\t        this.clearJackpotGame();\r\n\t        this.clearJackpotGameResponse();\r\n\t        this.setBaseGameSound(true);\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t        if (this.showHandPayDialog) {\r\n\t            this.openHandPayDialog();\r\n\t        }\r\n\t        else {\r\n\t            this.restoreGameRound(collect);\r\n\t        }\r\n\t        this.autostart = false;\r\n\t    };\r\n\t    JackpotGame.prototype.updateBalance = function () {\r\n\t        if (this.gameData != null) {\r\n\t            if (this.gameData.balance != null) {\r\n\t                this.showHandPayDialog = false;\r\n\t                BalanceManager_1.BalanceManager.balanceReceived(this.gameData.balance);\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t                if (this.gameData.game != null && this.gameData.game.win != null) {\r\n\t                    DataManager_1.DataManager.updateTotalGain(false, this.gameData.game.win.amount);\r\n\t                }\r\n\t                if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t                    this.updateWin(false, \"0\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.showHandPayDialog = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = true; }\r\n\t        this.gameInitialized = false;\r\n\t        this.gameStarted = false;\r\n\t        this.showHandPayDialog = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base, collect);\r\n\t    };\r\n\t    JackpotGame.prototype.openHandPayDialog = function () {\r\n\t        var response = {\r\n\t            messages: [\r\n\t                {\r\n\t                    text: Languages_1.Languages.getRid(\"HANDPAY_DIALOG\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.gameData.game.win.amount.toString()) +\r\n\t                        \" \" +\r\n\t                        DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency)),\r\n\t                },\r\n\t            ],\r\n\t        };\r\n\t        MessageManager_1.MessageManager.postpone(this.restoreGameRound.bind(this), response);\r\n\t    };\r\n\t    JackpotGame.prototype.initSymbols = function () {\r\n\t        if (this.reel) {\r\n\t            this.currentSymbols = [];\r\n\t            this.currentSymbolsHeight = [];\r\n\t            this.stripIndex = (JackpotGame.Strip.indexOf(4) + 2 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            if (!this.rootHeight) {\r\n\t                this.rootHeight = this.getElementHeight(this.root);\r\n\t            }\r\n\t            var symbolId = void 0;\r\n\t            this.symbolsHeight = [];\r\n\t            for (var i = 0; i < JackpotGame.SymbolsCount; i++) {\r\n\t                symbolId = i + 1;\r\n\t                var symbol = this.createElement(\"div\", \"jackpotSymbol l-\" + symbolId, this.reel);\r\n\t                this.symbolsHeight.push(this.getElementHeight(symbol));\r\n\t                this.reel.removeChild(symbol);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createSymbols = function () {\r\n\t        if (this.reel) {\r\n\t            var symbolId = void 0;\r\n\t            for (var i = 0; i < JackpotGame.SpinPreRollSymbolCount; i++) {\r\n\t                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t                symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t                this.addSymbolToReel(symbolId, false, i > 3);\r\n\t            }\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.updateSymbols = function () {\r\n\t        while (this.currentSymbols.length > 3) {\r\n\t            this.currentSymbolsHeight.pop();\r\n\t            var symbol = this.currentSymbols.pop();\r\n\t            this.reel.removeChild(symbol);\r\n\t        }\r\n\t        if (this.isStopping) {\r\n\t            this.updatePostRollSymbols();\r\n\t        }\r\n\t        else {\r\n\t            this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            var symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t            this.addSymbolToReel(symbolId, false, true);\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.updatePostRollSymbols = function () {\r\n\t        if (this.gameData != null) {\r\n\t            var winSymbolId = this.gameData.game.symbols[JackpotGame.MiddleSymbolIndex];\r\n\t            var finishStripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\r\n\t            while (JackpotGame.Strip[finishStripIndex] != winSymbolId) {\r\n\t                finishStripIndex = (finishStripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            }\r\n\t            this.stripIndex =\r\n\t                (finishStripIndex + (JackpotGame.SpinPostRollSymbolCount - 1) + JackpotGame.Strip.length) %\r\n\t                    JackpotGame.Strip.length;\r\n\t            for (var i = 0; i < JackpotGame.SpinPostRollSymbolCount; i++) {\r\n\t                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t                var symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t                this.addSymbolToReel(symbolId, i == JackpotGame.SpinPostRollSymbolCount - 2, i < 8);\r\n\t            }\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.removeOffScreenSymbols = function () {\r\n\t        while (this.currentSymbols.length > 3) {\r\n\t            this.currentSymbolsHeight.pop();\r\n\t            var symbol = this.currentSymbols.pop();\r\n\t            this.reel.removeChild(symbol);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.spinStart = function () {\r\n\t        if (this.spinBtn) {\r\n\t            this.spinBtn.parentElement.removeChild(this.spinBtn);\r\n\t        }\r\n\t        document.removeEventListener(\"keyup\", this.lastEvent);\r\n\t        this.updateWin(false, \"0\");\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotIntroWaitingLoop\");\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotStartHit\");\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotWheelMusic\");\r\n\t        this.stoppedFromMachine = false;\r\n\t        this.stoppedFromServer = false;\r\n\t        if (this.holder) {\r\n\t            this.holder.classList.remove(\"start\");\r\n\t            this.holder.classList.remove(\"startFinished\");\r\n\t            this.holder.classList.add(\"spin\");\r\n\t        }\r\n\t        this.isStopping = false;\r\n\t        this.stopTimer.start(JackpotGame.MinSpinDuration);\r\n\t        this.spinPreRoll();\r\n\t    };\r\n\t    JackpotGame.prototype.spinPreRoll = function () {\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.updateSymbols, JackpotGame.SpinPreRollDuration, \"Power2.easeIn\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.spinRoll = function () {\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        var duration = this.getSpinRollDuration(nextOffset);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.updateSymbols, duration, \"linear\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.spinPostRoll = function () {\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoInMiniGame(this.createLevelDataOverride(false));\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.spinComplete, JackpotGame.SpinPostRollDuration, \"miniGameSpinStopEase\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.onSpinPostRollUpdate = function (tween) {\r\n\t        if (this.symbolStepOffsets.length > 0) {\r\n\t            if (tween.target._gsTransform.y > this.symbolStepOffsets[0]) {\r\n\t                PlayList_1.PlayList.play(\"SND_JackpotWheelClick1\");\r\n\t                if (this.holder) {\r\n\t                    this.holder.classList.remove(\"hit\");\r\n\t                    this.holder.offsetWidth;\r\n\t                    this.holder.classList.add(\"hit\");\r\n\t                }\r\n\t                this.symbolStepOffsets.shift();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.spinComplete = function () {\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t        if (this.gameData != null) {\r\n\t            this.showWinDelay.start(135);\r\n\t            if (this.gameData.game.limit) {\r\n\t                LimitDialog_1.LimitDialog.openDialog();\r\n\t            }\r\n\t        }\r\n\t        this.removeOffScreenSymbols();\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoWithWinValue(this.createLevelDataOverride(true));\r\n\t        var isHigh = this.createWinValue();\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotWheelMusic\", 30);\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotWinMusic\");\r\n\t        this.outro();\r\n\t    };\r\n\t    JackpotGame.prototype.updateWin = function (collected, value) {\r\n\t        if (value === void 0) { value = \"\"; }\r\n\t        this.showWinDelay.stop();\r\n\t        var uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n\t        var collectedWin = document.getElementById(\"collectedWin\");\r\n\t        if (uncollectedWin != null && collectedWin != null) {\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(value)) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataTotalWin, value);\r\n\t            }\r\n\t            else {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataTotalWin, this.gameData.game.win.amount.toString());\r\n\t            }\r\n\t            if (collected) {\r\n\t                uncollectedWin.classList.add(\"_hidden\");\r\n\t                collectedWin.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                uncollectedWin.classList.remove(\"_hidden\");\r\n\t                collectedWin.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.animate = function (currentOffset, newOffset, callback, duration, ease, delay, updateCallback) {\r\n\t        if (ease === void 0) { ease = \"linear\"; }\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        if (updateCallback === void 0) { updateCallback = null; }\r\n\t        duration = duration * GsapEffects_1.GsapEffects.TickTime;\r\n\t        delay = delay * GsapEffects_1.GsapEffects.TickTime;\r\n\t        gsap_1.TweenMax.killTweensOf(this.reel);\r\n\t        var tween = gsap_1.TweenMax.fromTo(this.reel, duration, { y: currentOffset, roundProps: \"y\" }, { y: newOffset, ease: ease, delay: delay, roundProps: \"y\" });\r\n\t        this.currentOffset = newOffset;\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(callback)) {\r\n\t            tween.eventCallback(\"onComplete\", callback, [], this);\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(updateCallback)) {\r\n\t            tween.eventCallback(\"onUpdate\", updateCallback, [\"{self}\"], this);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createWinValue = function () {\r\n\t        if (this.gameData != null) {\r\n\t            var winValue = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.gameData.game.win.amount.toString());\r\n\t            if (this.winContainer) {\r\n\t                var childs = this.winContainer.children;\r\n\t                for (var i = 0; i < winValue.length; i++) {\r\n\t                    if (!childs[i]) {\r\n\t                        this.createElement(\"div\", \"n\" + winValue.charCodeAt(i).toString(), this.winContainer);\r\n\t                    }\r\n\t                    else {\r\n\t                        childs[i].className = \"n\" + winValue.charCodeAt(i).toString();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            return this.gameData.game.win.level == \"Gold\" || this.gameData.game.win.level == \"Diamond\";\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    JackpotGame.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotGame.prototype.getElementHeight = function (elem) {\r\n\t        return parseInt(window.getComputedStyle(elem).height);\r\n\t    };\r\n\t    JackpotGame.prototype.getSpinRollDuration = function (newOffset) {\r\n\t        var diff = Math.abs(this.currentOffset - newOffset);\r\n\t        return Math.round((diff / this.symbolsHeight[0]) * JackpotGame.SpinRollSpeed);\r\n\t    };\r\n\t    JackpotGame.prototype.getReelOffset = function (middleSymbolIndex) {\r\n\t        var offset = Math.round(this.rootHeight * 0.5);\r\n\t        if (this.currentSymbols.length > 0) {\r\n\t            for (var i = 0; i < middleSymbolIndex; i++) {\r\n\t                offset -= this.currentSymbolsHeight[i];\r\n\t            }\r\n\t            offset -= Math.round(this.currentSymbolsHeight[middleSymbolIndex] * 0.5);\r\n\t        }\r\n\t        return offset;\r\n\t    };\r\n\t    JackpotGame.prototype.getSymbolStepOffsets = function (middleSymbolIndex) {\r\n\t        var offset = this.currentOffset;\r\n\t        var result = [];\r\n\t        if (this.currentSymbols.length > 2) {\r\n\t            offset += this.currentSymbolsHeight[this.currentSymbols.length - 2] * 0.5;\r\n\t            result.push(offset);\r\n\t            for (var i = this.currentSymbolsHeight.length - 3; i > middleSymbolIndex; i--) {\r\n\t                offset += this.currentSymbolsHeight[i];\r\n\t                result.push(offset);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    JackpotGame.prototype.createElement = function (tag, className, rootElem, appendBefore) {\r\n\t        if (appendBefore === void 0) { appendBefore = null; }\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem != null) {\r\n\t            if (appendBefore != null) {\r\n\t                rootElem.insertBefore(elem, appendBefore);\r\n\t            }\r\n\t            else {\r\n\t                rootElem.appendChild(elem);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createSymbol = function (tag, className, rootElem, appendBefore) {\r\n\t        if (appendBefore === void 0) { appendBefore = null; }\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        var symbolHolder = document.createElement(tag);\r\n\t        symbolHolder.className = \"jackpotSymbolHolder\";\r\n\t        elem.appendChild(symbolHolder);\r\n\t        if (rootElem != null) {\r\n\t            if (appendBefore != null) {\r\n\t                rootElem.insertBefore(elem, appendBefore);\r\n\t            }\r\n\t            else {\r\n\t                rootElem.appendChild(elem);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createTextElement = function (tag, className, text, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        elem.innerHTML = text;\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createSpinBtn = function () {\r\n\t        var userControls = document.getElementById(\"userControls\");\r\n\t        if (userControls) {\r\n\t            var spinBtn = userControls.getElementsByClassName(\"spinBtn\")[0];\r\n\t            if (spinBtn) {\r\n\t                var parent_1 = spinBtn.parentElement;\r\n\t                this.spinBtn = this.createElement(\"div\", \"btn spinBtn\", parent_1);\r\n\t                this.spinBtn.innerHTML = spinBtn.innerHTML;\r\n\t                this.spinBtn.addEventListener(\"click\", this.startGame.bind(this));\r\n\t                this.lastEvent = this.handleSpaceStart.bind(this);\r\n\t                document.addEventListener(\"keyup\", this.lastEvent);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createLevelDataOverride = function (winData) {\r\n\t        var result = {};\r\n\t        if (this.gameData != null) {\r\n\t            result.code = this.gameData.game.win.level;\r\n\t            if (winData) {\r\n\t                result.lastWinAmount = this.gameData.game.win.amount;\r\n\t            }\r\n\t            else {\r\n\t                result.nextValue = this.gameData.game.win.amount;\r\n\t                result.nextTimestamp = new Date(new Date().getTime() + 8000).toISOString();\r\n\t                result.previousValue = this.gameData.game.win.amount;\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    JackpotGame.prototype.setTransformY = function (elem, y) {\r\n\t        elem.style.transform = \"translate3d(0, \" + y + \"px, 0)\";\r\n\t    };\r\n\t    JackpotGame.prototype.setStageVisibility = function (visible) {\r\n\t        if (StageController_1.StageController.Renderer != null && StageController_1.StageController.Renderer._lastObjectRendered) {\r\n\t            StageController_1.StageController.Renderer._lastObjectRendered.visible = visible;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.handleSpaceStart = function (event) {\r\n\t        if (event.keyCode == 32) {\r\n\t            this.startGame();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.addSymbolToReel = function (symbolId, winSymbol, blured) {\r\n\t        if (winSymbol === void 0) { winSymbol = false; }\r\n\t        if (blured === void 0) { blured = false; }\r\n\t        var className = \"jackpotSymbol l-\" + symbolId;\r\n\t        if (winSymbol) {\r\n\t            className += \" jackpotWinSymbol\";\r\n\t            this.holder.classList.add(\"win-\" + symbolId);\r\n\t        }\r\n\t        if (blured) {\r\n\t            className += \" blur\";\r\n\t        }\r\n\t        var symbol = this.createSymbol(\"div\", className, this.reel, this.currentSymbols[0]);\r\n\t        this.currentSymbols.unshift(symbol);\r\n\t        this.currentSymbolsHeight.unshift(this.symbolsHeight[symbolId - 1]);\r\n\t    };\r\n\t    JackpotGame.prototype.bounceCounters = function (enable) {\r\n\t        var countersHolder = document.getElementById(\"jackpotCounters\");\r\n\t        var countersLogo = document.getElementById(\"jackpotLogo\");\r\n\t        if (countersHolder != null && countersLogo != null) {\r\n\t            if (enable) {\r\n\t                countersHolder.classList.add(\"jackpotBounce\");\r\n\t                countersLogo.classList.add(\"jackpotBounce\");\r\n\t            }\r\n\t            else {\r\n\t                countersHolder.classList.remove(\"jackpotBounce\");\r\n\t                countersLogo.classList.remove(\"jackpotBounce\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.getCustomContent = function (name, extension) {\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t                resolve([name, \"\"]);\r\n\t                return;\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n\t                resolve([name, \"\"]);\r\n\t                return;\r\n\t            }\r\n\t            var theme = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n\t            if (theme == \"\") {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t                    theme = Jackpot_1.Jackpot.JackpotTheme;\r\n\t                }\r\n\t                else {\r\n\t                    resolve([name, \"\"]);\r\n\t                    return;\r\n\t                }\r\n\t            }\r\n\t            var staticContentUrl = AppContext_1.AppContext.gameConfiguration.StaticContentUrl;\r\n\t            var spbFolder = \"SynotProgressiveBonus\";\r\n\t            var url = \"\" + staticContentUrl + spbFolder + \"/\" + theme + \"/\" + window[\"QUALITY\"] + \"/\" + name + extension;\r\n\t            var img = document.createElement(\"img\");\r\n\t            img.setAttribute(\"src\", url);\r\n\t            img.addEventListener(\"load\", function (ev) {\r\n\t                resolve([name, url]);\r\n\t            });\r\n\t            img.addEventListener(\"error\", function (ev) {\r\n\t                resolve([name, \"\"]);\r\n\t            });\r\n\t        });\r\n\t    };\r\n\t    JackpotGame.Strip = [\r\n\t        1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 2, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1,\r\n\t        1, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 4,\r\n\t    ];\r\n\t    JackpotGame.SymbolsCount = 4;\r\n\t    JackpotGame.BuzzerDuration = 180;\r\n\t    JackpotGame.SpinRollSpeed = 8;\r\n\t    JackpotGame.MinSpinDuration = 360;\r\n\t    JackpotGame.MiddleSymbolIndex = 1;\r\n\t    JackpotGame.SpinPreRollDuration = 120;\r\n\t    JackpotGame.SpinPreRollSymbolCount = 8;\r\n\t    JackpotGame.SpinPostRollDuration = 360;\r\n\t    JackpotGame.SpinPostRollSymbolCount = 12;\r\n\t    return JackpotGame;\r\n\t}());\r\n\texports.JackpotGame = JackpotGame;\r\n\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AmbientBackground = (function () {\r\n\t    function AmbientBackground() {\r\n\t    }\r\n\t    AmbientBackground.changeAmbientBackground = function (newBackgroundName, duration, delay) {\r\n\t        if (duration === void 0) { duration = 200; }\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        var base = document.getElementById(\"ambientBackgroundBase\");\r\n\t        var transition = document.getElementById(\"ambientBackgroundTransition\");\r\n\t        if (base && transition) {\r\n\t            if (!transition.classList.contains(newBackgroundName)) {\r\n\t                transition.classList.remove(\"show\");\r\n\t                base.className = transition.className;\r\n\t                transition.style.transitionDuration = duration + \"ms\";\r\n\t                transition.style.transitionDelay = delay + \"ms\";\r\n\t                transition.className = \"\";\r\n\t                transition.offsetWidth;\r\n\t                transition.classList.add(newBackgroundName, \"show\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AmbientBackground.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Scaling\", s);\r\n\t        }\r\n\t    };\r\n\t    return AmbientBackground;\r\n\t}());\r\n\texports.AmbientBackground = AmbientBackground;\r\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar Focus = (function () {\r\n\t    function Focus() {\r\n\t    }\r\n\t    Focus.focus = function () {\r\n\t        window.onblur = Focus.onBlur;\r\n\t        window.onfocus = Focus.onFocus;\r\n\t        window.onclick = Focus.onClick;\r\n\t        window.addEventListener(\"fullscreenchange\", Focus.onFullscreenChange.bind(this));\r\n\t    };\r\n\t    Focus.onClick = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration &&\r\n\t            AppContext_1.AppContext.gameConfiguration.FullscreenOnClick &&\r\n\t            !Scaling_1.Scaling.IsIOs &&\r\n\t            !neo_games_1.Platforms.Platforms.handleFullscreen) {\r\n\t            if (document.body.requestFullscreen) {\r\n\t                document.body.requestFullscreen();\r\n\t            }\r\n\t            else if (document.body.webkitRequestFullscreen) {\r\n\t                document.body.webkitRequestFullscreen();\r\n\t            }\r\n\t        }\r\n\t        if (!Focus.clicked) {\r\n\t            Focus.clicked = true;\r\n\t        }\r\n\t    };\r\n\t    Focus.onFullscreenChange = function (e) {\r\n\t        neo_games_1.Platforms.Platforms.fullscreen(document.fullscreenElement != null);\r\n\t    };\r\n\t    Focus.onFocus = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration && AppContext_1.AppContext.gameConfiguration.MuteOnLostFocus) {\r\n\t            PIXI.sound.unmuteAll();\r\n\t        }\r\n\t    };\r\n\t    Focus.onBlur = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration && AppContext_1.AppContext.gameConfiguration.MuteOnLostFocus) {\r\n\t            PIXI.sound.muteAll();\r\n\t        }\r\n\t    };\r\n\t    Focus.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Focus\", s);\r\n\t        }\r\n\t    };\r\n\t    Focus.clicked = false;\r\n\t    return Focus;\r\n\t}());\r\n\texports.Focus = Focus;\r\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar XmlResource_1 = __webpack_require__(66);\r\n\tvar SoundManager_1 = __webpack_require__(41);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar CanvasManager_1 = __webpack_require__(68);\r\n\tvar ConfigurationManager_1 = __webpack_require__(70);\r\n\tvar HtmlManager_1 = __webpack_require__(71);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionManager_1 = __webpack_require__(120);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar DOCUMENT_TYPE = \"document\";\r\n\tvar PIXI_EVENTS = {\r\n\t    Load: \"load\",\r\n\t    Error: \"error\",\r\n\t    Complete: \"complete\",\r\n\t};\r\n\tvar LOADJS_EVENTS = {\r\n\t    FileLoad: \"fileload\",\r\n\t    Complete: \"complete\",\r\n\t    Progress: \"progress\",\r\n\t    Error: \"error\",\r\n\t};\r\n\tvar RESOURCE_FLAGS = {\r\n\t    Gamble: \"G\",\r\n\t};\r\n\tvar PreloaderProvider = (function (_super) {\r\n\t    __extends(PreloaderProvider, _super);\r\n\t    function PreloaderProvider() {\r\n\t        _super.call(this);\r\n\t        this._resourceLoader = new PIXIResourceLoader(false);\r\n\t        this._audioResourceLoader = new PIXIResourceLoader(true);\r\n\t    }\r\n\t    Object.defineProperty(PreloaderProvider.prototype, \"resourceLoader\", {\r\n\t        get: function () {\r\n\t            return this._resourceLoader;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(PreloaderProvider.prototype, \"audioResourceLoader\", {\r\n\t        get: function () {\r\n\t            return this._audioResourceLoader;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    PreloaderProvider.addLoadingElementFunction = function (fnc) {\r\n\t        PreloaderProvider._loadingElements.push(fnc);\r\n\t    };\r\n\t    PreloaderProvider.isGroupLoaded = function (group) {\r\n\t        return PreloaderProvider._loadedGroups.indexOf(group) != -1;\r\n\t    };\r\n\t    PreloaderProvider.prototype.cleanup = function () {\r\n\t        this._resourceLoader = null;\r\n\t        this._audioResourceLoader = null;\r\n\t        XmlResource_1.XmlResource.cleanup();\r\n\t        StyleManager_1.StyleManager.cleanup();\r\n\t    };\r\n\t    PreloaderProvider.prototype.prepareFileList = function (resources) {\r\n\t        var _this = this;\r\n\t        if (resources) {\r\n\t            var gambleIsDisabled = !AppContext_1.AppContext.gameDefinition.Gamble;\r\n\t            neo_common_1.lodash.remove(resources, function (resource) {\r\n\t                var gambleResource = _this.resourceHasFlag(resource, RESOURCE_FLAGS.Gamble);\r\n\t                var removeRes = gambleResource && gambleIsDisabled;\r\n\t                if (false) {\r\n\t                    if (removeRes) {\r\n\t                        neo_common_1.Logger.debugGroup(\"Preloader\", \"Gamble disabled -> removing resource path '\" + resource.path + \"' (because has gamble flag) from file list to be loaded.\");\r\n\t                    }\r\n\t                }\r\n\t                return removeRes;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.loadCompleted = function () {\r\n\t        for (var i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n\t            var fnc = PreloaderProvider._loadingElements[i];\r\n\t            if (fnc != null) {\r\n\t                fnc.onLoadCompleted(neo_common_1.PreloaderInfo.instance.loadSucceed);\r\n\t            }\r\n\t        }\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            resolve();\r\n\t        });\r\n\t    };\r\n\t    PreloaderProvider.prototype.onUpdateProgress = function (progress) {\r\n\t        neo_games_1.Platforms.Platforms.loadProgress(progress);\r\n\t        for (var i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n\t            var fnc = PreloaderProvider._loadingElements[i];\r\n\t            if (fnc != null) {\r\n\t                fnc.onProgressUpdate(progress);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.loadGroupCompleted = function (group) {\r\n\t        neo_common_1.Logger.debugGroup(\"loadGroupCompleted\", \"Loaded group: \" + group);\r\n\t        if (PreloaderProvider._loadedGroups.indexOf(group) == -1) {\r\n\t            PreloaderProvider._loadedGroups.push(group);\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.handleGroupError = function (error, group) {\r\n\t    };\r\n\t    PreloaderProvider.prototype.parseCurrentElements = function () {\r\n\t        var xmlItems = XmlResource_1.XmlResource.Items;\r\n\t        if (xmlItems != null && xmlItems.length > 0) {\r\n\t            var tempElements = neo_common_1.lodash.map(xmlItems, function (item) {\r\n\t                var el = item.documentElement;\r\n\t                var prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n\t                if (prio === -1) {\r\n\t                    if (false) {\r\n\t                        neo_common_1.Logger.errorGroup(\"Preloader\", \"Element does not have \\\"Priority\\\" attr!\");\r\n\t                    }\r\n\t                }\r\n\t                return { element: el, priority: prio };\r\n\t            });\r\n\t            var elements = neo_common_1.lodash.map(neo_common_1.lodash.orderBy(tempElements, function (item) { return item.priority; }, \"desc\"), function (x) { return x.element; });\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements started: \" + new Date().toString());\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                ConfigurationManager_1.ConfigurationManager.parseElements(element);\r\n\t                SoundManager_1.SoundManager.parseElements(element);\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                StyleManager_1.StyleManager.parseElements(element);\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                ActionManager_1.ActionManager.parseActionSets(element);\r\n\t            }\r\n\t            document.body.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                CanvasManager_1.CanvasManager.parseElements(element);\r\n\t                HtmlManager_1.HtmlManager.parseElements(element);\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements ended: \" + new Date().toString());\r\n\t            }\r\n\t        }\r\n\t        XmlResource_1.XmlResource.emptyItems();\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources ended.\");\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.parseElements = function () {\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources started\");\r\n\t            }\r\n\t            var xmlItems = XmlResource_1.XmlResource.Items;\r\n\t            if (xmlItems != null && xmlItems.length > 0) {\r\n\t                var tempElements = neo_common_1.lodash.map(xmlItems, function (item) {\r\n\t                    var el = item.documentElement;\r\n\t                    var prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n\t                    if (prio === -1) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.errorGroup(\"Preloader\", \"Element does not have \\\"Priority\\\" attr!\");\r\n\t                        }\r\n\t                    }\r\n\t                    return { element: el, priority: prio };\r\n\t                });\r\n\t                var elements = neo_common_1.lodash.map(neo_common_1.lodash.orderBy(tempElements, function (item) { return item.priority; }, \"desc\"), function (x) { return x.element; });\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements started: \" + new Date().toString());\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    ConfigurationManager_1.ConfigurationManager.parseElements(element);\r\n\t                    SoundManager_1.SoundManager.parseElements(element);\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    StyleManager_1.StyleManager.parseElements(element);\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    ActionManager_1.ActionManager.parseActionSets(element);\r\n\t                }\r\n\t                document.body.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    CanvasManager_1.CanvasManager.parseElements(element);\r\n\t                    HtmlManager_1.HtmlManager.parseElements(element);\r\n\t                }\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements ended: \" + new Date().toString());\r\n\t                }\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources ended.\");\r\n\t            }\r\n\t            resolve();\r\n\t        });\r\n\t    };\r\n\t    PreloaderProvider._loadingElements = [];\r\n\t    PreloaderProvider._loadedGroups = [];\r\n\t    return PreloaderProvider;\r\n\t}(neo_common_1.PreloaderProviderBase));\r\n\texports.PreloaderProvider = PreloaderProvider;\r\n\tvar PIXIResourceLoader = (function (_super) {\r\n\t    __extends(PIXIResourceLoader, _super);\r\n\t    function PIXIResourceLoader(audio) {\r\n\t        _super.call(this, audio);\r\n\t        this.loader = new PIXI.loaders.Loader();\r\n\t        this._hasPreloaderVersionId = null;\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._resourcesWithNoId = {};\r\n\t        this.handleBeforeLoad = this.handleBeforeLoad.bind(this);\r\n\t        this.handleLoad = this.handleLoad.bind(this);\r\n\t        this.handleError = this.handleError.bind(this);\r\n\t        this.handleComplete = this.handleComplete.bind(this);\r\n\t        this.handleGroupComplete = this.handleGroupComplete.bind(this);\r\n\t        this.updateTextureAfterLoad = this.updateTextureAfterLoad.bind(this);\r\n\t    }\r\n\t    PIXIResourceLoader.prototype.cleanup = function () {\r\n\t        this._loadCompletedCallback = null;\r\n\t        this._updatedTextures = null;\r\n\t        this._preloaderVersionId = null;\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._resourcesWithNoId = null;\r\n\t        this.loader.reset();\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.xmlsResourceLoaded = function (document, resource) {\r\n\t        var acceptedAsXmlResource = document && document.documentElement.nodeName === XmlResource_1.XmlResource.Root;\r\n\t        if (false) {\r\n\t            var extra = acceptedAsXmlResource ? \" and is accepted as xml resource for app\" : \"\";\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", (\"Resource \\\"\" + resource.path + \"\\\" is loaded as xml document\") + extra);\r\n\t        }\r\n\t        if (acceptedAsXmlResource) {\r\n\t            XmlResource_1.XmlResource.add(document);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.beforeResourcesLoad = function () {\r\n\t        this.loader.reset();\r\n\t        this._updatedTextures = {};\r\n\t        this.loader.use(this.updateTextureAfterLoad);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.updateTextureAfterLoad = function (resource, next) {\r\n\t        if (resource.data && resource.isImage) {\r\n\t            if (resource.texture && resource.texture.baseTexture && resource.texture.baseTexture.hasLoaded) {\r\n\t                var imageUrl = resource.texture.baseTexture.imageUrl;\r\n\t                var noId = this._resourcesWithNoId.hasOwnProperty(imageUrl);\r\n\t                if (!this._updatedTextures.hasOwnProperty(imageUrl)) {\r\n\t                    if (noId) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource '\" + imageUrl + \"' has no 'id' assigned and will not be pushed to webgl cache\");\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (resource.name.substr(0, 3) === \"ANI\" || resource.name.substr(0, 5) === \"GROUP\") {\r\n\t                            StageController_1.StageController.updateTexture(resource.texture.baseTexture);\r\n\t                            this._updatedTextures[imageUrl] = true;\r\n\t                        }\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(\"Preloader\", \"Updated texture '\" + imageUrl + \"' to webgl cache\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        try {\r\n\t            next();\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._loadCompletedCallback(e);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleBeforeLoad = function (resource, next) {\r\n\t        if (this._hasPreloaderVersionId) {\r\n\t            var oldurl = resource.url;\r\n\t            resource.url = neo_common_1.UriHelper.setTimeStamp(resource.url, this._preloaderVersionId);\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource url \\\"\" + oldurl + \"\\\" changed to non-cached url \\\"\" + resource.url + \"\\\"\");\r\n\t            }\r\n\t        }\r\n\t        try {\r\n\t            next();\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._loadCompletedCallback(e);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleLoad = function (loader, resource) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource \\\"\" + resource.url + \"\\\" [\" + resource.xhrType + \"] [\" + this.preloader.progressPercent + \" %]\");\r\n\t        }\r\n\t        if (resource.xhrType === DOCUMENT_TYPE) {\r\n\t            var xmlRoot = resource.data.documentElement.nodeName;\r\n\t            if (xmlRoot === XmlResource_1.XmlResource.Root) {\r\n\t                throw new Error(\"Should not be there!\");\r\n\t            }\r\n\t        }\r\n\t        this._loadSingleCompletedCallback(false);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleError = function (error, loader, resource) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.errorGroup(\"Preloader\", \"Resource load error: \" + resource.url);\r\n\t        }\r\n\t        this._loadingErrorCount++;\r\n\t        this._loadingErrorFiles.push(resource.url);\r\n\t        this._loadSingleCompletedCallback(\"Failed to load \" + resource.url + \" resource!\");\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleComplete = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Completed PIXI resource load\");\r\n\t        }\r\n\t        if (this.audio) {\r\n\t            for (var key in this.loader.resources) {\r\n\t                if (key.indexOf(\"_meta\") !== -1) {\r\n\t                    var sound = key.substr(0, key.length - 5);\r\n\t                    if (PIXI.sound.exists(sound)) {\r\n\t                        var soundSprite = PIXI.sound.find(sound);\r\n\t                        if (neo_common_1.lodash.isEmpty(soundSprite.sprites)) {\r\n\t                            soundSprite.addSprites(this.loader.resources[key].data.spritemap);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleGroupComplete = function () {\r\n\t        this.loader.removeAllListeners(PIXI_EVENTS.Load);\r\n\t        this.loader.removeAllListeners(PIXI_EVENTS.Error);\r\n\t        this.handleComplete();\r\n\t        var loadError = this._loadingErrorCount === 0\r\n\t            ? null\r\n\t            : \"Failed to load \" + this._loadingErrorCount + \" resources!: \\n\" + this._loadingErrorFiles.join(\",\\n\");\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._loadCompletedCallback(loadError);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.loadAllGroupsCompleted = function () {\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.loadResources = function (resources, resolveSingleCallback, resolveCallback) {\r\n\t        if (StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.CanvasFallback) {\r\n\t                var loadingScreen = document.getElementById(\"loading\");\r\n\t                var element = document.getElementById(\"progressNumber\");\r\n\t                if (loadingScreen != null) {\r\n\t                    loadingScreen.classList.add(\"_error\");\r\n\t                }\r\n\t                if (element != null) {\r\n\t                    element.innerHTML = \"WebGL error. Please contact support.\";\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._loadSingleCompletedCallback = resolveSingleCallback;\r\n\t        this._loadCompletedCallback = resolveCallback;\r\n\t        this._preloaderVersionId = this.preloader.versionId;\r\n\t        this._hasPreloaderVersionId = !neo_common_1.StringUtils.isNullOrEmpty(this._preloaderVersionId);\r\n\t        for (var i = 0; i < resources.length; i++) {\r\n\t            var resource = resources[i];\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(resource.id)) {\r\n\t                this.loader.add(resource.path);\r\n\t                this._resourcesWithNoId[resource.path] = true;\r\n\t            }\r\n\t            else {\r\n\t                this.loader.add(resource.id, resource.path);\r\n\t            }\r\n\t        }\r\n\t        this.loader.pre(this.handleBeforeLoad);\r\n\t        this.loader.on(\"load\", this.handleLoad);\r\n\t        this.loader.on(\"error\", this.handleError);\r\n\t        this.loader.once(\"complete\", this.handleGroupComplete);\r\n\t        this.loader.load();\r\n\t    };\r\n\t    return PIXIResourceLoader;\r\n\t}(neo_common_1.PreloaderResourceLoader));\r\n\texports.PIXIResourceLoader = PIXIResourceLoader;\r\n\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar Resource_1 = __webpack_require__(67);\r\n\tvar XmlResource = (function (_super) {\r\n\t    __extends(XmlResource, _super);\r\n\t    function XmlResource() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(XmlResource, \"Items\", {\r\n\t        get: function () {\r\n\t            return XmlResource.items;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    XmlResource.add = function (doc) {\r\n\t        XmlResource.items.push(doc);\r\n\t    };\r\n\t    XmlResource.cleanup = function () {\r\n\t        if (XmlResource.items) {\r\n\t            XmlResource.items.length = 0;\r\n\t            XmlResource.items = null;\r\n\t        }\r\n\t    };\r\n\t    XmlResource.emptyItems = function () {\r\n\t        if (XmlResource.items) {\r\n\t            XmlResource.items = [];\r\n\t        }\r\n\t    };\r\n\t    XmlResource.Root = \"Elements\";\r\n\t    XmlResource.items = [];\r\n\t    return XmlResource;\r\n\t}(Resource_1.Resource));\r\n\texports.XmlResource = XmlResource;\r\n\n\n/***/ },\n/* 67 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar Resource = (function () {\r\n\t    function Resource() {\r\n\t    }\r\n\t    return Resource;\r\n\t}());\r\n\texports.Resource = Resource;\r\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionSet_1 = __webpack_require__(69);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar CanvasManager = (function () {\r\n\t    function CanvasManager() {\r\n\t    }\r\n\t    CanvasManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CanvasManager\", data);\r\n\t        }\r\n\t    };\r\n\t    CanvasManager.parseElements = function (startNode, parent) {\r\n\t        if (parent === void 0) { parent = null; }\r\n\t        var children = {};\r\n\t        if (!startNode) {\r\n\t            return children;\r\n\t        }\r\n\t        CanvasManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.DisplayObject);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var element = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            element.create(node);\r\n\t            if (node.hasAttribute(\"LinkId\")) {\r\n\t                ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(\"LinkId\")] = element;\r\n\t            }\r\n\t            var noGamble = false;\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (node.getAttribute(\"Key\") === \"gamble\" && !AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t                    noGamble = true;\r\n\t                }\r\n\t            }\r\n\t            if (!noGamble) {\r\n\t                CanvasManager._addElementToParent(element, parent);\r\n\t                CanvasManager._handleElementController(node, element);\r\n\t            }\r\n\t            children[node.nodeName] = element;\r\n\t        });\r\n\t        return children;\r\n\t    };\r\n\t    CanvasManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = CanvasManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    CanvasManager._addElementToParent = function (element, parent) {\r\n\t        if (parent != null) {\r\n\t            parent.addChild(element);\r\n\t        }\r\n\t        else if (element.children.length > 0) {\r\n\t            StageController_1.StageController.addChild(element);\r\n\t        }\r\n\t    };\r\n\t    CanvasManager._handleElementController = function (node, element) {\r\n\t        var controllerAttribute = node.hasAttribute(\"Controller\") ? node.getAttribute(\"Controller\") : \"\";\r\n\t        if (controllerAttribute === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        var elementController = neo_common_1.EngineComponentFactory.get(controllerAttribute);\r\n\t        if (elementController != null) {\r\n\t            elementController.startInitialization(element);\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (!AppContext_1.AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n\t                    return;\r\n\t                }\r\n\t                ModuleManager_1.ModuleManager.registerGameModule(node.getAttribute(\"Key\"), elementController);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                CanvasManager.log(\"ERROR no controller with name: \" + controllerAttribute);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    return CanvasManager;\r\n\t}());\r\n\texports.CanvasManager = CanvasManager;\r\n\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ActionSet = (function () {\r\n\t    function ActionSet() {\r\n\t        this.actionElements = {};\r\n\t        this.cases = {};\r\n\t    }\r\n\t    ActionSet.prototype.RegisterActionSet = function (node) {\r\n\t        var _this = this;\r\n\t        ActionSet.getNodesList(node.firstElementChild)\r\n\t            .reverse()\r\n\t            .forEach(function (actionSetNode) {\r\n\t            switch (actionSetNode.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n\t                        .reverse()\r\n\t                        .forEach(function (elementNode) {\r\n\t                        _this.actionElements[elementNode.nodeName] = elementNode;\r\n\t                    });\r\n\t                    break;\r\n\t                case \"Actions\":\r\n\t                    ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n\t                        .reverse()\r\n\t                        .forEach(function (actionCase) {\r\n\t                        if (!actionCase.hasAttribute(exports.ActionSetAttributes.CASE)) {\r\n\t                            return;\r\n\t                        }\r\n\t                        if (_this.cases[actionCase.getAttribute(exports.ActionSetAttributes.CASE)] !== null) {\r\n\t                            _this.cases[actionCase.getAttribute(exports.ActionSetAttributes.CASE)] = actionCase;\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                _this.log(\"ERROR case \" +\r\n\t                                    actionCase.getAttribute(\"Case\") +\r\n\t                                    \" already exist in ActionSet \" +\r\n\t                                    node.nodeName);\r\n\t                            }\r\n\t                        }\r\n\t                    });\r\n\t                    break;\r\n\t            }\r\n\t        });\r\n\t        ActionSet.ActionSets[node.nodeName] = this;\r\n\t    };\r\n\t    ActionSet.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ActionSet.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    ActionSet.prototype.DispatchEvent = function (action) {\r\n\t        var _this = this;\r\n\t        ActionSet.getNodesList(this.cases[action].firstElementChild)\r\n\t            .reverse()\r\n\t            .forEach(function (elementNode) {\r\n\t            var linkedElement = _this.actionElements[elementNode.nodeName];\r\n\t            var classAttribute = linkedElement.hasAttribute(\"Class\") ? linkedElement.getAttribute(\"Class\") : \"\";\r\n\t            if (classAttribute === \"\") {\r\n\t                if (false) {\r\n\t                    _this.log(\"WARNING element with name: \" + linkedElement.nodeName + \" has no class\");\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t            if (!neo_common_1.EngineComponentFactory.isTypeOf(classAttribute, ComponentTypes_1.ComponentTypes.LinkedElement)) {\r\n\t                return;\r\n\t            }\r\n\t            var element = neo_common_1.EngineComponentFactory.get(classAttribute);\r\n\t            element.create(linkedElement, elementNode);\r\n\t        });\r\n\t    };\r\n\t    ActionSet.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.ActionSets = {};\r\n\t    ActionSet.ElementsToLink = {};\r\n\t    ActionSet = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.ActionSet)\r\n\t    ], ActionSet);\r\n\t    return ActionSet;\r\n\t}());\r\n\texports.ActionSet = ActionSet;\r\n\texports.ActionSetAttributes = {\r\n\t    CASE: \"Case\",\r\n\t};\r\n\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ConfigurationManager = (function () {\r\n\t    function ConfigurationManager() {\r\n\t    }\r\n\t    ConfigurationManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ConfigurationManager\", data);\r\n\t        }\r\n\t    };\r\n\t    ConfigurationManager.parseElements = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        ConfigurationManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) { return node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") === \"Configuration\"; })\r\n\t            .forEach(function (node) { return (Configuration_1.Configuration.Configurations[node.nodeName] = node); });\r\n\t    };\r\n\t    ConfigurationManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ConfigurationManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    return ConfigurationManager;\r\n\t}());\r\n\texports.ConfigurationManager = ConfigurationManager;\r\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GambleUserControls_1 = __webpack_require__(72);\r\n\tvar DesktopBaseUserControls_1 = __webpack_require__(83);\r\n\tvar MobileBaseUserControls_1 = __webpack_require__(115);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DesktopFreespinsUserControls_1 = __webpack_require__(116);\r\n\tvar MobileFreespinsUserControls_1 = __webpack_require__(119);\r\n\tvar HtmlManager = (function () {\r\n\t    function HtmlManager() {\r\n\t    }\r\n\t    HtmlManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"HtmlManager\", data);\r\n\t        }\r\n\t    };\r\n\t    HtmlManager.parseElements = function (startNode, parent) {\r\n\t        if (parent === void 0) { parent = null; }\r\n\t        var children = {};\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        HtmlManager.getNodesList(startNode.firstElementChild, [])\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.HtmlElement);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var element = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            var root = document.getElementById(\"root\");\r\n\t            var customRoot;\r\n\t            if (node.hasAttribute(\"RootId\")) {\r\n\t                customRoot = document.getElementById(node.getAttribute(\"RootId\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (!AppContext_1.AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n\t                    return;\r\n\t                }\r\n\t                if (element instanceof DesktopBaseUserControls_1.DesktopBaseUserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t                else if (element instanceof MobileBaseUserControls_1.MobileBaseUserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t                else if (element instanceof GambleUserControls_1.GambleUserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t                else if (element instanceof DesktopFreespinsUserControls_1.DesktopFreespinsUserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t                else if (element instanceof MobileFreespinsUserControls_1.MobileFreespinsUserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t            }\r\n\t            if (element.instance != null) {\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t                element.create(node);\r\n\t            }\r\n\t            else {\r\n\t                element.create(node);\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            children[node.nodeName] = element;\r\n\t        });\r\n\t        return children;\r\n\t    };\r\n\t    HtmlManager.getNodesList = function (node, nodeList) {\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = HtmlManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    return HtmlManager;\r\n\t}());\r\n\texports.HtmlManager = HtmlManager;\r\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar GambleActions_1 = __webpack_require__(77);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GambleController_1 = __webpack_require__(78);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar Color = neo_games_1.Communication.Game.Color;\r\n\tvar GambleUserControls = (function (_super) {\r\n\t    __extends(GambleUserControls, _super);\r\n\t    function GambleUserControls() {\r\n\t        _super.call(this, \"gamble\");\r\n\t        this._collectedWinValue = 0;\r\n\t        this._collectDelay = FrameTimer_1.CreateFrameTimer(\"collectDelay\");\r\n\t        this._collectDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outro.bind(this));\r\n\t        this._allowStart = true;\r\n\t    }\r\n\t    GambleUserControls.prototype.ticker = function (state) {\r\n\t        if (state === void 0) { state = \"\"; }\r\n\t        if (this._gambleTickerDefault != null) {\r\n\t            this._gambleTickerDefault.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerHalveLimit != null) {\r\n\t            this._gambleTickerHalveLimit.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerSoftLimit != null) {\r\n\t            this._gambleTickerSoftLimit.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerGameLimit != null) {\r\n\t            this._gambleTickerGameLimit.style.display = \"none\";\r\n\t        }\r\n\t        switch (state) {\r\n\t            case \"default\":\r\n\t                if (this._gambleTickerDefault != null) {\r\n\t                    this._gambleTickerDefault.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"halvelimit\":\r\n\t                if (this._gambleTickerHalveLimit != null) {\r\n\t                    this._gambleTickerHalveLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"softLimit\":\r\n\t                if (this._gambleTickerSoftLimit != null) {\r\n\t                    this._gambleTickerSoftLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"limit\":\r\n\t                if (this._gambleTickerGameLimit != null) {\r\n\t                    this._gambleTickerGameLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._gambleTickerDefault = document.getElementById(\"gambleTickerDefault\");\r\n\t        this._gambleTickerHalveLimit = document.getElementById(\"gambleTickerHalveLimit\");\r\n\t        this._gambleTickerSoftLimit = document.getElementById(\"gambleTickerSoftLimit\");\r\n\t        this._gambleTickerGameLimit = document.getElementById(\"gambleTickerGameLimit\");\r\n\t        this._screen = document.getElementById(\"screen\");\r\n\t        this.ticker(\"default\");\r\n\t    };\r\n\t    GambleUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(GambleController_1.GambleController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.SelectReceived, this.selectReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.HalveReceived, this.halveReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.Lose, this.lose.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.OutroFinished, this.outroFinished.bind(this));\r\n\t    };\r\n\t    GambleUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleRed] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleBlack] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleHalve] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleCollect] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.initReceived = function () {\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t    };\r\n\t    GambleUserControls.prototype.collectReceived = function () {\r\n\t        this.ticker(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, \"\");\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._collectedWinValue,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        this._collectDelay.start(30);\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._collectedWinValue.toString());\r\n\t        }\r\n\t        this.changeWinBox(true);\r\n\t    };\r\n\t    GambleUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.startReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.startGamble();\r\n\t    };\r\n\t    GambleUserControls.prototype.selectReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse[\"paidWin\"] != null) {\r\n\t            this._collectedWinValue = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gambleResponse.currentWin, GameManager_1.GameManager.gambleResponse[\"paidWin\"]));\r\n\t        }\r\n\t        else {\r\n\t            this._collectedWinValue = GameManager_1.GameManager.gambleResponse.currentWin;\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.halveReceived = function () {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.dispatchAction = function (action) {\r\n\t        _super.prototype.dispatchAction.call(this, action);\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case GambleActions_1.GambleActions.ActionGambleStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleHalve:\r\n\t                    this.halve();\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleBlack:\r\n\t                    this.select(Color.Black);\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleRed:\r\n\t                    this.select(Color.Red);\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.collect = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse[\"paidWin\"] != null) {\r\n\t            this._collectedWinValue = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gambleResponse.currentWin, GameManager_1.GameManager.gambleResponse[\"paidWin\"]));\r\n\t        }\r\n\t        else {\r\n\t            this._collectedWinValue = GameManager_1.GameManager.gambleResponse.currentWin;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Gamble);\r\n\t    };\r\n\t    GambleUserControls.prototype.start = function () {\r\n\t        this._allowStart = false;\r\n\t        this._collectedWinValue = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        ModuleManager_1.ModuleManager.disableBase();\r\n\t        this.disable();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this._controller.start();\r\n\t    };\r\n\t    GambleUserControls.prototype.select = function (color) {\r\n\t        this.ticker(\"\");\r\n\t        this.disable();\r\n\t        this._controller.select(color);\r\n\t    };\r\n\t    GambleUserControls.prototype.halve = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.gambleResponse.currentWin / 2);\r\n\t        }\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.halve();\r\n\t    };\r\n\t    GambleUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t                GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t                GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, \"\");\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.allWinsFinished = function () {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.lose = function () {\r\n\t        this.outro();\r\n\t        if (this._collectedWinValue > 0) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._collectedWinValue.toString());\r\n\t            }\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._collectedWinValue,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t    };\r\n\t    GambleUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        this.prepareNewGameRound();\r\n\t        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.add(\"_inGamble\");\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this._controller.initIntro();\r\n\t    };\r\n\t    GambleUserControls.prototype.intro = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.add(\"_inGamble\");\r\n\t        }\r\n\t        this._controller.intro();\r\n\t    };\r\n\t    GambleUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.outro = function () {\r\n\t        if (this._screen != null && this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.remove(\"_inGamble\");\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this._collectDelay.stop();\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    GambleUserControls.prototype.outroFinished = function () {\r\n\t        this._allowStart = true;\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base);\r\n\t    };\r\n\t    GambleUserControls.prototype.prepareNewGameRound = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            this.limit();\r\n\t            this.ticker(\"limit\");\r\n\t        }\r\n\t        else {\r\n\t            var softLimit = false;\r\n\t            if (GameManager_1.GameManager.gambleResponse.colorWin === 0) {\r\n\t                softLimit = true;\r\n\t            }\r\n\t            if (softLimit) {\r\n\t                if (GameManager_1.GameManager.gambleResponse.halveEnabled) {\r\n\t                    this.ticker(\"softLimit\");\r\n\t                }\r\n\t                else {\r\n\t                    this.ticker(\"limit\");\r\n\t                }\r\n\t            }\r\n\t            else if (GameManager_1.GameManager.gambleResponse != null && !GameManager_1.GameManager.gambleResponse.halveEnabled) {\r\n\t                this.ticker(\"halveLimit\");\r\n\t            }\r\n\t            else {\r\n\t                this.ticker(\"default\");\r\n\t            }\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleRed] = !softLimit,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleBlack] = !softLimit,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleHalve] = GameManager_1.GameManager.gambleResponse.halveEnabled,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleCollect] = true,\r\n\t                _a\r\n\t            ));\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleRed] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleBlack] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleHalve] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleCollect] = true,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.enable = function () {\r\n\t        this.actions.changeActionState(GambleActions_1.GambleActions.ActionGambleStart, this._allowStart);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    GambleUserControls.prototype.disable = function () {\r\n\t        this._actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    GambleUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], GambleUserControls);\r\n\t    return GambleUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.GambleUserControls = GambleUserControls;\r\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ActionSet_1 = __webpack_require__(76);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar UserControls = (function (_super) {\r\n\t    __extends(UserControls, _super);\r\n\t    function UserControls(key) {\r\n\t        _super.call(this);\r\n\t        this._key = \"\";\r\n\t        this._key = key;\r\n\t        this._actions = new ActionSet_1.ActionSet(this._key + \".actions\", neo_common_1.EngineComponentFactory.getComponentName(this));\r\n\t    }\r\n\t    Object.defineProperty(UserControls.prototype, \"actions\", {\r\n\t        get: function () {\r\n\t            return this._actions;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    UserControls.prototype.getAllActions = function () {\r\n\t        return this._actions.getAllActions();\r\n\t    };\r\n\t    UserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    UserControls.prototype.addController = function (controller) { };\r\n\t    UserControls.prototype.initReceived = function () {\r\n\t        this._uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n\t        this._collectedWin = document.getElementById(\"collectedWin\");\r\n\t    };\r\n\t    UserControls.prototype.collectReceived = function () { };\r\n\t    UserControls.prototype.dispatchAction = function (action) { };\r\n\t    UserControls.prototype.collect = function () { };\r\n\t    UserControls.prototype.initIntro = function () { };\r\n\t    UserControls.prototype.flashBet = function () {\r\n\t        var _this = this;\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            this._betValue.classList.remove(\"flash\");\r\n\t            setTimeout(function () { return _this._betValue.classList.add(\"flash\"); }, 33);\r\n\t            setTimeout(function () { return _this._betValue.classList.remove(\"flash\"); }, 2000);\r\n\t            PlayList_1.PlayList.play(\"SND_LowCredit\");\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.initNewBet = function (animate) {\r\n\t        var _this = this;\r\n\t        if (animate === void 0) { animate = true; }\r\n\t        if (this._betLabel == null) {\r\n\t            this._betLabel = document.getElementById(\"betLabel\");\r\n\t        }\r\n\t        if (this._freeBetLabel == null) {\r\n\t            this._freeBetLabel = document.getElementById(\"freeBetLabel\");\r\n\t        }\r\n\t        if (this._betLabelFS == null) {\r\n\t            this._betLabelFS = document.getElementById(\"betLabelFS\");\r\n\t        }\r\n\t        if (this._freeBetLabelFS == null) {\r\n\t            this._freeBetLabelFS = document.getElementById(\"freeBetLabelFS\");\r\n\t        }\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betPlus == null) {\r\n\t            this._betPlus = document.getElementById(\"betPlus\");\r\n\t        }\r\n\t        if (this._betMinus == null) {\r\n\t            this._betMinus = document.getElementById(\"betMinus\");\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            if (this._betLabel != null && !this._betLabel.classList.contains(\"_hidden\")) {\r\n\t                this._betLabel.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._freeBetLabel != null) {\r\n\t                if (this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n\t                    this._freeBetLabel.classList.remove(\"_hidden\");\r\n\t                }\r\n\t                if (animate) {\r\n\t                    this._freeBetLabel.classList.remove(\"flash\");\r\n\t                    setTimeout(function () { return _this._freeBetLabel.classList.add(\"flash\"); }, 33);\r\n\t                    setTimeout(function () { return _this._freeBetLabel.classList.remove(\"flash\"); }, 2000);\r\n\t                }\r\n\t            }\r\n\t            if (this._betLabelFS != null && !this._betLabelFS.classList.contains(\"_hidden\")) {\r\n\t                this._betLabelFS.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._freeBetLabelFS != null) {\r\n\t                if (this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n\t                    this._freeBetLabelFS.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._freeBetLabel != null && !this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n\t                this._freeBetLabel.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._betLabel != null) {\r\n\t                if (this._betLabel.classList.contains(\"_hidden\")) {\r\n\t                    this._betLabel.classList.remove(\"_hidden\");\r\n\t                }\r\n\t                if (animate) {\r\n\t                    this._betLabel.classList.remove(\"flash\");\r\n\t                    setTimeout(function () { return _this._betLabel.classList.add(\"flash\"); }, 33);\r\n\t                    setTimeout(function () { return _this._betLabel.classList.remove(\"flash\"); }, 2000);\r\n\t                }\r\n\t            }\r\n\t            if (this._freeBetLabelFS != null && !this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n\t                this._freeBetLabelFS.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._betLabelFS != null) {\r\n\t                if (this._betLabelFS.classList.contains(\"_hidden\")) {\r\n\t                    this._betLabelFS.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            if (animate) {\r\n\t                this._betValue.classList.remove(\"flash\");\r\n\t                setTimeout(function () { return _this._betValue.classList.add(\"flash\"); }, 33);\r\n\t                setTimeout(function () { return _this._betValue.classList.remove(\"flash\"); }, 2000);\r\n\t            }\r\n\t        }\r\n\t        if (BetManager_1.BetManager.TotalBets.length > 1) {\r\n\t            if (this._betPlus != null && this._betPlus.classList.contains(\"_invisible\")) {\r\n\t                this._betPlus.classList.remove(\"_invisible\");\r\n\t            }\r\n\t            if (this._betMinus != null && this._betMinus.classList.contains(\"_invisible\")) {\r\n\t                this._betMinus.classList.remove(\"_invisible\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._betPlus != null && !this._betPlus.classList.contains(\"_invisible\")) {\r\n\t                this._betPlus.classList.add(\"_invisible\");\r\n\t            }\r\n\t            if (this._betMinus != null && !this._betMinus.classList.contains(\"_invisible\")) {\r\n\t                this._betMinus.classList.add(\"_invisible\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.changeBetColor = function (green) {\r\n\t        if (green === void 0) { green = false; }\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            if (green) {\r\n\t                this._betValue.style.color = \"#39ff04\";\r\n\t            }\r\n\t            else {\r\n\t                this._betValue.style.color = \"#ffffff\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.playCollectSound = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod !== \"cumulative\") {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t            }\r\n\t            else if (!FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.cycleHelp = function () { };\r\n\t    UserControls.prototype.changeWinBox = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._uncollectedWin != null) {\r\n\t            if (collect) {\r\n\t                if (!this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._uncollectedWin.classList.add(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t                    this._uncollectedWin.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._collectedWin != null) {\r\n\t            if (collect) {\r\n\t                if (this._collectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._collectedWin.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this._collectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._collectedWin.classList.add(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.restoreGameRound = function () { };\r\n\t    UserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], UserControls);\r\n\t    return UserControls;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.UserControls = UserControls;\r\n\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(75);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar HtmlManager_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar HtmlContainerElement = (function (_super) {\r\n\t    __extends(HtmlContainerElement, _super);\r\n\t    function HtmlContainerElement() {\r\n\t        _super.call(this);\r\n\t        this.childrenHolderClass = \"\";\r\n\t        this.childrenClass = \"\";\r\n\t        this.recalculateHeight = false;\r\n\t    }\r\n\t    HtmlContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"id\")) {\r\n\t            HtmlController_1.HtmlController.ContainerElementsById[node.getAttribute(\"id\")] = this;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            this.style = StyleManager_1.StyleManager.HtmlStyles[node.getAttribute(\"Style\")];\r\n\t            if (this.style != null) {\r\n\t                this.childs = HtmlManager_1.HtmlManager.parseElements(this.style.node, this);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.logError(\"ERROR no style with name \" + node.getAttribute(\"Style\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.childs = HtmlManager_1.HtmlManager.parseElements(node, this);\r\n\t        }\r\n\t        if (this.childs == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING html container element with name \" + node.nodeName + \" has no children\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"OnOver\")) {\r\n\t            if (node.hasAttribute(\"OnOverAction\")) {\r\n\t                var actionEnabled = HtmlController_1.HtmlController.Configurations[node.getAttribute(\"OnOverAction\")];\r\n\t                if (actionEnabled) {\r\n\t                    this._overId = node.getAttribute(\"OnOver\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._overId = node.getAttribute(\"OnOver\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"ChildrenHolderClass\")) {\r\n\t            this.childrenHolderClass = node.getAttribute(\"ChildrenHolderClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"ChildrenClass\")) {\r\n\t            this.childrenClass = node.getAttribute(\"ChildrenClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RecalculateHeight\")) {\r\n\t            this.recalculateHeight = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"RecalculateHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"OnClick\")) {\r\n\t            if (node.hasAttribute(\"OnClickAction\")) {\r\n\t                this._clickId = node.getAttribute(\"OnClick\");\r\n\t                this.instance.addEventListener(HtmlContainerElement.CustomClick, this.onCustomClick.bind(this));\r\n\t            }\r\n\t        }\r\n\t        if (this._overId != null) {\r\n\t            this.instance.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this.instance.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ActionsHolder\")) {\r\n\t            HtmlController_1.HtmlController.registerActionsHoldersElement(node.getAttribute(\"ActionsHolder\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"UIDispatcher\")) {\r\n\t            HtmlController_1.HtmlController.registerUiDispatchElement(node.getAttribute(\"UIDispatcher\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"UIActionDispatcher\")) {\r\n\t            HtmlController_1.HtmlController.registerUiActionDispatchElement(node.getAttribute(\"UIActionDispatcher\"), this);\r\n\t        }\r\n\t        var touchScroll = false;\r\n\t        if (node.hasAttribute(\"TouchScroll\")) {\r\n\t            touchScroll = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"TouchScroll\"));\r\n\t        }\r\n\t        if (touchScroll) {\r\n\t            this.enableScrollOnTouchmove();\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.enableScrollOnTouchmove = function () {\r\n\t        var allowScrollUp = true;\r\n\t        var allowScrollDown = true;\r\n\t        var lastY = 0;\r\n\t        var self = this;\r\n\t        this.instance.addEventListener(\"touchstart\", function (event) {\r\n\t            allowScrollUp = this.scrollTop > 0;\r\n\t            allowScrollDown = this.scrollTop < this.scrollHeight - this.clientHeight;\r\n\t            lastY = event.touches[0].pageY;\r\n\t        }, true);\r\n\t        this.instance.addEventListener(\"touchmove\", function (event) {\r\n\t            if (event.touches.length === 1) {\r\n\t                var up = event.touches[0].pageY > lastY;\r\n\t                var down = !up;\r\n\t                lastY = event.touches[0].pageY;\r\n\t                if ((up && allowScrollUp) || (down && allowScrollDown)) {\r\n\t                    event.stopPropagation();\r\n\t                }\r\n\t                else {\r\n\t                    event.preventDefault();\r\n\t                }\r\n\t            }\r\n\t        }, true);\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onOver = function () {\r\n\t        if (this._overId != null) {\r\n\t            var element = document.getElementById(this._overId);\r\n\t            if (element != null) {\r\n\t                element.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onOut = function () {\r\n\t        if (this._overId != null) {\r\n\t            var element = document.getElementById(this._overId);\r\n\t            if (element != null) {\r\n\t                element.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onCustomClick = function () {\r\n\t        if (this._clickId != null && HtmlController_1.HtmlController.ContainerElementsById[this._clickId] != null) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[this._clickId];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (element.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t                    if (element.recalculateHeight) {\r\n\t                        element.recalculateChildrenHeight(element);\r\n\t                    }\r\n\t                    element.reset();\r\n\t                    element.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    if (element.recalculateHeight) {\r\n\t                        element.instance.removeAttribute(\"style\");\r\n\t                    }\r\n\t                    element.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t                if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n\t                    document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.recalculateChildrenHeight = function (element) {\r\n\t        if (element.instance != null && element.childrenHolderClass != \"\" && element.childrenClass != \"\") {\r\n\t            var holders = element.instance.getElementsByClassName(element.childrenHolderClass);\r\n\t            if (holders[0] != null) {\r\n\t                var paddingTop = parseInt(window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-top\"));\r\n\t                var paddingBottom = parseInt(window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-bottom\"));\r\n\t                var holdersChildren = holders[0].getElementsByClassName(element.childrenClass);\r\n\t                if (holdersChildren != null && holdersChildren.length > 0) {\r\n\t                    var height = paddingTop + paddingBottom;\r\n\t                    for (var i = 0; i < holdersChildren.length; i++) {\r\n\t                        var itemHeight = parseInt(window.getComputedStyle(holdersChildren[i], null).getPropertyValue(\"height\"));\r\n\t                        height += itemHeight;\r\n\t                    }\r\n\t                    element.instance.style.height = height + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.changeState = function (value) {\r\n\t        if (this.instance != null) {\r\n\t            if (value) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            else {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                if (this._clickId != null && HtmlController_1.HtmlController.ContainerElementsById[this._clickId] != null) {\r\n\t                    var element = HtmlController_1.HtmlController.ContainerElementsById[this._clickId];\r\n\t                    if (element != null && element.instance != null) {\r\n\t                        if (!element.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            if (element.recalculateHeight) {\r\n\t                                element.instance.removeAttribute(\"style\");\r\n\t                            }\r\n\t                            element.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.reset = function () { };\r\n\t    HtmlContainerElement.Over = \"mouseover\";\r\n\t    HtmlContainerElement.Out = \"mouseout\";\r\n\t    HtmlContainerElement.TouchStart = \"touchstart\";\r\n\t    HtmlContainerElement.TouchEnd = \"touchend\";\r\n\t    HtmlContainerElement.CustomClick = \"click\";\r\n\t    HtmlContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlContainerElement);\r\n\t    return HtmlContainerElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlContainerElement = HtmlContainerElement;\r\n\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar HtmlElement = (function () {\r\n\t    function HtmlElement(tagName) {\r\n\t        if (tagName === void 0) { tagName = \"div\"; }\r\n\t        if (tagName !== \"\") {\r\n\t            this.instance = document.createElement(tagName);\r\n\t        }\r\n\t    }\r\n\t    HtmlElement.prototype.create = function (node) {\r\n\t        if (node.hasAttribute(\"id\")) {\r\n\t            this.instance.id = node.getAttribute(\"id\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RidFilter\")) {\r\n\t            this.ridFilter = node.getAttribute(\"RidFilter\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RidType\")) {\r\n\t            this.ridType = node.getAttribute(\"RidType\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Rid\")) {\r\n\t            this.rid = node.getAttribute(\"Rid\");\r\n\t            HtmlController_1.HtmlController.RidElements.push(this);\r\n\t            this.setText();\r\n\t        }\r\n\t        if (node.hasAttribute(\"CssClass\")) {\r\n\t            this.instance.className = node.getAttribute(\"CssClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Data\")) {\r\n\t            this.data = node.getAttribute(\"Data\");\r\n\t            HtmlController_1.HtmlController.registerDataElement(node.getAttribute(\"Data\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Lang\") && this.instance != null && GameApp_1.GameApp.language != null) {\r\n\t            this.instance.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.setText = function (value) {\r\n\t        var text = \"\";\r\n\t        if (value != null) {\r\n\t            text = value;\r\n\t            this.currentValue = value;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.updateText = function () {\r\n\t        var text = \"\";\r\n\t        if (this.currentValue != null) {\r\n\t            text = this.currentValue;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlElement);\r\n\t    return HtmlElement;\r\n\t}());\r\n\texports.HtmlElement = HtmlElement;\r\n\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ActionSet = (function () {\r\n\t    function ActionSet(setName, owner) {\r\n\t        this._actions = {};\r\n\t        this._setName = setName;\r\n\t        this._owner = owner;\r\n\t        this._batchUpdatesActive = false;\r\n\t        this._readonly = false;\r\n\t        this.registerActions = this.registerActions.bind(this);\r\n\t        this.registerAction = this.registerAction.bind(this);\r\n\t        this.changeActionState = this.changeActionState.bind(this);\r\n\t        this.getActionState = this.getActionState.bind(this);\r\n\t        this.getAllActions = this.getAllActions.bind(this);\r\n\t        this.batchUpdates = this.batchUpdates.bind(this);\r\n\t        this.disableAllActions = this.disableAllActions.bind(this);\r\n\t        this.invokeOnChange = this.invokeOnChange.bind(this);\r\n\t    }\r\n\t    Object.defineProperty(ActionSet.prototype, \"onChange\", {\r\n\t        get: function () {\r\n\t            return this._onChange;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._onChange = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ActionSet.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(this._owner, (\"[\" + this._setName + \"] \") + s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.logError = function (s, e) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.errorGroup(this._owner, e, (\"[\" + this._setName + \"] \") + s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.invokeOnChange = function () {\r\n\t        if (this._onChange && !this._batchUpdatesActive) {\r\n\t            try {\r\n\t                this.onChange();\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (false) {\r\n\t                    this.logError(\"invokeOnChange\", e);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.checkForReadonly = function () {\r\n\t        if (this._readonly) {\r\n\t            throw new Error(\"ActionSet \\\"\" + this._owner + \"\\\" [\" + this._setName + \"] is readonly!\");\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.beginBatchUpdates = function () {\r\n\t        this.checkForReadonly();\r\n\t        if (this._batchUpdatesActive) {\r\n\t            throw new Error(\"\\\"\" + this._owner + \"\\\" [\" + this._setName + \"] Other batch updates is in pending state!\");\r\n\t        }\r\n\t        this._batchUpdatesActive = true;\r\n\t    };\r\n\t    ActionSet.prototype.endBatchUpdates = function (hasChanges) {\r\n\t        this.checkForReadonly();\r\n\t        this._batchUpdatesActive = false;\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(hasChanges)) {\r\n\t            hasChanges = true;\r\n\t        }\r\n\t        if (hasChanges) {\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.batchUpdates = function (updateFn) {\r\n\t        this.beginBatchUpdates();\r\n\t        var hasChanges;\r\n\t        try {\r\n\t            hasChanges = updateFn(this);\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(hasChanges);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.registerActions = function (actions) {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            for (var key in actions) {\r\n\t                if (actions.hasOwnProperty(key)) {\r\n\t                    this.registerAction(key, actions[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.registerAction = function (action, value) {\r\n\t        if (value === void 0) { value = false; }\r\n\t        this.checkForReadonly();\r\n\t        var notExist = neo_common_1.Utils.isNullOrUndefined(this._actions[action]);\r\n\t        if (notExist) {\r\n\t            this._actions[action] = value;\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not register action '\" + action + \"', action was already registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return notExist;\r\n\t    };\r\n\t    ActionSet.prototype.changeActionStates = function (actionsOrValue, actionNames) {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            var hasValue = typeof actionsOrValue === \"boolean\";\r\n\t            if (hasValue) {\r\n\t                for (var i = 0; i < actionNames.length; i++) {\r\n\t                    var action = actionNames[i];\r\n\t                    this.changeActionState(action, actionsOrValue);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                for (var key in actionsOrValue) {\r\n\t                    if (actionsOrValue.hasOwnProperty(key)) {\r\n\t                        this.changeActionState(key, actionsOrValue[key]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.changeActionState = function (action, value) {\r\n\t        this.checkForReadonly();\r\n\t        var exist = !neo_common_1.Utils.isNullOrUndefined(this._actions[action]);\r\n\t        if (exist) {\r\n\t            this._actions[action] = value;\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not change action '\" + action + \"' value to '\" + value + \"', action was not registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return exist;\r\n\t    };\r\n\t    ActionSet.prototype.getActionState = function (action) {\r\n\t        if (this._actions[action] != null) {\r\n\t            return this._actions[action];\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not get action '\" + action + \"' value, action was not registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ActionSet.prototype.getAllActions = function () {\r\n\t        return this._actions;\r\n\t    };\r\n\t    ActionSet.prototype.clone = function (readonly) {\r\n\t        var cloned = new ActionSet(this._setName, this._owner);\r\n\t        for (var key in this._actions) {\r\n\t            if (this._actions.hasOwnProperty(key)) {\r\n\t                cloned.registerAction(key, this._actions[key]);\r\n\t            }\r\n\t        }\r\n\t        cloned._readonly = neo_common_1.Utils.valueOrDefault(readonly, true);\r\n\t        return cloned;\r\n\t    };\r\n\t    ActionSet.prototype.disableAllActions = function () {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            for (var key in this._actions) {\r\n\t                this._actions[key] = false;\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    return ActionSet;\r\n\t}());\r\n\texports.ActionSet = ActionSet;\r\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GambleActions = (function () {\r\n\t    function GambleActions() {\r\n\t    }\r\n\t    GambleActions.ActionGambleStart = \"GAMBLE_START\";\r\n\t    GambleActions.ActionGambleRed = \"GAMBLE_RED\";\r\n\t    GambleActions.ActionGambleBlack = \"GAMBLE_BLACK\";\r\n\t    GambleActions.ActionGambleHalve = \"GAMBLE_HALVE\";\r\n\t    GambleActions.ActionGambleCollect = \"GAMBLE_COLLECT\";\r\n\t    return GambleActions;\r\n\t}());\r\n\texports.GambleActions = GambleActions;\r\n\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(79);\r\n\tvar GambleModel_1 = __webpack_require__(80);\r\n\tvar GambleView_1 = __webpack_require__(81);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar GambleController = (function (_super) {\r\n\t    __extends(GambleController, _super);\r\n\t    function GambleController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    GambleController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof GambleView_1.GambleView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            this.log(\"ERROR view is not instance of GambleView\");\r\n\t        }\r\n\t        this._model = new GambleModel_1.GambleModel(this);\r\n\t    };\r\n\t    GambleController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    GambleController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    GambleController.prototype.start = function () {\r\n\t        this._model.start();\r\n\t    };\r\n\t    GambleController.prototype.startReceived = function () {\r\n\t        this._view.startReceived();\r\n\t        this.emit(GambleController.StartReceived);\r\n\t    };\r\n\t    GambleController.prototype.select = function (color) {\r\n\t        this._model.select(color);\r\n\t    };\r\n\t    GambleController.prototype.selectReceived = function () {\r\n\t        this._view.selectReceived();\r\n\t        this.emit(GambleController.SelectReceived);\r\n\t    };\r\n\t    GambleController.prototype.halve = function () {\r\n\t        this._model.halve();\r\n\t    };\r\n\t    GambleController.prototype.halveReceived = function () {\r\n\t        this.emit(GambleController.HalveReceived);\r\n\t    };\r\n\t    GambleController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(GambleController.WinCalculationFinished);\r\n\t    };\r\n\t    GambleController.prototype.allWinsFinished = function () {\r\n\t        this.emit(GambleController.AllWinsFinished);\r\n\t    };\r\n\t    GambleController.prototype.lose = function () {\r\n\t        this.emit(GambleController.Lose);\r\n\t    };\r\n\t    GambleController.prototype.intro = function () {\r\n\t        this._view.intro();\r\n\t    };\r\n\t    GambleController.prototype.introFinished = function () {\r\n\t        this.emit(GambleController.IntroFinished);\r\n\t    };\r\n\t    GambleController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    GambleController.prototype.outroFinished = function () {\r\n\t        this.emit(GambleController.OutroFinished);\r\n\t    };\r\n\t    GambleController.StartReceived = \"eventStartReceived\";\r\n\t    GambleController.HalveReceived = \"eventHalveReceived\";\r\n\t    GambleController.SelectReceived = \"eventSelectReceived\";\r\n\t    GambleController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    GambleController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    GambleController.Lose = \"eventLose\";\r\n\t    GambleController.IntroFinished = \"eventIntroFinished\";\r\n\t    GambleController.OutroFinished = \"eventOutroFinished\";\r\n\t    GambleController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], GambleController);\r\n\t    return GambleController;\r\n\t}(Controller_1.Controller));\r\n\texports.GambleController = GambleController;\r\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar EventEmitter = PIXI.utils.EventEmitter;\r\n\tvar Controller = (function (_super) {\r\n\t    __extends(Controller, _super);\r\n\t    function Controller() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    Controller.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    return Controller;\r\n\t}(EventEmitter));\r\n\texports.Controller = Controller;\r\n\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(45);\r\n\tvar GambleModel = (function () {\r\n\t    function GambleModel(controller) {\r\n\t        this.controller = controller;\r\n\t    }\r\n\t    GambleModel.prototype.start = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Gamble).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.select = function (color) {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.gambleSelect(color).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.selectReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.halve = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.gambleHalve(neo_games_1.Communication.Game.GameModules.Gamble).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.halveReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    GambleModel.prototype.selectReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.selectReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    GambleModel.prototype.halveReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.halveReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    return GambleModel;\r\n\t}());\r\n\texports.GambleModel = GambleModel;\r\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GambleView = (function (_super) {\r\n\t    __extends(GambleView, _super);\r\n\t    function GambleView() {\r\n\t        _super.call(this);\r\n\t        this._revealTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._revealTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.reveal.bind(this));\r\n\t        this._revealBackTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._revealBackTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.revealBack.bind(this));\r\n\t        this._winTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._winTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.win.bind(this));\r\n\t        this._loseTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._loseTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.lose.bind(this));\r\n\t        this._introDelayTimer = FrameTimer_1.CreateFrameTimer(\"introDelayTimer\");\r\n\t        this._introDelayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.introDelayed.bind(this));\r\n\t        this._introSoundTimer = FrameTimer_1.CreateFrameTimer(\"introSoundTimer\");\r\n\t        this._introSoundTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.introSoundStart.bind(this));\r\n\t        this._outroDelayTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._outroDelayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroDelayed.bind(this));\r\n\t    }\r\n\t    GambleView.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t    };\r\n\t    GambleView.prototype.initReceived = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._gambleControls = document.getElementById(\"gamble\");\r\n\t        if (this._gambleControls == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gamble controlls\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleActualCard = document.getElementById(\"gambleActualCard\");\r\n\t        if (this._gambleActualCard == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gambleActualCard\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleCardBack = document.getElementById(\"gambleCardBack\");\r\n\t        if (this._gambleCardBack == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gambleCardBack\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleWin = document.getElementById(\"gambleWin\");\r\n\t        if (this._gambleWin == null) {\r\n\t            this._gambleWin = document.getElementById(\"winBox\");\r\n\t            if (this._gambleWin == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no gambleWin\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._gambleWin2 = document.getElementById(\"winBox2\");\r\n\t        if (this._gambleWin2 == null) {\r\n\t            if (this._gambleWin2 == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no _gambleWin2\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._gambleRedBtn = document.getElementById(\"gambleRedBtn\");\r\n\t        this._gambleBlackBtn = document.getElementById(\"gambleBlackBtn\");\r\n\t        if (this._gambleRedBtn != null && this._gambleBlackBtn != null) {\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n\t        }\r\n\t        this._previousCards = [];\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            var card = document.getElementById(\"previousCard\" + i);\r\n\t            if (card != null) {\r\n\t                this._previousCards.push(card);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.initIntro = function () {\r\n\t        this.previousCards();\r\n\t        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            this._gambleControls.style.display = \"block\";\r\n\t        }\r\n\t        PlayList_1.PlayList.loop(\"SND_GambleLoop\");\r\n\t    };\r\n\t    GambleView.prototype.onOver = function () {\r\n\t        if (this._gambleRedBtn != null && !this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleRedBtn.classList.add(\"_hover\");\r\n\t        }\r\n\t        if (this._gambleBlackBtn != null && !this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleBlackBtn.classList.add(\"_hover\");\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.onOut = function () {\r\n\t        if (this._gambleRedBtn != null && this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleRedBtn.classList.remove(\"_hover\");\r\n\t        }\r\n\t        if (this._gambleBlackBtn != null && this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleBlackBtn.classList.remove(\"_hover\");\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.startReceived = function () {\r\n\t        this.previousCards();\r\n\t    };\r\n\t    GambleView.prototype.selectReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentCard != null) {\r\n\t            if (this._gambleActualCard != null && this._gambleCardBack != null) {\r\n\t                this._gambleCardBack.classList.remove(\"_CA\");\r\n\t                this._gambleCardBack.classList.remove(\"_DA\");\r\n\t                this._gambleCardBack.classList.remove(\"_HA\");\r\n\t                this._gambleCardBack.classList.remove(\"_SA\");\r\n\t                this._gambleCardBack.classList.remove(\"_JR\");\r\n\t                this._gambleCardBack.classList.add(\"_\" + GameManager_1.GameManager.gambleResponse.currentCard);\r\n\t                this._gambleActualCard.classList.add(\"_reveal\");\r\n\t                if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t                    this._revealTimer.start(30);\r\n\t                }\r\n\t                else {\r\n\t                    this._revealTimer.start(60);\r\n\t                }\r\n\t                PlayList_1.PlayList.play(\"SND_GambleDraw\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.previousCards = function () {\r\n\t        if (this._previousCards != null && GameManager_1.GameManager.gambleResponse.previousCards != null) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.gambleResponse.previousCards.length; i++) {\r\n\t                var card = this._previousCards[i];\r\n\t                if (card != null) {\r\n\t                    card.classList.remove(\"_CA\");\r\n\t                    card.classList.remove(\"_DA\");\r\n\t                    card.classList.remove(\"_HA\");\r\n\t                    card.classList.remove(\"_SA\");\r\n\t                    card.classList.remove(\"_JR\");\r\n\t                    if (GameManager_1.GameManager.gambleResponse.previousCards[i] != \"XX\") {\r\n\t                        card.classList.add(\"_\" + GameManager_1.GameManager.gambleResponse.previousCards[i]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.reAnimate = function (color) {\r\n\t        if (this._gambleActualCard != null && this._gambleActualCard.classList.contains(\"_reveal\")) {\r\n\t            this._actualColor = color;\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            PlayList_1.PlayList.play(\"SND_GambleDraw\");\r\n\t            this._revealBackTimer.start(30);\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.disabled = function () {\r\n\t        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.intro = function () {\r\n\t        this._introDelayTimer.start(1);\r\n\t        if (this._gambleControls != null) {\r\n\t            this._gambleControls.style.display = \"block\";\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.introDelayed = function () {\r\n\t        this._introDelayTimer.stop();\r\n\t        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_GambleOpen\");\r\n\t        this._introSoundTimer.start(30);\r\n\t    };\r\n\t    GambleView.prototype.introSoundStart = function () {\r\n\t        this._introSoundTimer.stop();\r\n\t        PlayList_1.PlayList.loop(\"SND_GambleLoop\");\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    GambleView.prototype.outro = function () {\r\n\t        this._outroDelayTimer.start(30);\r\n\t        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_GambleTransition\");\r\n\t        PlayList_1.PlayList.stop(\"SND_GambleLoop\");\r\n\t    };\r\n\t    GambleView.prototype.outroDelayed = function () {\r\n\t        this._outroDelayTimer.stop();\r\n\t        if (this._gambleControls != null) {\r\n\t            this._gambleControls.style.display = \"none\";\r\n\t        }\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    GambleView.prototype.reveal = function () {\r\n\t        this._revealTimer.stop();\r\n\t        this.previousCards();\r\n\t        this._controller.winCalculationFinished();\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            PlayList_1.PlayList.play(\"SND_GambleWin\");\r\n\t            if (this._gambleWin != null && !this._gambleWin.classList.contains(\"winAnimation\")) {\r\n\t                this._gambleWin.classList.add(\"winAnimation\");\r\n\t            }\r\n\t            if (this._gambleWin2 != null && !this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n\t                this._gambleWin2.classList.add(\"winAnimation\");\r\n\t            }\r\n\t            this._winTimer.start(15);\r\n\t        }\r\n\t        else {\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            this._revealBackTimer.start(30);\r\n\t            this._loseTimer.start(30);\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.revealBack = function () {\r\n\t        this.onOut();\r\n\t        this._revealBackTimer.stop();\r\n\t    };\r\n\t    GambleView.prototype.win = function () {\r\n\t        this._winTimer.stop();\r\n\t        this._revealBackTimer.start(5);\r\n\t        if (this._gambleWin != null && this._gambleWin.classList.contains(\"winAnimation\")) {\r\n\t            this._gambleWin.classList.remove(\"winAnimation\");\r\n\t        }\r\n\t        if (this._gambleWin2 != null && this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n\t            this._gambleWin2.classList.remove(\"winAnimation\");\r\n\t        }\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    GambleView.prototype.lose = function () {\r\n\t        this._loseTimer.stop();\r\n\t        this._controller.lose();\r\n\t    };\r\n\t    GambleView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], GambleView);\r\n\t    return GambleView;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.GambleView = GambleView;\r\n\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar CanvasManager_1 = __webpack_require__(68);\r\n\tvar HtmlManager_1 = __webpack_require__(71);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ContainerElement = (function (_super) {\r\n\t    __extends(ContainerElement, _super);\r\n\t    function ContainerElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ContainerElement.prototype.internalDestroy = function (options) {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs.hasOwnProperty(key)) {\r\n\t                    if (this.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                        this.childs[key].destroy(options);\r\n\t                    }\r\n\t                    this.childs[key] = null;\r\n\t                }\r\n\t            }\r\n\t            this.childs = null;\r\n\t        }\r\n\t    };\r\n\t    ContainerElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(ContainerElementAttributes.STYLE)) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(ContainerElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t                if (this.childs == null) {\r\n\t                    this.childs = CanvasManager_1.CanvasManager.parseElements(this.style.node, this);\r\n\t                    HtmlManager_1.HtmlManager.parseElements(this.style.node, null);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name \" + node.getAttribute(ContainerElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this.childs == null) {\r\n\t                this.childs = CanvasManager_1.CanvasManager.parseElements(node, this);\r\n\t                HtmlManager_1.HtmlManager.parseElements(node, null);\r\n\t            }\r\n\t        }\r\n\t        if (this.childs == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING container element with name \" + node.nodeName + \" has no children\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ContainerElement.prototype.clone = function () {\r\n\t        var element = new ContainerElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element.childs = {};\r\n\t        element.removeChildren();\r\n\t        for (var key in this.childs) {\r\n\t            element.childs[key] = this.childs[key].clone();\r\n\t            element.addChild(element.childs[key]);\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ContainerElement);\r\n\t    return ContainerElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ContainerElement = ContainerElement;\r\n\tvar ContainerElementAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    STYLE: \"Style\",\r\n\t};\r\n\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(52);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(84);\r\n\tvar BaseController_1 = __webpack_require__(85);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(44);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(39);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar DesktopBaseUserControls = (function (_super) {\r\n\t    __extends(DesktopBaseUserControls, _super);\r\n\t    function DesktopBaseUserControls() {\r\n\t        _super.call(this, \"base\");\r\n\t        this._autoplayAfterFeature = false;\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = 0;\r\n\t        this._machineStopped = true;\r\n\t        this.longIntro = false;\r\n\t        this._featureAutoStarted = false;\r\n\t    }\r\n\t    DesktopBaseUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._unColectedWinDelay = FrameTimer_1.CreateFrameTimer(\"unColectedWinDelay\");\r\n\t        this._unColectedWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\t        this._userControls = document.getElementById(\"userControls\");\r\n\t        this._fsDiamondsPayout = document.getElementById(\"fsDiamondsPayout\");\r\n\t        this._featureAutoStartTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoStartTimer\");\r\n\t        this._featureAutoStartTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoStartDelayed.bind(this));\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BaseController_1.BaseController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionMaxBet] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._paytable = new Paytable_1.Paytable();\r\n\t        this._paytable.initialize();\r\n\t        if (GameManager_1.GameManager.gameResponse != null) {\r\n\t            if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            }\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null && !ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._userControls_supreme.style.display = \"none\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._fsDiamondsPayout != null &&\r\n\t                !this._fsDiamondsPayout.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsDiamondsPayout.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._unColectedWin,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this.prepareNewGameRound();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            }\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = 0;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this.changeWinBox(collect);\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this._afterWinDelay.start(35);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.frbSpin();\r\n\t        var hasFRBRestriction = FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan > 0;\r\n\t        if (DataManager_1.DataManager.quickspinEnabled() && !hasFRBRestriction) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop && !hasFRBRestriction);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            if (action === BaseActions_1.BaseActions.ActionBaseCollect) {\r\n\t                this.changeWinBox(true);\r\n\t            }\r\n\t            else {\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionMaxBet:\r\n\t                    this.changeBet(false, true, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    this.changeBet(false, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    this.changeBet(true, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBaseCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.collect = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.collect();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Base);\r\n\t        if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, !AppContext_1.AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString());\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.unColectedWinDelay = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.spin = function () {\r\n\t        this._machineStopped = false;\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.hasNewActiveOffer()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t            return;\r\n\t        }\r\n\t        if (Paytable_1.Paytable.shouldOpen(true, true)) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                Paytable_1.Paytable.show();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.Autoplay &&\r\n\t            !this._wasCalclulated &&\r\n\t            !DataManager_1.DataManager.GameRoundClosed &&\r\n\t            AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t            if (!this._wasCalclulated) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                    neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balanceTotal = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal));\r\n\t            var balanceAfter = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.totalWin, balanceTotal));\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: balanceAfter,\r\n\t                inSpin: true,\r\n\t            });\r\n\t        }\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            this.autoplayStop();\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        if (!BalanceManager_1.BalanceManager.hasCredit(false, true)) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            this.prepareNewGameRound();\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (!DataManager_1.DataManager.AutoplayStarted &&\r\n\t                GameManager_1.GameManager.baseResponse != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.baseResponse.totalWin);\r\n\t            }\r\n\t            DataManager_1.DataManager.updateLossLimit();\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled);\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this.playCollectSound();\r\n\t        DataManager_1.DataManager.updateTotalGain(true);\r\n\t        BalanceManager_1.BalanceManager.fixBalance();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed ||\r\n\t            (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        }\r\n\t        this._controller.spin();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        this._wasCalclulated = false;\r\n\t        neo_games_1.Platforms.Platforms.roundStarted({\r\n\t            totalBet: BetManager_1.BetManager.Bet,\r\n\t            freeRound: FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb,\r\n\t            userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)) });\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        neo_games_1.Platforms.Platforms.autoplayStop();\r\n\t        if (this._machineStopped) {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                    FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._unColectedWin = 0;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            this.changeWinBox();\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBet(decrease, max, cycle);\r\n\t        this._paytable.updateDataValues();\r\n\t        if (BetManager_1.BetManager.minBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t        }\r\n\t        else if (BetManager_1.BetManager.maxBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ShowMaxBetMessage && max) {\r\n\t            var message = AppContext_1.AppContext.gameConfiguration.MaxButton\r\n\t                ? Languages_1.Languages.getRid(\"MAX_BET_MESSAGE_PL\")\r\n\t                : Languages_1.Languages.getRid(\"MAX_BET_MESSAGE\");\r\n\t            GameManager_1.GameManager.openConfirmationDialog(neo_games_1.Communication.Game.GameModules.Base, message);\r\n\t        }\r\n\t        this.updateReelsByBetChange();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.updateReelsByBetChange = function () {\r\n\t        this._controller.updateReelsByBetChange();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.beforeMachineStopped = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this.autoplayStop();\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.machineStopped = function () {\r\n\t        this._machineStopped = true;\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        DataManager_1.DataManager.stopAutoplayIfLossLimit();\r\n\t        DataManager_1.DataManager.stopAutoplayIfWinLimit();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (DataManager_1.DataManager.AutoplayCount === 0 + \"\") {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            this._afterWinDelay.start(30);\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.baseResponse.currentWin === 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed &&\r\n\t            !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this.startFeatureAutoStart();\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        if (DataManager_1.DataManager.Autoplay && this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplayStop)) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this.startFeatureAutoStart();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.intro = function (long) {\r\n\t        var _this = this;\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        this.longIntro = long;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        this._controller.intro(long);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        var timer = 800;\r\n\t        if (!long) {\r\n\t            timer = 16;\r\n\t        }\r\n\t        setTimeout(function () {\r\n\t            if (_this._userControls != null && _this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (_this._userControls_supreme != null &&\r\n\t                _this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }, timer);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.introFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded();\r\n\t        }\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            DataManager_1.DataManager.Autoplay = DataManager_1.DataManager.AutoplayAfterGamble;\r\n\t        }\r\n\t        if (this._autoplayAfterFeature) {\r\n\t            DataManager_1.DataManager.Autoplay = this._autoplayAfterFeature;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t            this._autoplayAfterFeature = false;\r\n\t        }\r\n\t        if (this.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonusExtended_1.FreeRoundBonusExtended.id != null || FreeRoundBonusExtended_1.FreeRoundBonusExtended.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            this.longIntro = false;\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.outro = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t            }\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this._autoplayDelay.stop();\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            this._autoplayAfterFeature = this._featureAutoStarted ? DataManager_1.DataManager.Autoplay : false;\r\n\t        }\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.outroFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null) {\r\n\t                this._userControls.style.display = \"none\";\r\n\t            }\r\n\t            if (this._userControls_supreme != null) {\r\n\t                this._userControls_supreme.style.display = \"none\";\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Gamble);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.prepareJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t        Paytable_1.Paytable.openAtStart(true);\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplay] = (DataManager_1.DataManager.GameRoundClosed ||\r\n\t                        (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb &&\r\n\t                            FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb)) &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBaseCollect] = FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\"\r\n\t                        ? false\r\n\t                        : !DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionMaxBet] = !ModuleManager_1.ModuleManager.gambleEnabled() &&\r\n\t                        !FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.MaxBetEnabled,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = !FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    neo_games_1.Platforms.Platforms.roundInit();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.prepareJackpotMiniGame = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            if (Jackpot_1.Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.resetWinAnimator();\r\n\t                this.disable();\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t                Jackpot_1.Jackpot.startMiniGame();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                var self_1 = this;\r\n\t                if (this._wasCalclulated) {\r\n\t                    Jackpot_1.Jackpot.initMiniGame(true, function () {\r\n\t                        self_1.resetWinAnimator();\r\n\t                        self_1.disable();\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t                    });\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameLimit) {\r\n\t                    DataManager_1.DataManager.Autoplay = false;\r\n\t                    this.limit();\r\n\t                }\r\n\t                if (Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t                    this.actions.disableAllActions();\r\n\t                    HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.checkJackpotMiniGame = function () {\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame() || FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasInitializedGame() || Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox();\r\n\t                this._wasCalclulated = true;\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    this.collect();\r\n\t                }\r\n\t                else {\r\n\t                    this.playCollectSound();\r\n\t                    DataManager_1.DataManager.updateDataElements();\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.initMiniGame(false, null);\r\n\t            Jackpot_1.Jackpot.disableMiniGameAutostart();\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplay] = AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionMaxBet] = !FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && AppContext_1.AppContext.gameConfiguration.MaxBetEnabled,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _a\r\n\t            ));\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionStates((_b = {},\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBaseCollect] = true,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionMaxBet] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _b\r\n\t            ));\r\n\t        }\r\n\t        this._controller.limit();\r\n\t        var _a, _b;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.disable = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t        if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._controller.disableBase();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.setAutoplayAfterFeature = function (tf) {\r\n\t        this._autoplayAfterFeature = tf;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.featureAutoStartDelayed = function () {\r\n\t        this._featureAutoStartTimer.stop();\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._featureAutoStarted = true;\r\n\t            ModuleManager_1.ModuleManager.startFreespins();\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.startFeatureAutoStart = function (preDuration) {\r\n\t        if (preDuration === void 0) { preDuration = 0; }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoStartTimer.start(preDuration + AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.resetWinAnimator = function () {\r\n\t        this._controller.resetWinAnimator();\r\n\t    };\r\n\t    DesktopBaseUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopBaseUserControls);\r\n\t    return DesktopBaseUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopBaseUserControls = DesktopBaseUserControls;\r\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GameActions = (function () {\r\n\t    function GameActions() {\r\n\t    }\r\n\t    GameActions.ActionSpinOrStop = \"SPIN_OR_STOP\";\r\n\t    return GameActions;\r\n\t}());\r\n\texports.GameActions = GameActions;\r\n\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(79);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar BaseView_1 = __webpack_require__(86);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseController = (function (_super) {\r\n\t    __extends(BaseController, _super);\r\n\t    function BaseController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    BaseController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof BaseView_1.BaseView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR view is not instance of BaseView\");\r\n\t            }\r\n\t        }\r\n\t        this._model = new BaseModel_1.BaseModel(this);\r\n\t    };\r\n\t    BaseController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    BaseController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    BaseController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    BaseController.prototype.collect = function () {\r\n\t        this._view.collect();\r\n\t    };\r\n\t    BaseController.prototype.spin = function () {\r\n\t        this._model.spin();\r\n\t        this._view.spin();\r\n\t    };\r\n\t    BaseController.prototype.stop = function () {\r\n\t        this._view.stop();\r\n\t    };\r\n\t    BaseController.prototype.spinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(BaseController.SpinReceived);\r\n\t    };\r\n\t    BaseController.prototype.beforeMachineStopped = function () {\r\n\t        this.emit(BaseController.BeforeMachineStopped);\r\n\t    };\r\n\t    BaseController.prototype.machineStopped = function () {\r\n\t        this.emit(BaseController.MachineStopped);\r\n\t    };\r\n\t    BaseController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(BaseController.WinCalculationFinished);\r\n\t    };\r\n\t    BaseController.prototype.allWinsFinished = function () {\r\n\t        this.emit(BaseController.AllWinsFinished);\r\n\t    };\r\n\t    BaseController.prototype.resetWinAnimator = function () {\r\n\t        this._view.resetWinAnimator();\r\n\t    };\r\n\t    BaseController.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._view.intro(long);\r\n\t    };\r\n\t    BaseController.prototype.introFinished = function () {\r\n\t        this.emit(BaseController.IntroFinished);\r\n\t    };\r\n\t    BaseController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    BaseController.prototype.outroFinished = function () {\r\n\t        this.emit(BaseController.OutroFinished);\r\n\t    };\r\n\t    BaseController.prototype.selectPayline = function () {\r\n\t        this._view.selectPayline();\r\n\t    };\r\n\t    BaseController.prototype.disableBase = function () {\r\n\t        this._view.disableBase();\r\n\t    };\r\n\t    BaseController.prototype.toggleSounds = function (enable) {\r\n\t        this._view.toggleSounds(enable);\r\n\t    };\r\n\t    BaseController.prototype.limit = function () { };\r\n\t    BaseController.prototype.updateReelsByBetChange = function () {\r\n\t        this._view.updateReelsByBetChange();\r\n\t    };\r\n\t    BaseController.SpinReceived = \"eventSpinReceived\";\r\n\t    BaseController.MachineStopped = \"eventMachineStopped\";\r\n\t    BaseController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    BaseController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    BaseController.IntroFinished = \"eventIntroFinished\";\r\n\t    BaseController.OutroFinished = \"eventOutroFinished\";\r\n\t    BaseController.BeforeMachineStopped = \"eventBeforeMachineStopped\";\r\n\t    BaseController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], BaseController);\r\n\t    return BaseController;\r\n\t}(Controller_1.Controller));\r\n\texports.BaseController = BaseController;\r\n\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar WinAnimator_1 = __webpack_require__(87);\r\n\tvar Machine_1 = __webpack_require__(110);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar AmbientBackground_1 = __webpack_require__(63);\r\n\tvar FreespinsView_1 = __webpack_require__(114);\r\n\tvar BaseModel_1 = __webpack_require__(46);\r\n\tvar LayoutManager_1 = __webpack_require__(109);\r\n\tvar LayoutContainerElement_1 = __webpack_require__(108);\r\n\tvar BaseView = (function (_super) {\r\n\t    __extends(BaseView, _super);\r\n\t    function BaseView() {\r\n\t        _super.call(this);\r\n\t        this._wasFinished = false;\r\n\t        this.currentBet = -1;\r\n\t        this._introDelay = FrameTimer_1.CreateFrameTimer(\"introDelay\");\r\n\t        this._introDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.introFinished.bind(this));\r\n\t        this._outroDelay = FrameTimer_1.CreateFrameTimer(\"outroDelay\");\r\n\t        this._outroDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        this._wildDelay = FrameTimer_1.CreateFrameTimer(\"wildDelay\");\r\n\t        this._wildDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.machineStoppedDelayed.bind(this));\r\n\t        this._devilDelay = FrameTimer_1.CreateFrameTimer(\"devilDelay\");\r\n\t        this._devilDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.machineStoppedDelayed1.bind(this));\r\n\t        this._symbolMoEDelay = FrameTimer_1.CreateFrameTimer(\"symbolMoEDelay\");\r\n\t        this._symbolMoEDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.symbolMoEDelay.bind(this));\r\n\t        this._symbolBonusDelay = FrameTimer_1.CreateFrameTimer(\"symbolBonusDelay\");\r\n\t        this._symbolBonusDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.symbolBonusDelay.bind(this));\r\n\t        this._gambleDelay = FrameTimer_1.CreateFrameTimer(\"gambleDelay\");\r\n\t        this._gambleDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.gambleOutro.bind(this));\r\n\t    }\r\n\t    BaseView.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        BaseView.LayoutManager = new LayoutManager_1.LayoutManager();\r\n\t        if (this.childs[\"Symbols\"] != null) {\r\n\t            this._symbols = this.childs[\"Symbols\"];\r\n\t            this.removeChild(this._symbols);\r\n\t        }\r\n\t        if (this.childs[\"Paylines\"] != null)\r\n\t            this._paylines = this.childs[\"Paylines\"];\r\n\t        if (this.childs[\"Machine\"] != null)\r\n\t            this._machine = this.childs[\"Machine\"];\r\n\t        if (this.childs[\"WinAnimator\"] != null)\r\n\t            this._winAnimator = this.childs[\"WinAnimator\"];\r\n\t        if (this.childs[\"FsMessageBox\"] != null)\r\n\t            BaseView.FsMessageBox = this.childs[\"FsMessageBox\"];\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            BaseView.Logo = this.childs[\"Logo\"];\r\n\t        if (this.childs[\"Transition\"] != null)\r\n\t            BaseView.Transition = this.childs[\"Transition\"];\r\n\t        if (this.childs[\"GambleTransition\"] != null) {\r\n\t            this._gambleTransition = this.childs[\"GambleTransition\"];\r\n\t            if (this._gambleTransition != null) {\r\n\t                this._gambleSceneHolder = this._gambleTransition.getChildElementByName(\"Scene\");\r\n\t            }\r\n\t        }\r\n\t        this.setupGambleSceneElement();\r\n\t        this.visible = false;\r\n\t    };\r\n\t    BaseView.prototype.initReceived = function (controller) {\r\n\t        this._controller = controller;\r\n\t        if (this._symbols != null) {\r\n\t            if (this._machine != null) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null) {\r\n\t                    if (GameManager_1.GameManager.baseResponse.initData != null && GameManager_1.GameManager.baseResponse.initData.reels != null) {\r\n\t                        this._machine.on(Machine_1.Machine.ReelStopped, this.onReelStopped.bind(this));\r\n\t                        this._machine.on(Machine_1.Machine.MachineStopped, this.machineStopped.bind(this));\r\n\t                        this._machine.initialize(this._symbols, GameManager_1.GameManager.baseResponse.initData.reels, this.childs[\"Teasing\"], this.childs[\"TeasingTop\"], false, this.childs[\"Background\"], this.childs[\"SunContainer\"]);\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.baseResponse.screen != null &&\r\n\t                        GameManager_1.GameManager.baseResponse.screen.reels != null &&\r\n\t                        GameManager_1.GameManager.baseResponse.screen.reels.length !== 0) {\r\n\t                        if (this._winAnimator != null) {\r\n\t                            this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\r\n\t                            this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n\t                            this._winAnimator.initialize(this._symbols, this._paylines, this.childs[\"NoWinContainer\"], this.childs[\"WinContainer\"], this.childs[\"WinFrameContainer\"], this.childs[\"CycleContainer\"], this.childs[\"PaylineNumbers\"], null, this.childs[\"BonusTeasingContainer\"], this.childs[\"HWContainer\"]);\r\n\t                            this._winAnimator.showSymbols(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t                            if (BaseModel_1.BaseModel.LastScreen != null && BaseModel_1.BaseModel.LastScreen[\"reels\"] !== null)\r\n\t                                this._winAnimator.createSuns(BaseModel_1.BaseModel.LastScreen[\"reels\"]);\r\n\t                            this._winAnimator.setupPaylinesContainer(this.childs[\"PaylinesContainerBottom\"], this.childs[\"PaylinesContainerTop\"], this.childs[\"PaylineNumbersRight\"], this.childs[\"PaylineNumbersMiddle\"], null);\r\n\t                        }\r\n\t                        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reels in response\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no base reponse\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no machine\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t        this.visible = false;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.visible = true;\r\n\t            this._inGamble = true;\r\n\t            this._gambleTransition.goToCase(\"HIDE_GAMBLE_INIT\");\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.spinReceived = function () {\r\n\t        DataManager_1.DataManager.updateCustomBetsData();\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.screen !== null) {\r\n\t            this._winAnimator.spinReceived(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t        }\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t        this._machine.spinStop(null, false, true);\r\n\t    };\r\n\t    BaseView.prototype.spin = function () {\r\n\t        if (BaseModel_1.BaseModel.LastScreen != null && BaseModel_1.BaseModel.LastScreen[\"reels\"] != null) {\r\n\t            this._winAnimator.spin(BaseModel_1.BaseModel.LastScreen[\"reels\"]);\r\n\t        }\r\n\t        else {\r\n\t            this._winAnimator.spin(null);\r\n\t        }\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n\t    };\r\n\t    BaseView.prototype.stop = function () {\r\n\t        this._machine.spinStop(null, true);\r\n\t    };\r\n\t    BaseView.prototype.collect = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        this._winAnimator.reset(true);\r\n\t    };\r\n\t    BaseView.prototype.initIntro = function () {\r\n\t        this.visible = true;\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                PlayList_1.PlayList.loop(\"SND_FSWait\");\r\n\t            }\r\n\t            else if (GameManager_1.GameManager.baseResponse.currentWin == 0) {\r\n\t                PlayList_1.PlayList.loop(\"SND_BaseRecapLoop\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        }\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin);\r\n\t    };\r\n\t    BaseView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.visible = true;\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            PlayList_1.PlayList.setVolume(\"SND_BaseLoop\", 0);\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        }\r\n\t        if (this.childs[\"Background\"] != null) {\r\n\t            this.childs[\"Background\"].goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this._inGamble && this._gambleTransition) {\r\n\t            this._gambleTransition.goToCase(\"SHOW\");\r\n\t        }\r\n\t        if (long) {\r\n\t            this.visible = true;\r\n\t            this._winAnimator.reset(false);\r\n\t            this._winAnimator.showSymbols(BaseModel_1.BaseModel.LastScreen[\"reels\"]);\r\n\t            if (BaseModel_1.BaseModel.LastScreen != null && BaseModel_1.BaseModel.LastScreen[\"reels\"] !== null)\r\n\t                this._winAnimator.createSuns(BaseModel_1.BaseModel.LastScreen[\"reels\"]);\r\n\t            if (BaseView.Transition != null) {\r\n\t                this.addChild(BaseView.Transition);\r\n\t                BaseView.Transition.goToCase(\"END\");\r\n\t            }\r\n\t            this._introDelay.start(60);\r\n\t        }\r\n\t        else {\r\n\t            this._introDelay.start(30);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outro = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_FSWait\");\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t        var wasFinished = this._wasFinished;\r\n\t        var inHighWins = this._winAnimator.reset(true);\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (BaseView.Transition != null) {\r\n\t                this.addChild(BaseView.Transition);\r\n\t                BaseView.Transition.goToCase(\"START\");\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_FSTrans\");\r\n\t            AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"fs\", 1500, 500);\r\n\t            this._outroDelay.start(30);\r\n\t            PlayList_1.PlayList.setVolume(\"SND_BaseLoop\", 0);\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        }\r\n\t        else {\r\n\t            if (wasFinished) {\r\n\t                this._gambleDelay.start(30);\r\n\t            }\r\n\t            else {\r\n\t                if (inHighWins) {\r\n\t                    this._gambleDelay.start(90);\r\n\t                }\r\n\t                else {\r\n\t                    this._gambleDelay.start(60);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outroFinished = function () {\r\n\t        this._controller.outroFinished();\r\n\t        this._winAnimator.resetTimer();\r\n\t        FreespinsView_1.FreespinsView.FsMessageBox.goToCase(\"EMPTY\");\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            this.visible = false;\r\n\t        }\r\n\t        else {\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.gambleOutro = function () {\r\n\t        if (this._gambleTransition) {\r\n\t            this._inGamble = true;\r\n\t            this._gambleTransition.goToCase(\"HIDE_GAMBLE\");\r\n\t        }\r\n\t        PlayList_1.PlayList.setVolume(\"SND_BaseLoop\", 0);\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.play(\"SND_GambleTransition\");\r\n\t        this._outroDelay.start(30);\r\n\t    };\r\n\t    BaseView.prototype.disableLogo = function () {\r\n\t        if (this.childs[\"Logo\"] != null) {\r\n\t            this.removeChild(this.childs[\"Logo\"]);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.resetWinAnimator = function () {\r\n\t        this._winAnimator.reset(true);\r\n\t    };\r\n\t    BaseView.prototype.disableBase = function () {\r\n\t        this._winAnimator.resetTimer();\r\n\t    };\r\n\t    BaseView.prototype.selectPayline = function () { };\r\n\t    BaseView.prototype.toggleSounds = function (enable) {\r\n\t        if (enable) {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.setVolume(\"SND_BaseLoop\", 0);\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.onReelStopped = function () {\r\n\t        this._winAnimator.onReelStopped(GameManager_1.GameManager.baseResponse.screen.reels, this._machine.actualReelStopped);\r\n\t    };\r\n\t    BaseView.prototype.machineStopped = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            if (this.childs[\"Background\"] != null) {\r\n\t                this.childs[\"Background\"].goToCase(\"TEASING\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this.childs[\"Background\"] != null) {\r\n\t                this.childs[\"Background\"].goToCase(\"NORMAL\");\r\n\t            }\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._controller.beforeMachineStopped();\r\n\t            this._symbolBonusDelay.start(50);\r\n\t        }\r\n\t        else {\r\n\t            this.symbolBonusDelay();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.symbolBonusDelay = function () {\r\n\t        this._symbolBonusDelay.stop();\r\n\t        if (this._winAnimator.isMoESymbol(GameManager_1.GameManager.baseResponse.screen.reels)) {\r\n\t            this._controller.beforeMachineStopped();\r\n\t            this._symbolMoEDelay.start(35);\r\n\t        }\r\n\t        else {\r\n\t            this.symbolMoEDelay();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.symbolMoEDelay = function () {\r\n\t        this._symbolMoEDelay.stop();\r\n\t        if (this._winAnimator.machineStopped(GameManager_1.GameManager.baseResponse.screen.reels)) {\r\n\t            this._controller.beforeMachineStopped();\r\n\t            this._wildDelay.start(40);\r\n\t        }\r\n\t        else {\r\n\t            this.machineStoppedDelayed();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.machineStoppedDelayed = function () {\r\n\t        this.machineStoppedDelayed1();\r\n\t    };\r\n\t    BaseView.prototype.machineStoppedDelayed1 = function () {\r\n\t        this._wasFinished = false;\r\n\t        this._controller.machineStopped();\r\n\t        if (this._winAnimator.showWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin)) {\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.finishWinCalculation = function () {\r\n\t        this._wasFinished = true;\r\n\t        this._controller.winCalculationFinished();\r\n\t    };\r\n\t    BaseView.prototype.finishWinAnimator = function () {\r\n\t        if (!DataManager_1.DataManager.Autoplay || ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            PlayList_1.PlayList.setVolume(\"SND_BaseLoop\", 0);\r\n\t            if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                PlayList_1.PlayList.loop(\"SND_FSWait\");\r\n\t            }\r\n\t        }\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    BaseView.prototype.introFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.restoreVolume(\"SND_BaseLoop\");\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseRecapLoop\");\r\n\t        }\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            this.childs[\"Logo\"].goToCase(\"LOGO\");\r\n\t        this._winAnimator.reset(true);\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    BaseView.prototype.updateReelsByBetChange = function () {\r\n\t        var customBetData = DataManager_1.DataManager.getCustomBetDataForCurrentBetAmount();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(customBetData)) {\r\n\t            if (this.currentBet != customBetData.betAmount) {\r\n\t                this.currentBet = customBetData.betAmount;\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(customBetData.reelsData)) {\r\n\t                    this._winAnimator.showSymbols(customBetData.reelsData);\r\n\t                    this._winAnimator.clearTopSuns();\r\n\t                    if (BaseModel_1.BaseModel.LastScreen != null) {\r\n\t                        BaseModel_1.BaseModel.LastScreen[\"reels\"] = customBetData.reelsData;\r\n\t                        this._winAnimator.createSuns(BaseModel_1.BaseModel.LastScreen[\"reels\"]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.setupGambleSceneElement = function () {\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"ReelsBottom\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"ReelsBottom\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"Teasing\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"Teasing\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"TeasingTop\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"TeasingTop\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"ReelsTop\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"ReelsTop\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"NoWinContainer\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"NoWinContainer\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"CycleContainer\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"CycleContainer\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PaylineNumbers\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PaylineNumbers\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PaylineNumbersRight\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PaylineNumbersRight\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"Paylines\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"Paylines\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PaylinesContainerBottom\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PaylinesContainerBottom\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PalineTable\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PalineTable\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PaylineNumbersMiddle\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PaylineNumbersMiddle\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"WinFrameContainer\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"WinFrameContainer\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"WinContainer\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"WinContainer\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"SunContainer\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"SunContainer\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"PaylinesContainerTop\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"PaylinesContainerTop\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"WinAnimator\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"WinAnimator\"]),\r\n\t        });\r\n\t        this._gambleSceneHolder.addElement({\r\n\t            element: this.childs[\"FsMessageBox\"],\r\n\t            parent: this,\r\n\t            index: this.getChildIndex(this.childs[\"FsMessageBox\"]),\r\n\t        });\r\n\t    };\r\n\t    BaseView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseView);\r\n\t    return BaseView;\r\n\t}(LayoutContainerElement_1.LayoutContainerElement));\r\n\texports.BaseView = BaseView;\r\n\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Payline_1 = __webpack_require__(88);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(100);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar TimelineElement_1 = __webpack_require__(103);\r\n\tvar SoundManager_1 = __webpack_require__(41);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(104);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreespinsModel_1 = __webpack_require__(61);\r\n\tvar LayoutContainerElement_1 = __webpack_require__(108);\r\n\tvar WinAnimator = (function (_super) {\r\n\t    __extends(WinAnimator, _super);\r\n\t    function WinAnimator() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    WinAnimator.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(exports.WinAnimatorAttributes.SOUNDS)) {\r\n\t            if (SoundManager_1.SoundManager.PlayLists[node.getAttribute(exports.WinAnimatorAttributes.SOUNDS)] != null) {\r\n\t                this.playList = node.getAttribute(exports.WinAnimatorAttributes.SOUNDS);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(exports.WinAnimatorAttributes.CONFIGS).split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                this.configure(Configuration_1.Configuration.Configurations[configs[i]]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.configure = function (node) {\r\n\t        if (node.hasAttribute(\"ReelCount\")) {\r\n\t            this.reelCount = parseInt(node.getAttribute(\"ReelCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelX\")) {\r\n\t            this.reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelY\")) {\r\n\t            this.reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"VisibleSymbolCount\")) {\r\n\t            this.symbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolWidth\")) {\r\n\t            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolHeight\")) {\r\n\t            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"WinsMultipliers\")) {\r\n\t            this.multipliers = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"WinsMultipliers\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"WinsAnimations\")) {\r\n\t            this.animationNames = node.getAttribute(\"WinsAnimations\").split(\";\");\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.initialize = function (symbols, paylines, noWinSymbolsContainer, symbolsContainer, winFrameContainer, cycleContainer, paylineNumbers, sunContainer, hwContainer) {\r\n\t        if (paylineNumbers != null) {\r\n\t            this.paylineNumbers = paylineNumbers;\r\n\t        }\r\n\t        this.createTimer();\r\n\t        this.createSymbols(symbols, noWinSymbolsContainer, symbolsContainer, winFrameContainer, cycleContainer, sunContainer);\r\n\t        this.createPaylines(paylines);\r\n\t        this.createAnimations(hwContainer);\r\n\t    };\r\n\t    WinAnimator.prototype.onReelStopped = function (reelsData, reelIndex) {\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n\t            this.removeCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t        for (var i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n\t            this.addCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showSymbols = function (reelsData) {\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = 0; j < reelsData[i].symbols.length; j++) {\r\n\t                this.removeCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = 0; j < reelsData[i].symbols.length; j++) {\r\n\t                if (!this.addTransformSymbol(i, j)) {\r\n\t                    this.addCurrentSymbol(i, j);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.resetAnimations();\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.currentMultiplierIndex = 0;\r\n\t            for (var i = 0; i < this.multipliers.length; i++) {\r\n\t                if (this.currentWin / BetManager_1.BetManager.Bet >= this.multipliers[i]) {\r\n\t                    this.currentMultiplierIndex = i;\r\n\t                }\r\n\t            }\r\n\t            if (!this.showCustomWin()) {\r\n\t                this.showFirstWins();\r\n\t            }\r\n\t            return this.currentMultiplierIndex >= 3;\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showCustomWin = function () {\r\n\t        return false;\r\n\t    };\r\n\t    WinAnimator.prototype.showFirstWins = function () {\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseFirstWin);\r\n\t        }\r\n\t        this.startAnimation();\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstWins = function () {\r\n\t        this.emit(WinAnimator.FinishWinAnimator);\r\n\t        this.currentCycle = 0;\r\n\t        this.cycleWins(true);\r\n\t    };\r\n\t    WinAnimator.prototype.showInitWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.resetAnimations();\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.showCustomInitWin();\r\n\t            this.showFirstInitWins();\r\n\t            this.finishFirstInitWins();\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showCustomInitWin = function () { };\r\n\t    WinAnimator.prototype.showFirstInitWins = function () {\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseFirstWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstInitWins = function () {\r\n\t        this.currentCycle = 0;\r\n\t        this.cycleWins(true);\r\n\t    };\r\n\t    WinAnimator.prototype.cycleWins = function (isFirst) {\r\n\t        if (isFirst === void 0) { isFirst = false; }\r\n\t        if (this.currentWins == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (isFirst) {\r\n\t            this.cycleStep = 0;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_BaseRecapWinline\");\r\n\t        if (!ModuleManager_1.ModuleManager.freespinsEnabled() && !ModuleManager_1.ModuleManager.freespinsActive() && this.cycleStep === 0) {\r\n\t            this.cycleStep++;\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseRecapLoop\");\r\n\t        }\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        this.winSymbolsGoToCase(this.currentCycle, Symbol_1.Symbol.CaseCycle, true);\r\n\t        this.winPaylineGoToCase(this.currentCycle, Payline_1.Payline.CaseWin);\r\n\t        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\t        if (this.currentWins.length === 1) {\r\n\t            return;\r\n\t        }\r\n\t        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelayWithCorrection(isFirst));\r\n\t    };\r\n\t    WinAnimator.prototype.getCycleWinsDelayWithCorrection = function (isFirst) {\r\n\t        var winDelay = (this.getCycleWinsDelay() / 60) * 1000;\r\n\t        var diff = (Date.now() - this.cycleDate) % winDelay;\r\n\t        if (diff > 100 || isFirst) {\r\n\t            diff = 0;\r\n\t            this.cycleDate = Date.now();\r\n\t        }\r\n\t        return (winDelay - diff) / 16.7;\r\n\t    };\r\n\t    WinAnimator.prototype.getCycleWinsDelay = function () {\r\n\t        return 90;\r\n\t    };\r\n\t    WinAnimator.prototype.reset = function (showLastSymbols) {\r\n\t        this.stopTimer();\r\n\t        this.allSymbolsGoToCase(showLastSymbols ? Symbol_1.Symbol.CaseNormal : Symbol_1.Symbol.CaseEmpty, false);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t        this.paylines.showPaylinesLabel();\r\n\t        if (showLastSymbols) {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t        this.value.stop();\r\n\t        this.value.visible = false;\r\n\t        var lastMultiplierIndex = this.currentMultiplierIndex;\r\n\t        this.currentMultiplierIndex = -1;\r\n\t        if (this.currentAnimationIndex != null) {\r\n\t            if (this.currentAnimationFinished) {\r\n\t                this.resetAnimations();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return false;\r\n\t            }\r\n\t            else {\r\n\t                this.stopAnimation();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return lastMultiplierIndex >= 3;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.currentWins = null;\r\n\t            this.currentWin = null;\r\n\t            return lastMultiplierIndex >= 3;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createTimer = function () {\r\n\t        this.timerStatus = \"\";\r\n\t        this.timer = FrameTimer_1.CreateFrameTimer(\"timer\");\r\n\t        this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onTimerComplete.bind(this));\r\n\t    };\r\n\t    WinAnimator.prototype.startTimer = function (status, duration) {\r\n\t        this.timerStatus = status;\r\n\t        this.timer.start(duration);\r\n\t    };\r\n\t    WinAnimator.prototype.stopTimer = function () {\r\n\t        if (this.timer != null) {\r\n\t            this.timer.stop();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.resetTimer = function () {\r\n\t        this.stopTimer();\r\n\t        if (!this.currentAnimationFinished) {\r\n\t            this.stopAnimation();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.onTimerComplete = function () {\r\n\t        this.timer.stop();\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimator.Idle:\r\n\t                this.idle();\r\n\t                break;\r\n\t            case WinAnimator.CycleWins:\r\n\t                this.cycleWins();\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createSymbols = function (symbols, noWinSymbolsContainer, symbolsContainer, winFrameContainer, cycleContainer, sunContainer) {\r\n\t        this.symbols = symbols;\r\n\t        if (noWinSymbolsContainer != null) {\r\n\t            this.noWinSymbolsContainer = noWinSymbolsContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.noWinSymbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.noWinSymbolsContainer.name = \"NoWinSymbols\";\r\n\t            this.addChild(this.noWinSymbolsContainer);\r\n\t        }\r\n\t        if (cycleContainer != null) {\r\n\t            this.cycleContainer = cycleContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.cycleContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.cycleContainer.name = \"CycleFrames\";\r\n\t            this.addChild(this.cycleContainer);\r\n\t        }\r\n\t        if (winFrameContainer != null) {\r\n\t            this.winFrameContainer = winFrameContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.winFrameContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.winFrameContainer.name = \"WinFrames\";\r\n\t            this.addChild(this.winFrameContainer);\r\n\t        }\r\n\t        if (symbolsContainer != null) {\r\n\t            this.symbolsContainer = symbolsContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.symbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.symbolsContainer.name = \"Symbols\";\r\n\t            this.addChild(this.symbolsContainer);\r\n\t        }\r\n\t        if (sunContainer != null) {\r\n\t            this.sunContainer = sunContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.sunContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.sunContainer.name = \"Suns\";\r\n\t            this.addChild(this.sunContainer);\r\n\t        }\r\n\t        this.currentSymbols = [];\r\n\t        this.currentSuns = [];\r\n\t        this.winFrames = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.currentSymbols.push([]);\r\n\t            this.winFrames.push([]);\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                this.currentSymbols[i].push(null);\r\n\t                var symbol = this.symbols.getSymbol(11, Symbol_1.Symbol.CaseEmpty);\r\n\t                symbol.position.x = this.reelX[i] - symbol.offsetX;\r\n\t                symbol.position.y = this.reelY[i] + this.symbolHeight * j - symbol.offsetY;\r\n\t                this.winFrames[i].push(symbol);\r\n\t                this.winFrameContainer.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.currentSuns.push([]);\r\n\t            for (var j = 0; j < this.symbolCount + 1; j++) {\r\n\t                this.currentSuns[i].push(null);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.addCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n\t            var id = this.currentReels[reelIndex].symbols[symbolIndex];\r\n\t            var symbol = this.symbols.getSymbol(id - 1, Symbol_1.Symbol.CaseNormal);\r\n\t            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n\t            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\t            this.symbolsContainer.addChild(symbol);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.addTransformSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n\t            var id = this.currentReels[reelIndex].transform[symbolIndex];\r\n\t            if (id !== 10) {\r\n\t                return false;\r\n\t            }\r\n\t            var symbol = this.symbols.getSymbol(id - 1, Symbol_1.Symbol.CaseNormal);\r\n\t            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n\t            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\t            symbol.bindSymbols(this.symbols);\r\n\t            if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                if (FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"][reelIndex].customData != null &&\r\n\t                    FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"] != null &&\r\n\t                    FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"][symbolIndex] != null) {\r\n\t                    symbol.addWildMultiplier(FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"][symbolIndex]);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                symbol.removeSunMultiplier();\r\n\t            }\r\n\t            this.symbolsContainer.addChild(symbol);\r\n\t            if (this.currentReels[reelIndex].symbols[symbolIndex] == 11 && this.hasEnoughScatters()) {\r\n\t                symbol.goToCase(\"OVER_SCATTER\");\r\n\t                this._currentWinScatterSymbols.push(symbol);\r\n\t                return false;\r\n\t            }\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.hasEnoughScatters = function () {\r\n\t        var count = 0;\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if (this.currentReels[i].symbols[j] == 11) {\r\n\t                    count++;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return count > 2;\r\n\t    };\r\n\t    WinAnimator.prototype.removeCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\r\n\t            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = null;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.allSymbolsGoToCase = function (caseType, noWin) {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    symbol.goToCase(caseType);\r\n\t                    if (this.winFrames != null && this.winFrames[i][j] != null)\r\n\t                        this.winFrames[i][j].goToCase(caseType);\r\n\t                    if (noWin) {\r\n\t                        this.noWinSymbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                    else {\r\n\t                        this.symbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCase = function (winIndex, caseType, useValue) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        switch (win.trigger) {\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Payline:\r\n\t                symbols = this.winSymbolsGoToCaseAsPayline(winIndex, caseType);\r\n\t                break;\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Scatter:\r\n\t                symbols = this.winSymbolsGoToCaseAsScatter(winIndex, caseType);\r\n\t                break;\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Way:\r\n\t                symbols = this.winSymbolsGoToCaseAsWay(winIndex, caseType);\r\n\t                break;\r\n\t            default:\r\n\t                symbols = this.winSymbolsGoToCaseAsCustom(winIndex, caseType);\r\n\t                break;\r\n\t        }\r\n\t        if (useValue && symbols.length > 0 && win.amount > 0) {\r\n\t            this.value.visible = true;\r\n\t            this.value.position.x = symbols[0].position.x + symbols[0].offsetX;\r\n\t            this.value.position.y = symbols[0].position.y + symbols[0].offsetY;\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t                this.value.play(parseInt(neo_common_1.NumberUtils.devide(win.amount, BetManager_1.BetManager.CoinSize).toString()));\r\n\t            }\r\n\t            else {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t                this.value.play(parseFloat(Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, win.amount.toString())));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.value.visible = false;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsPayline = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        if (this.paylines != null) {\r\n\t            var definition = PaylinesDefinitions_1.PaylinesDefinitions.getPaylineDefinitionsById(win.paylineId, this.paylines.paylineDefinition);\r\n\t            for (var i = 0; i < definition.length; i++) {\r\n\t                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][definition[i]];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsScatter = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsWay = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsCustom = function (winIndex, caseType) {\r\n\t        return [];\r\n\t    };\r\n\t    WinAnimator.prototype.allowSymbolGoToCase = function (reelIndex, symbolIndex, caseType) {\r\n\t        return true;\r\n\t    };\r\n\t    WinAnimator.prototype.createPaylines = function (paylines) {\r\n\t        this.paylines = paylines;\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t        this.paylines.showPaylinesLabel();\r\n\t    };\r\n\t    WinAnimator.prototype.allPaylinesGoToCase = function (caseType) {\r\n\t        if (this.paylines != null) {\r\n\t            this.paylines.goToCase(caseType);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.winPaylineGoToCase = function (winIndex, caseType) {\r\n\t        if (this.paylines != null) {\r\n\t            var win = this.currentWins[winIndex];\r\n\t            if (win.trigger === neo_games_1.Communication.Game.WinTrigger.Payline) {\r\n\t                if (caseType === Payline_1.Payline.CaseWin && this.currentWins.length === 1) {\r\n\t                    this.paylines.goToCase(Payline_1.Payline.CaseSingleWin, win.paylineId);\r\n\t                }\r\n\t                else {\r\n\t                    this.paylines.goToCase(caseType, win.paylineId);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createAnimations = function (hwContainer) {\r\n\t        this.animationsContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.animationsContainer.name = \"Animations\";\r\n\t        if (hwContainer) {\r\n\t            hwContainer.addChild(this.animationsContainer);\r\n\t        }\r\n\t        else {\r\n\t            this.addChild(this.animationsContainer);\r\n\t        }\r\n\t        if (this.childs[\"Value\"]) {\r\n\t            this.value = this.childs[\"Value\"];\r\n\t            this.animationsContainer.addChild(this.value);\r\n\t        }\r\n\t        this.animations = [];\r\n\t        for (var i = 0; i < this.animationNames.length; i++) {\r\n\t            if (this.childs[this.animationNames[i]]) {\r\n\t                var animation = this.childs[this.animationNames[i]];\r\n\t                animation.visible = false;\r\n\t                animation.on(\"finished\", this.onAnimationFinished.bind(this));\r\n\t                animation.on(TimelineElement_1.TimelineElement.AnimationComplete, this.onAnimationComplete.bind(this));\r\n\t                this.animations.push(animation);\r\n\t                this.animationsContainer.addChild(animation);\r\n\t            }\r\n\t        }\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.currentAnimationFinished = true;\r\n\t    };\r\n\t    WinAnimator.prototype.resetAnimations = function () {\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.currentAnimationFinished = true;\r\n\t        for (var i = 0; i < this.animations.length; i++) {\r\n\t            var animation = this.animations[i];\r\n\t            animation.visible = false;\r\n\t            animation.stop();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.startAnimation = function () {\r\n\t        this.currentAnimationIndex = this.getAnimationIndex();\r\n\t        this.currentAnimationFinished = false;\r\n\t        var animation = this.animations[this.currentAnimationIndex];\r\n\t        animation.visible = true;\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t            animation.play(parseInt(neo_common_1.NumberUtils.devide(this.currentWin, BetManager_1.BetManager.CoinSize).toString()));\r\n\t        }\r\n\t        else {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t            animation.play(this.currentWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.stopAnimation = function () {\r\n\t        if (this.currentAnimationIndex != null) {\r\n\t            var animation = this.animations[this.currentAnimationIndex];\r\n\t            animation.visible = true;\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t                animation.goToOutro(parseInt(neo_common_1.NumberUtils.devide(this.currentWin, BetManager_1.BetManager.CoinSize).toString()));\r\n\t            }\r\n\t            else {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t                animation.goToOutro(this.currentWin);\r\n\t            }\r\n\t            this.currentAnimationIndex = null;\r\n\t            this.currentAnimationFinished = true;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.getAnimationIndex = function () {\r\n\t        return this.currentMultiplierIndex;\r\n\t    };\r\n\t    WinAnimator.prototype.onAnimationFinished = function () {\r\n\t        this.currentAnimationFinished = true;\r\n\t        this.emit(WinAnimator.FinishWinCalculation);\r\n\t    };\r\n\t    WinAnimator.prototype.onAnimationComplete = function () {\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.currentMultiplierIndex = 0;\r\n\t        this.finishFirstWins();\r\n\t    };\r\n\t    WinAnimator.prototype.idle = function () {\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol &&\r\n\t                    symbol.getCurrentCase() === Symbol_1.Symbol.CaseNormal &&\r\n\t                    symbol.getCurrentCase() !== Symbol_1.Symbol.CaseEmpty) {\r\n\t                    symbol.goToCase(Symbol_1.Symbol.CaseIdle + \"_\" + i);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.startTimer(WinAnimator.Idle, this.getIdleDelay());\r\n\t    };\r\n\t    WinAnimator.prototype.getInitialIdleDelay = function () {\r\n\t        return 60;\r\n\t    };\r\n\t    WinAnimator.prototype.getIdleDelay = function () {\r\n\t        return 240;\r\n\t    };\r\n\t    WinAnimator.prototype.getIdleActiveElementsCount = function () {\r\n\t        return 3;\r\n\t    };\r\n\t    WinAnimator.FinishWinCalculation = \"eventFinishWinCalculation\";\r\n\t    WinAnimator.FinishWinAnimator = \"eventFinishWinAnimator\";\r\n\t    WinAnimator.Idle = \"idle\";\r\n\t    WinAnimator.CycleWins = \"cycleWins\";\r\n\t    WinAnimator = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimator);\r\n\t    return WinAnimator;\r\n\t}(LayoutContainerElement_1.LayoutContainerElement));\r\n\texports.WinAnimator = WinAnimator;\r\n\texports.WinAnimatorAttributes = {\r\n\t    SOUNDS: \"Sounds\",\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 88 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SwitchElement_1 = __webpack_require__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar Payline = (function (_super) {\r\n\t    __extends(Payline, _super);\r\n\t    function Payline() {\r\n\t        _super.call(this);\r\n\t        this.zIndex = 0;\r\n\t    }\r\n\t    Payline.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.zIndex = Attributes_1.Attributes.assignFloatAttribute(node, exports.PaylineAttributes.Z_INDEX, this.zIndex);\r\n\t    };\r\n\t    Payline.CaseSelect = \"SELECT\";\r\n\t    Payline.CaseNormal = \"NORMAL\";\r\n\t    Payline.CaseNowin = \"NOWIN\";\r\n\t    Payline.CaseWin = \"WIN\";\r\n\t    Payline.CaseFirstWin = \"FIRST_WIN\";\r\n\t    Payline.CaseSingleWin = \"SINGLE_WIN\";\r\n\t    Payline.CaseSingleCycle = \"SINGLE_CYCLE\";\r\n\t    Payline.CaseCycle = \"CYCLE\";\r\n\t    Payline = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Payline);\r\n\t    return Payline;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.Payline = Payline;\r\n\texports.PaylineAttributes = {\r\n\t    Z_INDEX: \"Zindex\",\r\n\t};\r\n\n\n/***/ },\n/* 89 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar SwitchStyle_1 = __webpack_require__(90);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar AnimationElement_1 = __webpack_require__(92);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ParticleElement_1 = __webpack_require__(95);\r\n\tvar ProtonElement_1 = __webpack_require__(98);\r\n\tvar RopeElement_1 = __webpack_require__(99);\r\n\tvar SwitchElement = (function (_super) {\r\n\t    __extends(SwitchElement, _super);\r\n\t    function SwitchElement() {\r\n\t        _super.call(this);\r\n\t        this.dynamicTime = 0;\r\n\t        this.case = \"NONE\";\r\n\t        this.center = false;\r\n\t        this.timer = FrameTimer_1.CreateFrameTimer(\"timer\");\r\n\t    }\r\n\t    Object.defineProperty(SwitchElement.prototype, \"symbolWidth\", {\r\n\t        get: function () {\r\n\t            return this._symbolWidth;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._symbolWidth = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(SwitchElement.prototype, \"symbolHeight\", {\r\n\t        get: function () {\r\n\t            return this._symbolHeight;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._symbolHeight = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(SwitchElement.prototype, \"hasElements\", {\r\n\t        get: function () {\r\n\t            return this.elements != null && this.elements.childs != null;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    SwitchElement.prototype.getAllChildElements = function () {\r\n\t        if (this.hasElements) {\r\n\t            return this.elements.childs;\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SwitchElement.prototype.getChildElementByName = function (name) {\r\n\t        if (this.hasElements) {\r\n\t            return this.elements.childs[name];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SwitchElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.STYLE)) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.SwitchElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t                if (this.style.container != null) {\r\n\t                    if (node.hasAttribute(exports.SwitchElementAttributes.CLONE) &&\r\n\t                        neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.SwitchElementAttributes.CLONE))) {\r\n\t                        this.elements = this.style.container.clone();\r\n\t                    }\r\n\t                    else {\r\n\t                        this.elements = this.style.container;\r\n\t                    }\r\n\t                    this.addChild(this.elements);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.SwitchElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.CASE)) {\r\n\t            this.goToCase(node.getAttribute(exports.SwitchElementAttributes.CASE));\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.CASE)) {\r\n\t            this.goToCase(node.getAttribute(exports.SwitchElementAttributes.CASE));\r\n\t        }\r\n\t        if (node.hasAttribute(\"CustomCase\")) {\r\n\t            if (SwitchElement.CustomCase != null && SwitchElement.CustomCase != \"\") {\r\n\t                this.goToCase(SwitchElement.CustomCase);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.hasCase = function (s) {\r\n\t        return this.style != null && this.style.cases != null && this.style.cases[s];\r\n\t    };\r\n\t    SwitchElement.prototype.getCase = function (s) {\r\n\t        if (this.style != null && this.style.cases != null && this.style.cases[s]) {\r\n\t            return this.style.cases[s];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SwitchElement.prototype.getCurrentCase = function () {\r\n\t        return this.case;\r\n\t    };\r\n\t    SwitchElement.prototype.goToCase = function (s, emitEvent) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (emitEvent) {\r\n\t            this.animationComplete();\r\n\t        }\r\n\t        if (this.style != null && this.style.cases != null && this.case !== s) {\r\n\t            if (this.timer != null) {\r\n\t                this.timer.removeAllListeners(FrameTimer_1.FrameTimerEvents.Complete);\r\n\t                this.timer.stop();\r\n\t            }\r\n\t            if (this.hasCase(s)) {\r\n\t                var node = this.style.cases[s];\r\n\t                if (node != null) {\r\n\t                    if (false) {\r\n\t                        if (node.hasAttribute(\"Debug\") && node.getAttribute(\"Debug\") === \"true\") {\r\n\t                            debugger;\r\n\t                        }\r\n\t                    }\r\n\t                    if (node.hasAttribute(\"FinishHandler\")) {\r\n\t                        this.emit(SwitchElement.FinishAnimation);\r\n\t                    }\r\n\t                    var element = void 0;\r\n\t                    this.case = s;\r\n\t                    var next = node.firstElementChild;\r\n\t                    var arr = [];\r\n\t                    while (next != null) {\r\n\t                        arr.push(next.nodeName);\r\n\t                        element = this.elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.visible = true;\r\n\t                            element.updateByNode(next);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"WARNING no element child with name: \" +\r\n\t                                    next.nodeName +\r\n\t                                    \" in case: \" +\r\n\t                                    s +\r\n\t                                    \" in style: \" +\r\n\t                                    this.style.name);\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                    for (var key in this.elements.childs) {\r\n\t                        this.elements.childs[key].removeAllListeners();\r\n\t                        var found = false;\r\n\t                        for (var i = 0; i < arr.length; i++) {\r\n\t                            if (key === arr[i]) {\r\n\t                                found = true;\r\n\t                            }\r\n\t                        }\r\n\t                        if (!found) {\r\n\t                            if (this.elements.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                                this.elements.childs[key].stop();\r\n\t                            }\r\n\t                            else if (this.elements.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                                this.elements.childs[key].visible = false;\r\n\t                            }\r\n\t                            else if (this.elements.childs[key] instanceof ProtonElement_1.ProtonElement) {\r\n\t                                this.elements.childs[key].stop();\r\n\t                            }\r\n\t                            else if (this.elements.childs[key] instanceof RopeElement_1.RopeElement) {\r\n\t                                this.elements.childs[key].stop();\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE) &&\r\n\t                        this.hasCase(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE))) {\r\n\t                        if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) {\r\n\t                            var multiplier = 1;\r\n\t                            if (node.hasAttribute(exports.SwitchElementAttributes.RANDOM)) {\r\n\t                                multiplier = this.getRandomDurationMultiplier(node);\r\n\t                            }\r\n\t                            this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.goToCase.bind(this, node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE)));\r\n\t                            if (node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\r\n\t                                this.timer.start(this.dynamicTime * multiplier);\r\n\t                            }\r\n\t                            else {\r\n\t                                this.timer.start(parseInt(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) * multiplier);\r\n\t                            }\r\n\t                        }\r\n\t                        else if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)) {\r\n\t                            element = this.elements.childs[node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)];\r\n\t                            if (element) {\r\n\t                                element.on(AnimationElement_1.AnimationElement.AnimationComplete, this.goToCase.bind(this, node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE), true));\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            this.goToCase(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) {\r\n\t                            var multiplier = 1;\r\n\t                            if (node.hasAttribute(exports.SwitchElementAttributes.RANDOM)) {\r\n\t                                multiplier = this.getRandomDurationMultiplier(node);\r\n\t                            }\r\n\t                            this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.animationComplete.bind(this));\r\n\t                            if (node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\r\n\t                                this.timer.start(this.dynamicTime * multiplier);\r\n\t                            }\r\n\t                            else {\r\n\t                                this.timer.start(parseInt(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) * multiplier);\r\n\t                            }\r\n\t                        }\r\n\t                        else if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)) {\r\n\t                            element = this.elements.childs[node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)];\r\n\t                            if (element) {\r\n\t                                element.on(AnimationElement_1.AnimationElement.AnimationComplete, this.animationComplete.bind(this));\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no case: \" + s + \" for \" + this.name);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (emitEvent) {\r\n\t            this.animationComplete();\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.getRandomDurationMultiplier = function (node) {\r\n\t        var result = 1;\r\n\t        var dataArray = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.SwitchElementAttributes.RANDOM));\r\n\t        if (dataArray.length > 0) {\r\n\t            var max = dataArray[0];\r\n\t            var min = 1;\r\n\t            if (dataArray.length === 2) {\r\n\t                min = dataArray[0];\r\n\t                max = min > dataArray[1] ? min : dataArray[1];\r\n\t            }\r\n\t            result = Math.round(SwitchElement.getRandom(min, max));\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    SwitchElement.prototype.setDynamicTime = function (time) {\r\n\t        this.dynamicTime = time;\r\n\t    };\r\n\t    SwitchElement.getRandom = function (min, max) {\r\n\t        return Math.random() * (max - min) + min;\r\n\t    };\r\n\t    SwitchElement.prototype.animationComplete = function () {\r\n\t        this.emit(SwitchElement.AnimationComplete);\r\n\t    };\r\n\t    SwitchElement.prototype.clone = function () {\r\n\t        var element = new SwitchElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.case = this.case;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SwitchElement.AnimationComplete = \"animationComplete\";\r\n\t    SwitchElement.FinishAnimation = \"finishAnimation\";\r\n\t    SwitchElement.CustomCase = \"\";\r\n\t    SwitchElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SwitchElement);\r\n\t    return SwitchElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SwitchElement = SwitchElement;\r\n\texports.SwitchElementAttributes = {\r\n\t    CASE: \"Case\",\r\n\t    CLONE: \"Clone\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    STYLE: \"Style\",\r\n\t    RANDOM: \"Random\",\r\n\t};\r\n\n\n/***/ },\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar SwitchStyle = (function (_super) {\r\n\t    __extends(SwitchStyle, _super);\r\n\t    function SwitchStyle() {\r\n\t        _super.call(this);\r\n\t        this.cases = {};\r\n\t    }\r\n\t    SwitchStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    this.container = new ContainerElement_1.ContainerElement();\r\n\t                    this.container.create(next);\r\n\t                    break;\r\n\t                case \"Cases\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(exports.SwitchStyleCaseAttributes.CASE)) {\r\n\t                            if (this.cases[nextCase.getAttribute(exports.SwitchStyleCaseAttributes.CASE)] !== null) {\r\n\t                                this.cases[nextCase.getAttribute(exports.SwitchStyleCaseAttributes.CASE)] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR case \" +\r\n\t                                        nextCase.getAttribute(\"Case\") +\r\n\t                                        \" already exist in switchStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    SwitchStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], SwitchStyle);\r\n\t    return SwitchStyle;\r\n\t}(Style_1.Style));\r\n\texports.SwitchStyle = SwitchStyle;\r\n\tvar SwitchStyleAttributes = {};\r\n\texports.SwitchStyleCaseAttributes = {\r\n\t    CASE: \"Case\",\r\n\t    HANDLER: \"Handler\",\r\n\t    NEXT_CASE: \"NextCase\",\r\n\t    TIMER: \"Timer\",\r\n\t};\r\n\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Style = (function () {\r\n\t    function Style() {\r\n\t    }\r\n\t    Style.prototype.create = function (node) {\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t    };\r\n\t    Style.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Style = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], Style);\r\n\t    return Style;\r\n\t}());\r\n\texports.Style = Style;\r\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ShapeElement_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar TextElement_1 = __webpack_require__(93);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar AnimationElement = (function (_super) {\r\n\t    __extends(AnimationElement, _super);\r\n\t    function AnimationElement() {\r\n\t        var textureArray = [PIXI.Texture.EMPTY];\r\n\t        _super.call(this, textureArray, false);\r\n\t        PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\t        this._startFrame = 0;\r\n\t        this._randomStartFrame = false;\r\n\t        this.tint = 0xffffff;\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(AnimationElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AnimationElement.prototype.update = function (deltaTime) {\r\n\t        if (this.playing) {\r\n\t            _super.prototype.update.call(this, deltaTime);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    AnimationElement.prototype.createByNode = function (node) {\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.AnimationElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.STYLE) ||\r\n\t            node.hasAttribute(exports.AnimationElementAttributes.STYLE2)) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.STYLE)) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.AnimationElementAttributes.STYLE)];\r\n\t            }\r\n\t            else if (node.hasAttribute(exports.AnimationElementAttributes.STYLE2)) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.AnimationElementAttributes.STYLE2)];\r\n\t            }\r\n\t            if (this._style != null) {\r\n\t                if (this._style.startFrame != null) {\r\n\t                    this._startFrame = this._style.startFrame;\r\n\t                }\r\n\t                else {\r\n\t                    this._startFrame = null;\r\n\t                }\r\n\t                if (this._style.endFrame != null) {\r\n\t                    this._endFrame = this._style.endFrame;\r\n\t                }\r\n\t                else {\r\n\t                    this._endFrame = null;\r\n\t                }\r\n\t                if (this._style.stop != null) {\r\n\t                    this._stop = this._style.stop;\r\n\t                }\r\n\t                if (this._style.animation !== \"\") {\r\n\t                    var texture = void 0;\r\n\t                    var textures = [];\r\n\t                    if (this._endFrame != null) {\r\n\t                        for (var i = this._startFrame; i <= this._endFrame; i++) {\r\n\t                            var val = this.zerosPad(i, 4);\r\n\t                            texture = PIXI.utils.TextureCache[this._style.animation + val];\r\n\t                            if (texture != null) {\r\n\t                                if (i == this._startFrame) {\r\n\t                                    this.texture = texture;\r\n\t                                }\r\n\t                                textures.push(texture);\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"WARNING: No texture\" +\r\n\t                                        this._style.animation +\r\n\t                                        val +\r\n\t                                        \" in TextureCache of AnimationElement!\");\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING: animation has no endframe number. Use ImageElement with attribute Animation instead AnimationElement!\");\r\n\t                        }\r\n\t                        var frame = this.zerosPad(this._startFrame, 4);\r\n\t                        texture = PIXI.utils.TextureCache[this._style.animation + frame];\r\n\t                        if (texture != null) {\r\n\t                            this.texture = texture;\r\n\t                            textures.push(texture);\r\n\t                        }\r\n\t                    }\r\n\t                    this.textures = textures;\r\n\t                    if (this.textures.length > 0) {\r\n\t                        this.onComplete = this._movieClipComplete.bind(this);\r\n\t                        this.loop = false;\r\n\t                        this.animationSpeed = 1;\r\n\t                        this.tint = 0xffffff;\r\n\t                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\r\n\t                        this.alpha = 1;\r\n\t                        this._reverse = false;\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no frames in \" + this._style.animation);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR animation in style is not defined\");\r\n\t                    }\r\n\t                }\r\n\t                if (this._style.loop != null) {\r\n\t                    this.loop = this._style.loop;\r\n\t                }\r\n\t                if (this._style.reverse != null) {\r\n\t                    this._reverse = this._style.reverse;\r\n\t                }\r\n\t                if (this._style.speed != null) {\r\n\t                    this.animationSpeed = this._style.speed * (this._style.reverse ? -1 : 1);\r\n\t                }\r\n\t                if (this._style.tint != null) {\r\n\t                    this.tint = this._style.tint;\r\n\t                }\r\n\t                if (this._style.blendMode != null) {\r\n\t                    this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._style.blendMode);\r\n\t                }\r\n\t                if (this._style.alpha != null) {\r\n\t                    this.alpha = this._style.alpha;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR missing style: \" + node.getAttribute(exports.AnimationElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.AnimationElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.AnimationElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SPEED)) {\r\n\t            this.animationSpeed =\r\n\t                parseFloat(node.getAttribute(exports.AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.AnimationElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.TWEEN_PERSISTENT) ||\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.TWEEN_PERSISTENT)) != true) {\r\n\t            Tweens_1.Tweens.removeTweens(this);\r\n\t        }\r\n\t        this._randomStartFrame = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.RANDOM_START_FRAME, this._randomStartFrame);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.TINT)) {\r\n\t            if (node.getAttribute(exports.AnimationElementAttributes.TINT) === \"0\") {\r\n\t                this.tint = null;\r\n\t            }\r\n\t            else if (node.getAttribute(exports.AnimationElementAttributes.TINT) === \"dynamic\") {\r\n\t                this.tint = parseInt(AnimationElement.DynamicTint, 16);\r\n\t            }\r\n\t            else {\r\n\t                this.tint = parseInt(node.getAttribute(exports.AnimationElementAttributes.TINT), 16);\r\n\t            }\r\n\t        }\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.ALPHA, this.alpha);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.ANCHOR)) {\r\n\t            this.anchor.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.ANCHOR));\r\n\t            this.anchor.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.ANCHOR));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.ROTATION)) {\r\n\t            var rotation = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ROTATION, this.rotation);\r\n\t            this.rotation = this.degrees2radians(rotation);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.AnimationElementAttributes.START_ROTATION) ===\r\n\t                exports.AnimationElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.scale.x = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SCALE_X, this.scale.x);\r\n\t        this.scale.y = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SCALE_Y, this.scale.y);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.SCALE));\r\n\t        }\r\n\t        this.skew.x = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SKEW_X, this.skew.x);\r\n\t        this.skew.y = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SKEW_Y, this.skew.y);\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.Y, this.position.y);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.VISIBLE, this.visible);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.CONTINUE) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.CONTINUE))) {\r\n\t            this._continue = true;\r\n\t            this.playMe();\r\n\t        }\r\n\t        else {\r\n\t            this._continue = false;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.PLAY) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.PLAY))) {\r\n\t            this._stop = false;\r\n\t            this._reverse = false;\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.REVERSE) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.REVERSE))) {\r\n\t                this._reverse = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.REVERSE));\r\n\t                this.animationSpeed = this.animationSpeed * (this._reverse ? -1 : 1);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.SPEED)) {\r\n\t                this.animationSpeed =\r\n\t                    parseFloat(node.getAttribute(exports.AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n\t            }\r\n\t            this.playMe();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SPEED)) {\r\n\t            this.animationSpeed =\r\n\t                parseFloat(node.getAttribute(exports.AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.STOP)) {\r\n\t            this.showMe(parseInt(node.getAttribute(exports.AnimationElementAttributes.STOP)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SHOW_FRAME)) {\r\n\t            this.showMe(parseInt(node.getAttribute(exports.AnimationElementAttributes.SHOW_FRAME)));\r\n\t        }\r\n\t        this.runPositionTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runAlphaTween(node);\r\n\t        this.runTween(node);\r\n\t        if (false) {\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.playMe = function (frame) {\r\n\t        if (frame === void 0) { frame = -1; }\r\n\t        if (!this._continue || !this.playing) {\r\n\t            if (this._randomStartFrame && this._startFrame === 0 && this._endFrame != null) {\r\n\t                this._startFrame = Math.floor(Math.random() * this._endFrame);\r\n\t            }\r\n\t            if (this._reverse) {\r\n\t                this.gotoAndPlay(this._endFrame);\r\n\t            }\r\n\t            else {\r\n\t                this.gotoAndPlay(this._startFrame);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.showMe = function (frameNumber) {\r\n\t        if (frameNumber != null) {\r\n\t            this.gotoAndStop(frameNumber);\r\n\t        }\r\n\t        else {\r\n\t            if (this._reverse) {\r\n\t                this.gotoAndStop(this._endFrame);\r\n\t            }\r\n\t            else {\r\n\t                this.gotoAndStop(this._startFrame);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.getMovieClip = function () {\r\n\t        return this;\r\n\t    };\r\n\t    AnimationElement.prototype._movieClipComplete = function () {\r\n\t        this.emit(AnimationElement.AnimationComplete);\r\n\t    };\r\n\t    AnimationElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == exports.AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var bezierX = null;\r\n\t        var bezierY = null;\r\n\t        var bezier = null;\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_BEZIER_X) &&\r\n\t            node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y)) {\r\n\t            bezierX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_BEZIER_X));\r\n\t            bezierY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y));\r\n\t            bezier = { values: [] };\r\n\t            for (var i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\r\n\t                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\r\n\t            }\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, bezier: bezier });\r\n\t    };\r\n\t    AnimationElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = AnimationElement._getPointsFromPointsAttribute(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            tweenValues = scaleTween;\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: scaleTweenY[i],\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                return {\r\n\t                    x: scaleXValue,\r\n\t                    y: _this.scale.y,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                return {\r\n\t                    x: _this.scale.x,\r\n\t                    y: scaleYValue,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    AnimationElement.prototype.runRotationTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN));\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    AnimationElement.prototype.runAlphaTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN));\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    AnimationElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    AnimationElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    AnimationElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    AnimationElement.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    AnimationElement.prototype.clone = function () {\r\n\t        var element = new AnimationElement();\r\n\t        element._style = this._style;\r\n\t        element._startFrame = this._startFrame;\r\n\t        element._endFrame = this._endFrame;\r\n\t        element._stop = this._stop;\r\n\t        element._randomStartFrame = this._randomStartFrame;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.skew.x = this.skew.x;\r\n\t        element.skew.y = this.skew.y;\r\n\t        element.visible = this.visible;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.tint = this.tint;\r\n\t        element.name = this.name;\r\n\t        element.alpha = this.alpha;\r\n\t        if (this.textures != null && this.textures.length > 0) {\r\n\t            element.texture = this.texture;\r\n\t            element.textures = this.textures;\r\n\t            element.onComplete = element._movieClipComplete.bind(element);\r\n\t            if (this._style != null && this._style.loop != null) {\r\n\t                element.loop = this._style.loop;\r\n\t            }\r\n\t            element.animationSpeed = this.animationSpeed;\r\n\t        }\r\n\t        element.playMe = this.playMe.bind(element);\r\n\t        element.showMe = this.showMe.bind(element);\r\n\t        element.stop = this.stop.bind(element);\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    AnimationElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    AnimationElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"_markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    AnimationElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    AnimationElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = AnimationElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    AnimationElement.prototype.internalDestroy = function (options) {\r\n\t        this.onComplete = null;\r\n\t        this.textures = [PIXI.Texture.EMPTY];\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    AnimationElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    AnimationElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            var animation = this._style ? this._style.animation : \"\";\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(animation)) {\r\n\t                result += \"\\nAnimation: \" + animation;\r\n\t            }\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(AnimationElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AnimationElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    AnimationElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    AnimationElement.prototype.changeAnimationSpeed = function (speed) {\r\n\t        this.animationSpeed = speed;\r\n\t    };\r\n\t    AnimationElement.prototype._printDebugInfo = function (text, node) {\r\n\t        if (false) {\r\n\t            if (this.getChildByName(exports.AnimationElementAttributes.DEBUG_INFO) != null) {\r\n\t                this.removeChild(this.getChildByName(exports.AnimationElementAttributes.DEBUG_INFO));\r\n\t            }\r\n\t            if (node == undefined ||\r\n\t                (node.hasAttribute(exports.AnimationElementAttributes.DEBUG_INFO) &&\r\n\t                    node.getAttribute(exports.AnimationElementAttributes.DEBUG_INFO) === \"true\")) {\r\n\t                var textInfo = new TextElement_1.TextElement();\r\n\t                textInfo.name = exports.AnimationElementAttributes.DEBUG_INFO;\r\n\t                textInfo.x = textInfo.y = 0;\r\n\t                textInfo.style.fill = 0xffffff;\r\n\t                textInfo.style.fontSize = 12;\r\n\t                textInfo.text = JSON.stringify(text, null, 4);\r\n\t                this.addChild(textInfo);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.AnimationComplete = \"animationComplete\";\r\n\t    AnimationElement.DynamicTint = \"ff0000\";\r\n\t    AnimationElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    AnimationElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], AnimationElement);\r\n\t    return AnimationElement;\r\n\t}(PIXI.extras.AnimatedSprite));\r\n\texports.AnimationElement = AnimationElement;\r\n\texports.AnimationElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ANCHOR: \"Anchor\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    CONTINUE: \"Continue\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    PLAY: \"Play\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\r\n\t    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    REVERSE: \"Reverse\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    SKEW_X: \"SkewX\",\r\n\t    SKEW_Y: \"SkewY\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    SHOW_FRAME: \"ShowFrame\",\r\n\t    SPEED: \"Speed\",\r\n\t    STOP: \"Stop\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    TINT: \"Tint\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    TWEEN_PERSISTENT: \"TweenPersistent\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar TextElement = (function (_super) {\r\n\t    __extends(TextElement, _super);\r\n\t    function TextElement() {\r\n\t        _super.call(this);\r\n\t        this.text = \"\";\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    TextElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    TextElement.prototype.createByNode = function (node) {\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.FONT)) {\r\n\t            this.style.fontFamily = node.getAttribute(exports.TextElementAttributes.FONT);\r\n\t        }\r\n\t    };\r\n\t    TextElement.prototype.updateByNode = function (node) {\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.TEXT)) {\r\n\t            this.text = node.getAttribute(exports.TextElementAttributes.TEXT);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.TEXT_ALIGN)) {\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.TEXT_BASELINE)) {\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.SIZE)) {\r\n\t            this.style.fontSize = parseInt(node.getAttribute(exports.TextElementAttributes.SIZE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(exports.TextElementAttributes.ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.ROTATION)) {\r\n\t            this.rotation = parseInt(node.getAttribute(exports.TextElementAttributes.ROTATION));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.TextElementAttributes.START_ROTATION) === exports.TextElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.TextElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.TextElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.TextElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.TextElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.TextElementAttributes.X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.TextElementAttributes.Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.PIVOT_X)) {\r\n\t            this.pivot.x = parseInt(node.getAttribute(exports.TextElementAttributes.PIVOT_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.PIVOT_Y)) {\r\n\t            this.pivot.y = parseInt(node.getAttribute(exports.TextElementAttributes.PIVOT_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.VISIBLE)) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TextElementAttributes.VISIBLE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TextElementAttributes.TINT)) {\r\n\t            if (node.getAttribute(exports.TextElementAttributes.TINT) === \"0\") {\r\n\t                this.style.fill = null;\r\n\t            }\r\n\t            else {\r\n\t                this.style.fill = parseInt(node.getAttribute(exports.TextElementAttributes.TINT), 16);\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TextElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    TextElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TextElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(TextElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TextElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TextElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    TextElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    TextElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], TextElement);\r\n\t    return TextElement;\r\n\t}(PIXI.Text));\r\n\texports.TextElement = TextElement;\r\n\texports.TextElementAttributes = {\r\n\t    TEXT: \"Text\",\r\n\t    FONT: \"Font\",\r\n\t    SIZE: \"Size\",\r\n\t    TEXT_ALIGN: \"TextAlign\",\r\n\t    TEXT_ALIGN_VALUE: {\r\n\t        LEFT: \"left\",\r\n\t        CENTER: \"center\",\r\n\t        RIGHT: \"right\",\r\n\t    },\r\n\t    TEXT_BASELINE: \"TextBaseline\",\r\n\t    TEXT_BASELINE_VALUE: {\r\n\t        MIDDLE: \"middle\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t    ALPHA: \"Alpha\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar CustomUtils = (function () {\r\n\t    function CustomUtils() {\r\n\t    }\r\n\t    CustomUtils.hasFeatureGame = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse && GameManager_1.GameManager.baseResponse.wins && GameManager_1.GameManager.baseResponse.wins.length > 0) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.baseResponse.wins.length; i++) {\r\n\t                var win = GameManager_1.GameManager.baseResponse.wins[i];\r\n\t                if (win.trigger == neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t                    win.type == neo_games_1.Communication.Game.WinType.Feature) {\r\n\t                    if (win.customData[\"miniGameSymbols\"]) {\r\n\t                        return true;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    CustomUtils.getBaseCurrentWin = function (withoutFeatureWin) {\r\n\t        if (withoutFeatureWin === void 0) { withoutFeatureWin = false; }\r\n\t        var currentWin = GameManager_1.GameManager.baseResponse.currentWin;\r\n\t        if (CustomUtils.hasFeatureGame() && withoutFeatureWin) {\r\n\t            if (GameManager_1.GameManager.baseResponse && GameManager_1.GameManager.baseResponse.wins.length > 0) {\r\n\t                for (var i = 0; i < GameManager_1.GameManager.baseResponse.wins.length; i++) {\r\n\t                    var win = GameManager_1.GameManager.baseResponse.wins[i];\r\n\t                    if (win.trigger == neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t                        win.type == neo_games_1.Communication.Game.WinType.Feature) {\r\n\t                        currentWin = parseFloat(neo_common_1.NumberUtils.subtract(currentWin, win.amount));\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return currentWin;\r\n\t    };\r\n\t    CustomUtils.getBlendMode = function (blendMode) {\r\n\t        if (Scaling_1.Scaling.IsIOs) {\r\n\t            if (blendMode == 1) {\r\n\t                blendMode = 3;\r\n\t            }\r\n\t        }\r\n\t        return blendMode;\r\n\t    };\r\n\t    CustomUtils.updateSpineData = function (spineData) {\r\n\t        if (Scaling_1.Scaling.IsIOs) {\r\n\t            if (spineData != null) {\r\n\t                var spineTextData = JSON.stringify(spineData);\r\n\t                spineTextData = spineTextData.split('\"blend\":\"additive\"').join('\"blend\":\"screen\"');\r\n\t                spineData = JSON.parse(spineTextData);\r\n\t            }\r\n\t        }\r\n\t        return spineData;\r\n\t    };\r\n\t    return CustomUtils;\r\n\t}());\r\n\texports.CustomUtils = CustomUtils;\r\n\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ImageElement_1 = __webpack_require__(96);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ParticleStyle_1 = __webpack_require__(97);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar AnimationElement_1 = __webpack_require__(92);\r\n\tvar ParticleElement = (function (_super) {\r\n\t    __extends(ParticleElement, _super);\r\n\t    function ParticleElement() {\r\n\t        _super.call(this);\r\n\t        this._pool = [];\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"particleTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.addParticles.bind(this));\r\n\t        this._blendMode = 0;\r\n\t        this._created = false;\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._emitOnce = false;\r\n\t        this._preGenerate = false;\r\n\t        this._startType = \"\";\r\n\t        this._randomStartFrame = false;\r\n\t        this._maxEmit = 1;\r\n\t        this.visible = false;\r\n\t        this._target = this;\r\n\t    }\r\n\t    ParticleElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.EMIT_ONCE)) {\r\n\t                this._emitOnce = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.EMIT_ONCE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.PRE_GENERATE)) {\r\n\t                this._preGenerate = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.PRE_GENERATE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = parseInt(node.getAttribute(exports.ParticleElementAttributes.BLEND_MODE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.RANDOM_START_FRAME)) {\r\n\t                this._randomStartFrame = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.RANDOM_START_FRAME));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.STYLE) ||\r\n\t                node.hasAttribute(exports.ParticleElementAttributes.STYLE2)) {\r\n\t                if (node.hasAttribute(exports.ParticleElementAttributes.STYLE)) {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ParticleElementAttributes.STYLE)]);\r\n\t                }\r\n\t                else {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ParticleElementAttributes.STYLE2)]);\r\n\t                }\r\n\t                this._styleName = this._style.name;\r\n\t            }\r\n\t            this.createParticles();\r\n\t            this._created = true;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.updateByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ParticleElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.MAX_EMIT)) {\r\n\t            this._maxEmit = parseInt(node.getAttribute(exports.ParticleElementAttributes.MAX_EMIT));\r\n\t            this._maxEmit = this._maxEmit * 0.01;\r\n\t            if (this._maxEmit > 1) {\r\n\t                this._maxEmit = 1;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.START_TYPE)) {\r\n\t            this._startType = node.getAttribute(exports.ParticleElementAttributes.START_TYPE);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.START) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.START))) {\r\n\t            this.start(this._emitOnce, this._startType);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.STOPPING) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.STOPPING))) {\r\n\t            this.stopping();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.STOP) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.STOP))) {\r\n\t            this.stop();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.RESET) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.RESET))) {\r\n\t            this.reset();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.CLEAR) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.CLEAR))) {\r\n\t            this.clear();\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.createParticles = function () {\r\n\t        if (this._style != null) {\r\n\t            if (this._style.images != null && this._style.images.length > 0) {\r\n\t                var count = this._emitOnce ? this._style.count : this._style.calculateElements();\r\n\t                for (var i = 0; i < count; i++) {\r\n\t                    var particle = this.createParticle();\r\n\t                    this._pool.push(particle);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.createParticle = function () {\r\n\t        var particle;\r\n\t        particle = this.createParticleResource();\r\n\t        this.setupParticle(particle);\r\n\t        if (this._preGenerate) {\r\n\t            this.setupPosition(particle);\r\n\t            this.addBehaviour(particle);\r\n\t        }\r\n\t        return particle;\r\n\t    };\r\n\t    ParticleElement.prototype.createParticleResource = function () {\r\n\t        if (this._style != null) {\r\n\t            var resource = null;\r\n\t            var resourceId = this.getRandomResource();\r\n\t            if (resourceId.indexOf(\"GFX_\") > -1) {\r\n\t                resource = new ImageElement_1.ImageElement(StageController_1.StageController.getTextureByResourceId(resourceId));\r\n\t                resource.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t            }\r\n\t            else if (resourceId.indexOf(\"ANI_\") > -1) {\r\n\t                var node = document.createElement(\"Animation\");\r\n\t                node.setAttribute(\"Style2\", resourceId);\r\n\t                node.setAttribute(\"RandomStartFrame\", this._randomStartFrame.toString());\r\n\t                resource = new AnimationElement_1.AnimationElement();\r\n\t                resource.create(node);\r\n\t            }\r\n\t            var localBounds = resource.getLocalBounds();\r\n\t            resource.pivot.set(localBounds.width / 2, localBounds.height / 2);\r\n\t            return resource;\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ParticleElement.prototype.getRandomResource = function () {\r\n\t        return this._style.images[Math.floor(Math.random() * this._style.images.length)];\r\n\t    };\r\n\t    ParticleElement.prototype.setupParticle = function (particle) {\r\n\t        this.setVisibility(particle, false);\r\n\t        particle.usedInPool = false;\r\n\t        return particle;\r\n\t    };\r\n\t    ParticleElement.prototype.setVisibility = function (particle, visible) {\r\n\t        particle.visible = visible;\r\n\t        if (particle instanceof AnimationElement_1.AnimationElement) {\r\n\t            if (visible) {\r\n\t                particle.playMe();\r\n\t            }\r\n\t            else {\r\n\t                particle.stop();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.setupPosition = function (particle) {\r\n\t        var startX = 0;\r\n\t        var startY = 0;\r\n\t        switch (this._style.positionZone.type) {\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneRectangle:\r\n\t                startX = this._style.positionZone.x + Math.random() * this._style.positionZone.width;\r\n\t                startY = this._style.positionZone.y + Math.random() * this._style.positionZone.height;\r\n\t                if (this._style.positionZone.innerWidth != -1 && this._style.positionZone.innerHeight != -1) {\r\n\t                    var centerX = this._style.positionZone.x + this._style.positionZone.width / 2;\r\n\t                    var centerY = this._style.positionZone.y + this._style.positionZone.height / 2;\r\n\t                    var innerCenterX = this._style.positionZone.innerX + this._style.positionZone.innerWidth / 2;\r\n\t                    var innerCenterY = this._style.positionZone.innerY + this._style.positionZone.innerHeight / 2;\r\n\t                    var correctX = Math.random() > 0.5;\r\n\t                    if (correctX) {\r\n\t                        if (startX > centerX) {\r\n\t                            startX = this.getRandom(innerCenterX + this._style.positionZone.innerWidth * 0.5, centerX + this._style.positionZone.width * 0.5);\r\n\t                        }\r\n\t                        else {\r\n\t                            startX = this.getRandom(0, innerCenterX - this._style.positionZone.innerWidth * 0.5);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (startY > centerY) {\r\n\t                            startY = this.getRandom(innerCenterY + this._style.positionZone.innerHeight * 0.5, centerY + this._style.positionZone.height * 0.5);\r\n\t                        }\r\n\t                        else {\r\n\t                            startY = this.getRandom(0, innerCenterY - this._style.positionZone.innerHeight * 0.5);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneTarget:\r\n\t                startX =\r\n\t                    this._target.x +\r\n\t                        Math.random() * this._style.positionZone.width -\r\n\t                        this._style.positionZone.width / 2;\r\n\t                startY =\r\n\t                    this._target.y +\r\n\t                        Math.random() * this._style.positionZone.height -\r\n\t                        this._style.positionZone.height / 2;\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneLine:\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneEllipse:\r\n\t                startX = this._style.positionZone.x;\r\n\t                startY = this._style.positionZone.y;\r\n\t                var radianDegrees = Math.floor(this.getRandom(this._style.positionZone.startAngle, this._style.positionZone.angle));\r\n\t                var radian = this.degrees2radians(radianDegrees);\r\n\t                if (this._style.positionZone.innerRadius > 0) {\r\n\t                    var radius = this.getRandom(this._style.positionZone.minInnerRadius, this._style.positionZone.innerRadius);\r\n\t                    var radiusB = this.getRandom(this._style.positionZone.minInnerRadiusB, this._style.positionZone.innerRadiusB);\r\n\t                    startX = Math.floor(this._style.positionZone.innerX + radius * Math.cos(radian));\r\n\t                    startY = Math.floor(this._style.positionZone.innerY + radiusB * Math.sin(radian));\r\n\t                }\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                particle.rotation = radian;\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.setTargetElement = function (element) {\r\n\t        this._target = element;\r\n\t    };\r\n\t    ParticleElement.prototype.addBehaviour = function (particle) {\r\n\t        var particleLife = Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\r\n\t        this.addPathBehaviour(particle, particleLife);\r\n\t        this.addScaleBehaviour(particle, particleLife);\r\n\t        this.addRotationBehaviour(particle, particleLife);\r\n\t        this.addAlphaBehaviour(particle, particleLife);\r\n\t    };\r\n\t    ParticleElement.prototype.addPathBehaviour = function (particle, life) {\r\n\t        switch (this._style.positionZone.type) {\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneRectangle:\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneTarget:\r\n\t                this.addRectanglePathBehavior(particle, life);\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneEllipse:\r\n\t                this.addEllipsePathBehavior(particle, life);\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addRectanglePathBehavior = function (particle, life) {\r\n\t        if (this._style.pathValues != null) {\r\n\t            var points = [];\r\n\t            for (var i = 0; i < this._style.pathValues.length; i++) {\r\n\t                if (this._style.pathValues[i] != null &&\r\n\t                    this._style.pathValues[i].x != null &&\r\n\t                    this._style.pathValues[i].y != null) {\r\n\t                    var valueX = this._style.pathValues[i].x;\r\n\t                    var valueY = this._style.pathValues[i].y;\r\n\t                    if (this._style.pathValues[i].randomX != null) {\r\n\t                        valueX =\r\n\t                            Math.floor(Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x)) + this._style.pathValues[i].x;\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].randomY != null) {\r\n\t                        valueY =\r\n\t                            Math.floor(Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y)) + this._style.pathValues[i].y;\r\n\t                    }\r\n\t                    points.push({ x: particle.x + valueX, y: particle.y + valueY });\r\n\t                }\r\n\t            }\r\n\t            if (points.length > 2) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    bezier: {\r\n\t                        values: points,\r\n\t                    },\r\n\t                    tweenX: [particle.x, particle.x],\r\n\t                    tweenY: [particle.y, particle.y],\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t            else if (points.length === 2) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\r\n\t                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addEllipsePathBehavior = function (particle, life) {\r\n\t        var radius = this.getRandom(this._style.positionZone.minRadius, this._style.positionZone.radius);\r\n\t        var radiusB = this.getRandom(this._style.positionZone.minRadiusB, this._style.positionZone.radiusB);\r\n\t        var finalX = Math.floor(this._style.positionZone.x + radius * Math.cos(particle.rotation));\r\n\t        var finalY = Math.floor(this._style.positionZone.y + radiusB * Math.sin(particle.rotation));\r\n\t        Tweens_1.Tweens.positionTween(particle, {\r\n\t            tweenX: [particle.x, finalX],\r\n\t            tweenY: [particle.y, finalY],\r\n\t            tweenDuration: life,\r\n\t            paused: false,\r\n\t            callbackFunction: this.removeFromPool,\r\n\t            callbackParams: [particle],\r\n\t            callbackScope: null,\r\n\t        });\r\n\t    };\r\n\t    ParticleElement.prototype.addScaleBehaviour = function (particle, life) {\r\n\t        if (this._style.scaleValues != null) {\r\n\t            var scalePoints = [];\r\n\t            for (var i = 0; i < this._style.scaleValues.length; i++) {\r\n\t                var scaleValue = void 0;\r\n\t                if (this._style.scaleValues[i].length > 1) {\r\n\t                    scaleValue =\r\n\t                        Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\r\n\t                            this._style.scaleValues[i][0];\r\n\t                }\r\n\t                else {\r\n\t                    scaleValue = this._style.scaleValues[i][0];\r\n\t                }\r\n\t                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\r\n\t            }\r\n\t            if (scalePoints.length === 1) {\r\n\t                particle.scale.x = scalePoints[0].x;\r\n\t                particle.scale.y = scalePoints[0].y;\r\n\t            }\r\n\t            else if (scalePoints.length > 1) {\r\n\t                Tweens_1.Tweens.scaleTween(particle, {\r\n\t                    tweenValues: scalePoints,\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addRotationBehaviour = function (particle, life) {\r\n\t        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\r\n\t            Tweens_1.Tweens.rotationTween(particle, {\r\n\t                degrees: [this._style.rotationValues[0], this._style.rotationValues[1]],\r\n\t                tweenDuration: life,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addAlphaBehaviour = function (particle, life) {\r\n\t        if (this._style.alphaValues != null) {\r\n\t            var alphas = [];\r\n\t            for (var i = 0; i < this._style.alphaValues.length; i++) {\r\n\t                alphas.push(this._style.alphaValues[i]);\r\n\t            }\r\n\t            Tweens_1.Tweens.alphaTween(particle, {\r\n\t                alphas: alphas,\r\n\t                tweenDuration: life,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addParticles = function () {\r\n\t        if (!this._stop) {\r\n\t            var tabActive = true;\r\n\t            if (document.visibilityState != null && document.visibilityState === \"hidden\") {\r\n\t                tabActive = false;\r\n\t            }\r\n\t            if (tabActive) {\r\n\t                this.getFromPool();\r\n\t            }\r\n\t            if (!this._stopping) {\r\n\t                this._timer.start(this._style.time);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.getFreeParticleIndex = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            if (!this._pool[i].usedInPool) {\r\n\t                return i;\r\n\t            }\r\n\t        }\r\n\t        return -1;\r\n\t    };\r\n\t    ParticleElement.prototype.getFromPool = function () {\r\n\t        var count = Math.floor(this._style.count * this._maxEmit);\r\n\t        for (var i = 0; i < count; i++) {\r\n\t            var particle = void 0;\r\n\t            var index = this.getFreeParticleIndex();\r\n\t            if (index == -1) {\r\n\t                particle = this.createParticle();\r\n\t                this._pool.push(particle);\r\n\t            }\r\n\t            else {\r\n\t                particle = this._pool[index];\r\n\t            }\r\n\t            if (particle != null) {\r\n\t                particle.usedInPool = true;\r\n\t                this.addChild(particle);\r\n\t                this.setVisibility(particle, true);\r\n\t                if (this._preGenerate) {\r\n\t                    Tweens_1.Tweens.restartTweens(particle.uid);\r\n\t                }\r\n\t                else {\r\n\t                    Tweens_1.Tweens.removeTweens(particle);\r\n\t                    this.setupPosition(particle);\r\n\t                    this.addBehaviour(particle);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.start = function (emitOnce, startType) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        if (startType === void 0) { startType = \"\"; }\r\n\t        this.visible = true;\r\n\t        if (this._style != null) {\r\n\t            this._timer.stop();\r\n\t            this._emitOnce = emitOnce;\r\n\t            this._startType = startType;\r\n\t            this._stopping = emitOnce;\r\n\t            this._stop = false;\r\n\t            if (!this._emitOnce) {\r\n\t                this._timer.start(this._style.time);\r\n\t                if (this._startType === \"now\") {\r\n\t                    this.addParticles();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._startType === \"now\") {\r\n\t                    this.addParticles();\r\n\t                }\r\n\t                else {\r\n\t                    this._timer.start(this._style.time);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.stopping = function () {\r\n\t        this._stopping = true;\r\n\t    };\r\n\t    ParticleElement.prototype.stop = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t        this.removeFromStage();\r\n\t    };\r\n\t    ParticleElement.prototype.reset = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setupPosition(this._pool[i]);\r\n\t            this.setVisibility(this._pool[i], false);\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.clear = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t        this.removeAllFromPool();\r\n\t    };\r\n\t    ParticleElement.prototype.removeFromPool = function (particle) {\r\n\t        particle.visible = false;\r\n\t        if (particle instanceof AnimationElement_1.AnimationElement) {\r\n\t            particle.stop();\r\n\t        }\r\n\t        particle.usedInPool = false;\r\n\t    };\r\n\t    ParticleElement.prototype.removeFromStage = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setVisibility(this._pool[i], false);\r\n\t            this.removeChild(this._pool[i]);\r\n\t            this._pool[i].usedInPool = false;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.removeAllFromPool = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setVisibility(this._pool[i], false);\r\n\t            this.removeChild(this._pool[i]);\r\n\t            Tweens_1.Tweens.removeTweens(this._pool[i]);\r\n\t            this._pool[i].usedInPool = false;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.getRandom = function (min, max) {\r\n\t        return Math.random() * (max - min) + min;\r\n\t    };\r\n\t    ParticleElement.prototype.clone = function () {\r\n\t        var element = new ParticleElement();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element._target = this._target;\r\n\t        element._blendMode = this._blendMode;\r\n\t        element._emitOnce = this._emitOnce;\r\n\t        element._preGenerate = this._preGenerate;\r\n\t        var node = document.createElement(this.name);\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ParticleElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ParticleElement);\r\n\t    return ParticleElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ParticleElement = ParticleElement;\r\n\texports.ParticleElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    DEBUG: \"Debug\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    SPEED: \"Speed\",\r\n\t    EMIT_ONCE: \"EmitOnce\",\r\n\t    START_TYPE: \"StartType\",\r\n\t    PRE_GENERATE: \"PreGenerate\",\r\n\t    MAX_EMIT: \"MaxEmit\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    EXTEND_STYLE: \"ExtendStyle\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t    RESET: \"Reset\",\r\n\t    CLEAR: \"Clear\",\r\n\t    IMAGE: \"Image\",\r\n\t    TINT: \"Tint\",\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_TIME: \"Time\",\r\n\t    ATTR_MIN: \"Min\",\r\n\t    ATTR_MAX: \"Max\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_TYPE: \"Type\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    ATTR_RANDOM_X: \"RandomX\",\r\n\t    ATTR_RANDOM_Y: \"RandomY\",\r\n\t    ATTR_WIDTH: \"Width\",\r\n\t    ATTR_HEIGHT: \"Height\",\r\n\t    ATTR_RADIUS: \"Radius\",\r\n\t    ATTR_POSITION_RADIUS: \"PositionRadius\",\r\n\t    ATTR_RANDOM_POSITION_ANGLE: \"RandomPositionAngle\",\r\n\t    ATTR_MIN_RADIUS: \"MinRadius\",\r\n\t    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n\t    ATTR_ANGLE: \"Angle\",\r\n\t    ATTR_SHOW_ANGLE: \"ShowAngle\",\r\n\t    ATTR_VALUES: \"Values\",\r\n\t    ATTR_VALUE: \"Value\",\r\n\t    IMAGE_MASK: \"ImageMask\",\r\n\t};\r\n\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar ShapeElement_1 = __webpack_require__(13);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar TextElement_1 = __webpack_require__(93);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar ImageElement = (function (_super) {\r\n\t    __extends(ImageElement, _super);\r\n\t    function ImageElement(texture) {\r\n\t        _super.call(this, texture);\r\n\t        this.zIndex = 0;\r\n\t        this.usedInPool = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        this.tint = 0xffffff;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(ImageElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        set: function (engine) {\r\n\t            this._tweenEngine = engine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    ImageElement.prototype.createByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ImageElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.IMAGE)) {\r\n\t            this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.IMAGE));\r\n\t        }\r\n\t        else if (node.hasAttribute(exports.ImageElementAttributes.FROM_FRAME)) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.FRAME)) {\r\n\t                var frame = parseInt(node.getAttribute(exports.ImageElementAttributes.FRAME));\r\n\t                var frameStr = frame < 10 ? \"0\" + frame : frame;\r\n\t                this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.FROM_FRAME) + \"00\" + frameStr);\r\n\t            }\r\n\t            else {\r\n\t                this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.FROM_FRAME));\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(exports.ImageElementAttributes.ANIMATION)) {\r\n\t            var frame = 0;\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.FRAME)) {\r\n\t                frame = parseInt(node.getAttribute(exports.ImageElementAttributes.FRAME));\r\n\t            }\r\n\t            var frameStr = frame < 10 ? \"0\" + frame : frame;\r\n\t            this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.ANIMATION) + \"00\" + frameStr);\r\n\t        }\r\n\t        if (this.texture) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.ANCHOR)) {\r\n\t                var anchorPoints = node.getAttribute(exports.ImageElementAttributes.ANCHOR).split(\";\");\r\n\t                if (anchorPoints.length === 1) {\r\n\t                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n\t                    this.anchor.y = parseFloat(anchorPoints[0]);\r\n\t                }\r\n\t                else if (anchorPoints.length === 2) {\r\n\t                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n\t                    this.anchor.y = parseFloat(anchorPoints[1]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                if (!(this.texture && this.texture.baseTexture)) {\r\n\t                    this.log(\"ERROR Image has no texture\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.TWEEN_ENGINE)) {\r\n\t            this._tweenEngine = node.getAttribute(exports.ImageElementAttributes.TWEEN_ENGINE);\r\n\t        }\r\n\t        if (this.maskGraphics != null) {\r\n\t            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n\t                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskScaleX\")) {\r\n\t                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskScaleY\")) {\r\n\t                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskX\")) {\r\n\t                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskY\")) {\r\n\t                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ImageElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node.hasAttribute(\"RemoveTweens\") ||\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false) {\r\n\t            Tweens_1.Tweens.removeTweens(this);\r\n\t        }\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.VISIBLE, this.visible);\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.ImageElementAttributes.ALPHA, this.alpha);\r\n\t        this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this.getBlendModeByString(Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.BLEND_MODE, this.blendMode)));\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.ImageElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.ImageElementAttributes.START_ROTATION) === exports.ImageElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.Y, this.position.y);\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW_X)) {\r\n\t            this.skew.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW_Y)) {\r\n\t            this.skew.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW)) {\r\n\t            this.skew.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW));\r\n\t            this.skew.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.ImageElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.maskGraphics = shapeElement;\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.ImageElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\r\n\t                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\r\n\t                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\r\n\t                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\r\n\t                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t                this.runBitmapMaskScaleTween(node, this.maskSprite);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.TINT)) {\r\n\t            var spr = void 0;\r\n\t            if (node.getAttribute(exports.ImageElementAttributes.TINT) === \"0\") {\r\n\t                this.tint = null;\r\n\t            }\r\n\t            else if (node.getAttribute(exports.ImageElementAttributes.TINT) === \"dynamic\") {\r\n\t                this.tint = parseInt(ImageElement.DynamicTint, 16);\r\n\t            }\r\n\t            else {\r\n\t                this.tint = parseInt(node.getAttribute(exports.ImageElementAttributes.TINT), 16);\r\n\t                if (this.children != null && this.children[0] != null && this.children[0] instanceof PIXI.Sprite) {\r\n\t                    spr = this.children[0];\r\n\t                    spr.tint = this.tint;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"CustomTint\")) {\r\n\t            if (ImageElement.CustomTints[node.getAttribute(\"CustomTint\")] != null) {\r\n\t                this.tint = ImageElement.CustomTints[node.getAttribute(\"CustomTint\")];\r\n\t            }\r\n\t        }\r\n\t        if (this.maskGraphics != null) {\r\n\t            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n\t                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskScaleX\")) {\r\n\t                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskScaleY\")) {\r\n\t                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskX\")) {\r\n\t                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"MaskY\")) {\r\n\t                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n\t            }\r\n\t        }\r\n\t        this.runPositionTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runAlphaTween(node);\r\n\t        this.runTween(node);\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t        return this;\r\n\t    };\r\n\t    ImageElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == exports.ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == exports.ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ImageElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if ((!node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y)) &&\r\n\t            (!node.hasAttribute(\"PositionTweenToX\") || !node.hasAttribute(\"PositionTweenToY\")) &&\r\n\t            (!node.hasAttribute(\"AbsolutePositionTweenToX\") || !node.hasAttribute(\"AbsolutePositionTweenToY\"))) {\r\n\t            return false;\r\n\t        }\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X) &&\r\n\t            node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t            if (positionTweenPosition === exports.ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t                positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t            }\r\n\t            else {\r\n\t                positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X));\r\n\t                positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y));\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(\"PositionTweenToX\") && node.hasAttribute(\"PositionTweenToY\")) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToX\"));\r\n\t            positionTweenX.unshift(this.position.x);\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToY\"));\r\n\t            positionTweenY.unshift(this.position.y);\r\n\t        }\r\n\t        else if (node.hasAttribute(\"AbsolutePositionTweenToX\") && node.hasAttribute(\"AbsolutePositionTweenToY\")) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToX\")).map(function (value) { return _this.position.x + (value - _this.getGlobalPosition().x); });\r\n\t            positionTweenX.unshift(this.position.x);\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToY\")).map(function (value) { return _this.position.y + (value - _this.getGlobalPosition().y); });\r\n\t            positionTweenY.unshift(this.position.y);\r\n\t        }\r\n\t        var bezierX = null;\r\n\t        var bezierY = null;\r\n\t        var bezier = null;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_X) &&\r\n\t            node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_Y)) {\r\n\t            bezierX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_X));\r\n\t            bezierY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_Y));\r\n\t            bezier = { values: [] };\r\n\t            for (var i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\r\n\t                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE)) {\r\n\t                var autorotate = node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE);\r\n\t                if (parseInt(autorotate) || neo_common_1.StringUtils.parseBoolean(autorotate)) {\r\n\t                    bezier[\"autoRotate\"] = autorotate;\r\n\t                }\r\n\t                else {\r\n\t                    var autorotateArray = autorotate.split(\";\");\r\n\t                    if (autorotateArray.length == 5) {\r\n\t                        var a = autorotateArray[0], b = autorotateArray[1], c = autorotateArray[2], d = autorotateArray[3], e = autorotateArray[4];\r\n\t                        bezier[\"autoRotate\"] = [];\r\n\t                        bezier[\"autoRotate\"].push(a);\r\n\t                        bezier[\"autoRotate\"].push(b);\r\n\t                        bezier[\"autoRotate\"].push(c);\r\n\t                        bezier[\"autoRotate\"].push(parseInt(d));\r\n\t                        bezier[\"autoRotate\"].push(e == \"true\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, bezier: bezier });\r\n\t    };\r\n\t    ImageElement.prototype.runRotationTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN));\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ImageElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = ImageElement._getPointsFromPointsAttribute(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            tweenValues = scaleTween;\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: scaleTweenY[i],\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                return {\r\n\t                    x: scaleXValue,\r\n\t                    y: _this.scale.y,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                return {\r\n\t                    x: _this.scale.x,\r\n\t                    y: scaleYValue,\r\n\t                };\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t    };\r\n\t    ImageElement.prototype.runBitmapMaskScaleTween = function (node, maskObject) {\r\n\t        var scaleTweenY;\r\n\t        var tweenValues = [];\r\n\t        var tweenDuration = [];\r\n\t        var tweenEase = [];\r\n\t        var tweenDelay = [];\r\n\t        var tweenLoop = false;\r\n\t        var maskSprite = maskObject;\r\n\t        if (maskObject instanceof ShapeElement_1.ShapeElement) {\r\n\t            tweenValues = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"MaskTweenScaleY\"));\r\n\t            tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"MaskTweenYScaleDuration\") || \"120\");\r\n\t            tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE) || \"linear\");\r\n\t            tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY) || \"0\");\r\n\t            tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP, null);\r\n\t        }\r\n\t        else {\r\n\t            tweenValues = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleTweenY\"));\r\n\t            tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleYTweenDuration\") || \"120\");\r\n\t            tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE) || \"linear\");\r\n\t            tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY) || \"0\");\r\n\t            tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP, null);\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(maskSprite, \"all\");\r\n\t        Tweens_1.Tweens.customTween(maskSprite, {\r\n\t            tween: \"scale.y\",\r\n\t            tweenValues: tweenValues,\r\n\t            tweenEase: tweenEase,\r\n\t            tweenDuration: tweenDuration,\r\n\t            tweenDelay: tweenDelay,\r\n\t            tweenLoop: tweenLoop,\r\n\t        });\r\n\t    };\r\n\t    ImageElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                if (tween === \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ImageElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"~\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (property[0] == \"position\") {\r\n\t                        if (property[1] == \"x\") {\r\n\t                            value = this.position.x + (value - this.getGlobalPosition().x);\r\n\t                        }\r\n\t                        else if (property[1] == \"y\") {\r\n\t                            value = this.position.y + (value - this.getGlobalPosition().y);\r\n\t                        }\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    ImageElement.prototype.clone = function () {\r\n\t        var element = new ImageElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.anchor = this.anchor;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        if (this.texture != null) {\r\n\t            element.texture = this.texture;\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        else if (this.maskGraphics != null) {\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        this.texture = null;\r\n\t    };\r\n\t    ImageElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    ImageElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            var imgurl = this.texture && this.texture.baseTexture ? this.texture.baseTexture.imageUrl : \"\";\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(imgurl)) {\r\n\t                result += \"\\nUrl: \" + imgurl;\r\n\t            }\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(ImageElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = ImageElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    ImageElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    ImageElement.prototype._markAsCloned = function () {\r\n\t        this.markAsCloned();\r\n\t    };\r\n\t    ImageElement.prototype.markAsCloned = function () {\r\n\t        this._assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype._assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    ImageElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this._assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    ImageElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    ImageElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    ImageElement.prototype.getBlendModeByString = function (mode) {\r\n\t        mode = mode.toString();\r\n\t        switch (mode) {\r\n\t            case \"0\":\r\n\t            case \"normal\":\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t            case \"1\":\r\n\t            case \"add\":\r\n\t                return PIXI.BLEND_MODES.ADD;\r\n\t            case \"2\":\r\n\t            case \"multiply\":\r\n\t                return PIXI.BLEND_MODES.MULTIPLY;\r\n\t            case \"3\":\r\n\t            case \"screen\":\r\n\t                return PIXI.BLEND_MODES.SCREEN;\r\n\t            case \"4\":\r\n\t            case \"overlay\":\r\n\t                return PIXI.BLEND_MODES.OVERLAY;\r\n\t            case \"5\":\r\n\t            case \"darken\":\r\n\t                return PIXI.BLEND_MODES.DARKEN;\r\n\t            case \"6\":\r\n\t            case \"lighten\":\r\n\t                return PIXI.BLEND_MODES.LIGHTEN;\r\n\t            case \"7\":\r\n\t            case \"color_dodge\":\r\n\t                return PIXI.BLEND_MODES.COLOR_DODGE;\r\n\t            case \"8\":\r\n\t            case \"color_burn\":\r\n\t                return PIXI.BLEND_MODES.COLOR_BURN;\r\n\t            case \"9\":\r\n\t            case \"hard_light\":\r\n\t                return PIXI.BLEND_MODES.HARD_LIGHT;\r\n\t            case \"10\":\r\n\t            case \"soft_light\":\r\n\t                return PIXI.BLEND_MODES.SOFT_LIGHT;\r\n\t            case \"11\":\r\n\t            case \"difference\":\r\n\t                return PIXI.BLEND_MODES.DIFFERENCE;\r\n\t            case \"12\":\r\n\t            case \"exclusion\":\r\n\t                return PIXI.BLEND_MODES.EXCLUSION;\r\n\t            case \"13\":\r\n\t            case \"hue\":\r\n\t                return PIXI.BLEND_MODES.HUE;\r\n\t            case \"14\":\r\n\t            case \"saturation\":\r\n\t                return PIXI.BLEND_MODES.SATURATION;\r\n\t            case \"15\":\r\n\t            case \"color\":\r\n\t                return PIXI.BLEND_MODES.COLOR;\r\n\t            case \"16\":\r\n\t            case \"luminosity\":\r\n\t                return PIXI.BLEND_MODES.LUMINOSITY;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\r\n\t                }\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype._printDebugInfo = function (text, node) {\r\n\t        if (false) {\r\n\t            if (this.getChildByName(exports.ImageElementAttributes.DEBUG_INFO) != null) {\r\n\t                this.removeChild(this.getChildByName(exports.ImageElementAttributes.DEBUG_INFO));\r\n\t            }\r\n\t            if (node == undefined ||\r\n\t                (node.hasAttribute(exports.ImageElementAttributes.DEBUG_INFO) &&\r\n\t                    node.getAttribute(exports.ImageElementAttributes.DEBUG_INFO) === \"true\")) {\r\n\t                var textInfo = new TextElement_1.TextElement();\r\n\t                textInfo.name = exports.ImageElementAttributes.DEBUG_INFO;\r\n\t                textInfo.x = textInfo.y = 0;\r\n\t                textInfo.style.fill = 0xff0000;\r\n\t                textInfo.style.fontSize = 10;\r\n\t                textInfo.text = JSON.stringify(text, null, 4);\r\n\t                this.addChild(textInfo);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ImageElement.DynamicTint = \"ff0000\";\r\n\t    ImageElement.CustomTints = {};\r\n\t    ImageElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    ImageElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageElement);\r\n\t    return ImageElement;\r\n\t}(PIXI.Sprite));\r\n\texports.ImageElement = ImageElement;\r\n\tvar ShockwaveOptions = (function () {\r\n\t    function ShockwaveOptions() {\r\n\t    }\r\n\t    return ShockwaveOptions;\r\n\t}());\r\n\texports.ImageElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    ANCHOR: \"Anchor\",\r\n\t    ANIMATION: \"Animation\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    FRAME: \"Frame\",\r\n\t    FROM_FRAME: \"FromFrame\",\r\n\t    IMAGE: \"Image\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_BEZIER_AUTOROTATE: \"PositionTweenBezierAutorotate\",\r\n\t    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\r\n\t    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SKEW: \"Skew\",\r\n\t    SKEW_X: \"SkewX\",\r\n\t    SKEW_Y: \"SkewY\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TINT: \"Tint\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ParticleElement_1 = __webpack_require__(95);\r\n\tvar ParticleStyle = (function (_super) {\r\n\t    __extends(ParticleStyle, _super);\r\n\t    function ParticleStyle() {\r\n\t        _super.call(this);\r\n\t        this._count = 1;\r\n\t        this._time = 60;\r\n\t        this._minLife = 60;\r\n\t        this._maxLife = 120;\r\n\t        this._images = [];\r\n\t        this._randomStartFrame = false;\r\n\t        this._subParticleStyle = \"\";\r\n\t        this._positionZone = {\r\n\t            type: ParticleStyle.ZoneRectangle,\r\n\t            x: 0,\r\n\t            y: 0,\r\n\t            innerX: 0,\r\n\t            innerY: 0,\r\n\t            width: StageController_1.StageController.Width,\r\n\t            height: StageController_1.StageController.Height,\r\n\t            innerWidth: -1,\r\n\t            innerHeight: -1,\r\n\t            radius: 0,\r\n\t            minRadius: 0,\r\n\t            radiusB: 0,\r\n\t            minRadiusB: 0,\r\n\t            innerRadius: 0,\r\n\t            minInnerRadius: 0,\r\n\t            innerRadiusB: 0,\r\n\t            minInnerRadiusB: 0,\r\n\t            angle: 360,\r\n\t            startAngle: 0,\r\n\t        };\r\n\t        this._pathValues = [];\r\n\t        this._scaleValues = [];\r\n\t        this._rotationValues = [];\r\n\t        this._alphaValues = [];\r\n\t    }\r\n\t    ParticleStyle.prototype.create = function (node) {\r\n\t        this.node = node;\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.EXTEND_STYLE)) {\r\n\t            var extendStyle = (StyleManager_1.StyleManager.Styles[node.getAttribute(ParticleElement_1.ParticleElementAttributes.EXTEND_STYLE)]);\r\n\t            if (extendStyle != null && extendStyle.node != null) {\r\n\t                this.parseChildrenNodes(extendStyle.node);\r\n\t            }\r\n\t        }\r\n\t        this.parseChildrenNodes(node);\r\n\t    };\r\n\t    ParticleStyle.prototype.parseChildrenNodes = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case ParticleStyle.NodeCount:\r\n\t                    this.initializeCount(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeLife:\r\n\t                    this.initializeLife(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeImages:\r\n\t                    this.initializeImages(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodePosition:\r\n\t                    this.initializePosition(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodePath:\r\n\t                    this.initializePath(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeScale:\r\n\t                    this.initializeScale(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeRotation:\r\n\t                    this.initializeRotation(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeAlpha:\r\n\t                    this.initializeAlpha(next);\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"count\", {\r\n\t        get: function () {\r\n\t            return this._count;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"time\", {\r\n\t        get: function () {\r\n\t            return this._time;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"minLife\", {\r\n\t        get: function () {\r\n\t            return this._minLife;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"maxLife\", {\r\n\t        get: function () {\r\n\t            return this._maxLife;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"images\", {\r\n\t        get: function () {\r\n\t            return this._images;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"randomStartFrame\", {\r\n\t        get: function () {\r\n\t            return this._randomStartFrame;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"subParticleStyle\", {\r\n\t        get: function () {\r\n\t            return this._subParticleStyle;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"positionZone\", {\r\n\t        get: function () {\r\n\t            return this._positionZone;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"pathValues\", {\r\n\t        get: function () {\r\n\t            return this._pathValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"scaleValues\", {\r\n\t        get: function () {\r\n\t            return this._scaleValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"rotationValues\", {\r\n\t        get: function () {\r\n\t            return this._rotationValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"alphaValues\", {\r\n\t        get: function () {\r\n\t            return this._alphaValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ParticleStyle.prototype.calculateElements = function () {\r\n\t        var elementsPerSecond = (StageController_1.StageController.FPS / this._time) * this._count;\r\n\t        var elementsWithLife = (this._maxLife / StageController_1.StageController.FPS) * elementsPerSecond;\r\n\t        return elementsWithLife;\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeCount = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_COUNT)) {\r\n\t            this._count = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TIME)) {\r\n\t            this._time = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_TIME));\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeLife = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN)) {\r\n\t            this._minLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MIN));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MAX)) {\r\n\t            this._maxLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MAX));\r\n\t        }\r\n\t        if (this._minLife > this._maxLife) {\r\n\t            this._maxLife = this._minLife;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeImages = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME)) {\r\n\t            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME).split(\";\");\r\n\t            for (var i = 0; i < this._images.length; i++) {\r\n\t                this._images[i] = this._images[i] + \"0000\";\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(ParticleStyleAttributes.ATTR_IMAGES)) {\r\n\t            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_IMAGES).split(\";\");\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME)) {\r\n\t            this._randomStartFrame = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE)) {\r\n\t            this._subParticleStyle = node.getAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE);\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializePosition = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TYPE)) {\r\n\t            this._positionZone.type = node.getAttribute(ParticleStyleAttributes.ATTR_TYPE);\r\n\t            switch (this._positionZone.type) {\r\n\t                case ParticleStyle.ZoneRectangle:\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                        this._positionZone.innerX = this._positionZone.x;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                        this._positionZone.innerY = this._positionZone.y;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n\t                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n\t                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n\t                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n\t                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH)) {\r\n\t                        this._positionZone.innerWidth = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT)) {\r\n\t                        this._positionZone.innerHeight = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT));\r\n\t                    }\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneTarget:\r\n\t                    this._positionZone.width = 0;\r\n\t                    this._positionZone.height = 0;\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n\t                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n\t                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n\t                    }\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneDynamic:\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneLine:\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneEllipse:\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                        this._positionZone.innerX = this._positionZone.x;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                        this._positionZone.innerY = this._positionZone.y;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n\t                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n\t                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS)) {\r\n\t                        var radius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS));\r\n\t                        this._positionZone.radius = radius;\r\n\t                        this._positionZone.radiusB = radius;\r\n\t                        this._positionZone.minRadius = radius;\r\n\t                        this._positionZone.minRadiusB = radius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS)) {\r\n\t                        this._positionZone.minRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS));\r\n\t                        this._positionZone.minRadiusB = this._positionZone.minRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS_B)) {\r\n\t                        this._positionZone.radiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS_B));\r\n\t                        this._positionZone.minRadiusB = this._positionZone.radiusB;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B)) {\r\n\t                        this._positionZone.minRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS)) {\r\n\t                        var innerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS));\r\n\t                        this._positionZone.innerRadius = innerRadius;\r\n\t                        this._positionZone.innerRadiusB = innerRadius;\r\n\t                        this._positionZone.minInnerRadius = innerRadius;\r\n\t                        this._positionZone.minInnerRadiusB = innerRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS)) {\r\n\t                        this._positionZone.minInnerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS));\r\n\t                        this._positionZone.minInnerRadiusB = this._positionZone.minInnerRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B)) {\r\n\t                        this._positionZone.innerRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B));\r\n\t                        this._positionZone.minInnerRadiusB = this._positionZone.innerRadiusB;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B)) {\r\n\t                        this._positionZone.minInnerRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_ANGLE)) {\r\n\t                        var startAngle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_START_ANGLE));\r\n\t                        this._positionZone.startAngle = startAngle;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_ANGLE)) {\r\n\t                        var angle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_ANGLE));\r\n\t                        this._positionZone.angle = angle;\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown zone \" + this._positionZone.type);\r\n\t                    }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializePath = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                var path = {};\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                    path.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                }\r\n\t                else {\r\n\t                    path.x = 0;\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                    path.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                }\r\n\t                else {\r\n\t                    path.y = 0;\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\r\n\t                    path.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\r\n\t                }\r\n\t                else {\r\n\t                    path.randomX = null;\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\r\n\t                    path.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\r\n\t                }\r\n\t                else {\r\n\t                    path.randomY = null;\r\n\t                }\r\n\t                this._pathValues.push(path);\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeScale = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\r\n\t                    this._scaleValues.push(neo_common_1.ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES)));\r\n\t                }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeRotation = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n\t                    this._rotationValues.push(parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)));\r\n\t                }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeAlpha = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n\t                    this._alphaValues.push(parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)));\r\n\t                }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.ElementsReserve = 0.5;\r\n\t    ParticleStyle.ZoneRectangle = \"Rectangle\";\r\n\t    ParticleStyle.ZoneLine = \"Line\";\r\n\t    ParticleStyle.ZoneEllipse = \"Ellipse\";\r\n\t    ParticleStyle.ZoneTarget = \"Target\";\r\n\t    ParticleStyle.ZoneDynamic = \"Dynamic\";\r\n\t    ParticleStyle.NodeCount = \"Count\";\r\n\t    ParticleStyle.NodeLife = \"Life\";\r\n\t    ParticleStyle.NodeImages = \"Images\";\r\n\t    ParticleStyle.NodePosition = \"Position\";\r\n\t    ParticleStyle.NodePath = \"Path\";\r\n\t    ParticleStyle.NodeScale = \"Scale\";\r\n\t    ParticleStyle.NodeRotation = \"Rotation\";\r\n\t    ParticleStyle.NodeAlpha = \"Alpha\";\r\n\t    ParticleStyle.NodeValue = \"Value\";\r\n\t    ParticleStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ParticleStyle);\r\n\t    return ParticleStyle;\r\n\t}(Style_1.Style));\r\n\texports.ParticleStyle = ParticleStyle;\r\n\tvar ParticleStyleAttributes = {\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_TIME: \"Time\",\r\n\t    ATTR_MIN: \"Min\",\r\n\t    ATTR_MAX: \"Max\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_TYPE: \"Type\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    ATTR_INNER_X: \"InnerX\",\r\n\t    ATTR_INNER_Y: \"InnerY\",\r\n\t    ATTR_RADIUS: \"Radius\",\r\n\t    ATTR_MIN_RADIUS: \"MinRadius\",\r\n\t    ATTR_RADIUS_B: \"RadiusB\",\r\n\t    ATTR_MIN_RADIUS_B: \"MinRadiusB\",\r\n\t    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n\t    ATTR_MIN_INNER_RADIUS: \"MinInnerRadius\",\r\n\t    ATTR_INNER_RADIUS_B: \"InnerRadiusB\",\r\n\t    ATTR_MIN_INNER_RADIUS_B: \"MinInnerRadiusB\",\r\n\t    ATTR_ANGLE: \"Angle\",\r\n\t    ATTR_START_ANGLE: \"StartAngle\",\r\n\t    ATTR_RANDOM_X: \"RandomX\",\r\n\t    ATTR_RANDOM_Y: \"RandomY\",\r\n\t    ATTR_WIDTH: \"Width\",\r\n\t    ATTR_HEIGHT: \"Height\",\r\n\t    ATTR_INNER_WIDTH: \"InnerWidth\",\r\n\t    ATTR_INNER_HEIGHT: \"InnerHeight\",\r\n\t    ATTR_VALUES: \"Values\",\r\n\t    ATTR_VALUE: \"Value\",\r\n\t    ATTR_RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    ATTR_SUB_PARTICLE_STYLE: \"SubParticleStyle\",\r\n\t};\r\n\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar AnimationFrame_1 = __webpack_require__(10);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar protonProto = window[\"Proton\"];\r\n\tvar ProtonElement = (function (_super) {\r\n\t    __extends(ProtonElement, _super);\r\n\t    function ProtonElement() {\r\n\t        _super.call(this);\r\n\t        this._animationName = \"\";\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this._animationSpeed = 1;\r\n\t        this._emitters = [];\r\n\t        this._proton = new protonProto();\r\n\t        this.onProtonUpdate = this.onProtonUpdate.bind(this);\r\n\t        this.onParticleCreated = this.onParticleCreated.bind(this);\r\n\t        this.onParticleUpdate = this.onParticleUpdate.bind(this);\r\n\t        this.onParticleDead = this.onParticleDead.bind(this);\r\n\t        this.transformSprite = this.transformSprite.bind(this);\r\n\t        this.alphaDead = this.alphaDead.bind(this);\r\n\t        this.scaleDead = this.scaleDead.bind(this);\r\n\t    }\r\n\t    ProtonElement.prototype.frame_onFrame = function () {\r\n\t        this._proton.update();\r\n\t    };\r\n\t    Object.defineProperty(ProtonElement.prototype, \"frame_name\", {\r\n\t        get: function () {\r\n\t            return this._styleName;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ProtonElement.prototype.updateByNode = function (node) {\r\n\t        this.create(node);\r\n\t    };\r\n\t    ProtonElement.prototype.create = function (node) {\r\n\t        this.super2.createByNode(node);\r\n\t        if (node.hasAttribute(\"Tint\")) {\r\n\t            this._tint = parseInt(node.getAttribute(\"Tint\"), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(\"BlendMode\")) {\r\n\t            this._blendMode = parseInt(node.getAttribute(\"BlendMode\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\") || node.hasAttribute(\"Style2\")) {\r\n\t            if (node.hasAttribute(\"Style\")) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(\"Style\")];\r\n\t                this._styleName = this._style.node.nodeName;\r\n\t            }\r\n\t            else {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(\"Style2\")];\r\n\t                this._styleName = this._style.node.nodeName;\r\n\t            }\r\n\t            if (this._style != null) {\r\n\t                var next = this._style.node.firstElementChild;\r\n\t                while (next != null) {\r\n\t                    if (next.nodeName === \"Emitter\") {\r\n\t                        var emitter = new Proton.Emitter();\r\n\t                        this._emitters.push(emitter);\r\n\t                        var emitterNext = next.firstElementChild;\r\n\t                        while (emitterNext != null) {\r\n\t                            switch (emitterNext.nodeName) {\r\n\t                                case \"Rate\":\r\n\t                                    if (emitterNext.hasAttribute(\"Rate\")) {\r\n\t                                        var rate = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"Rate\"));\r\n\t                                        if (rate.length === 2) {\r\n\t                                            emitter.rate = new Proton.Rate(rate[0], rate[1]);\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            if (false) {\r\n\t                                                this.log(\"WARNING Rate has different number of parameters. It has to have two parameters.\");\r\n\t                                            }\r\n\t                                        }\r\n\t                                    }\r\n\t                                    else if (emitterNext.hasAttribute(\"RateStart\") &&\r\n\t                                        emitterNext.hasAttribute(\"RateEnd\")) {\r\n\t                                        var rateStart = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"RateStart\"));\r\n\t                                        var rateEnd = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"RateEnd\"));\r\n\t                                        emitter.rate = new Proton.Rate(new Proton.Span(rateStart[0], rateStart[1]), new Proton.Span(rateEnd[0], rateEnd[1]));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        if (false) {\r\n\t                                            this.log(\"WARNING Rate has wrong attributes\");\r\n\t                                        }\r\n\t                                    }\r\n\t                                    break;\r\n\t                                case \"Initializers\":\r\n\t                                    this.createInitializers(emitterNext, this._emitters[this._emitters.length - 1]);\r\n\t                                    break;\r\n\t                                case \"Behaviours\":\r\n\t                                    this.createBehaviours(emitterNext, this._emitters[this._emitters.length - 1]);\r\n\t                                    break;\r\n\t                                default:\r\n\t                                    if (false) {\r\n\t                                        this.log(\"WARNING unknown type for emitter\");\r\n\t                                    }\r\n\t                            }\r\n\t                            emitterNext = emitterNext.nextElementSibling;\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"Emit\")) {\r\n\t                            emitter.emit(next.getAttribute(\"Emit\"));\r\n\t                        }\r\n\t                        else {\r\n\t                            emitter.emit();\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"X\")) {\r\n\t                            emitter[\"p\"].x = parseInt(next.getAttribute(\"X\"));\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"Y\")) {\r\n\t                            emitter[\"p\"].y = parseInt(next.getAttribute(\"Y\"));\r\n\t                        }\r\n\t                    }\r\n\t                    next = next.nextElementSibling;\r\n\t                }\r\n\t                if (this._emitters != null) {\r\n\t                    for (var i = 0; i < this._emitters.length; i++) {\r\n\t                        this._proton.addEmitter(this._emitters[i]);\r\n\t                    }\r\n\t                    this._renderer = new Proton.Renderer(\"other\", this._proton);\r\n\t                    this._renderer.onProtonUpdate = this.onProtonUpdate;\r\n\t                    this._renderer.onParticleCreated = this.onParticleCreated;\r\n\t                    this._renderer.onParticleUpdate = this.onParticleUpdate;\r\n\t                    this._renderer.onParticleDead = this.onParticleDead;\r\n\t                    this._emitting = false;\r\n\t                    this.frame_stop();\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no emitters\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(\"Style\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            if (this.isFrameStopped) {\r\n\t                if (this._renderer != null) {\r\n\t                    this._renderer.stop();\r\n\t                }\r\n\t                this.removeChilds();\r\n\t                if (this._emitters != null && this._emitters.length > 0) {\r\n\t                    if (node.hasAttribute(\"Emit\")) {\r\n\t                        for (var i = 0; i < this._emitters.length; i++) {\r\n\t                            this._emitters[i].emit(node.getAttribute(\"Emit\"));\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                if (this._renderer != null) {\r\n\t                    this._renderer.start();\r\n\t                    this._stopping = false;\r\n\t                    this._emitting = true;\r\n\t                    this.frame_start();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Stopping\")) {\r\n\t            this._emitting = false;\r\n\t            this._stopping = true;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Stop\")) {\r\n\t            this.stop();\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onProtonUpdate = function () {\r\n\t        var emmiter0 = this._emitters[0];\r\n\t        if (emmiter0[\"emitTotalTimes\"] === \"none\" && emmiter0[\"particles\"].length === 0) {\r\n\t            this._emitting = false;\r\n\t            this.frame_stop();\r\n\t            this._renderer.stop();\r\n\t            this.removeChilds();\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleCreated = function (particle) {\r\n\t        if (this._stopping === false) {\r\n\t            particle.sprite = null;\r\n\t            if (particle.sprite != null) {\r\n\t                if (this._textures != null && this._textures.length > 0) {\r\n\t                    ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n\t                    this.super2.removeChild(particle.sprite);\r\n\t                }\r\n\t                else {\r\n\t                    ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                    this.super2.removeChild(particle.sprite);\r\n\t                }\r\n\t            }\r\n\t            var particleSprite = void 0;\r\n\t            if (this._textures != null && this._textures.length > 0) {\r\n\t                if (ProtonElement.Pool[this._animationName] == null) {\r\n\t                    ProtonElement.Pool[this._animationName] = [];\r\n\t                }\r\n\t                if (ProtonElement.Pool[this._animationName].length === 0) {\r\n\t                    particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\r\n\t                    particleSprite.name = this._animationName;\r\n\t                }\r\n\t                else {\r\n\t                    particleSprite = ProtonElement.Pool[this._animationName].shift();\r\n\t                }\r\n\t                particleSprite.loop = true;\r\n\t                particleSprite.animationSpeed = this._animationSpeed;\r\n\t                particleSprite.play();\r\n\t            }\r\n\t            else {\r\n\t                if (ProtonElement.Pool[particle.target.textureCacheIds[0]] == null) {\r\n\t                    ProtonElement.Pool[particle.target.textureCacheIds[0]] = [];\r\n\t                }\r\n\t                if (ProtonElement.Pool[particle.target.textureCacheIds[0]].length === 0) {\r\n\t                    particleSprite = new PIXI.Sprite(particle.target);\r\n\t                    particleSprite.name = particle.target.textureCacheIds[0];\r\n\t                }\r\n\t                else {\r\n\t                    particleSprite = ProtonElement.Pool[particle.target.textureCacheIds[0]].shift();\r\n\t                }\r\n\t            }\r\n\t            if (this._tint != null) {\r\n\t                particleSprite.tint = this._tint;\r\n\t            }\r\n\t            if (this._blendMode != null) {\r\n\t                particleSprite.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t            }\r\n\t            particleSprite.visible = true;\r\n\t            particle.sprite = particleSprite;\r\n\t            this.super2.addChild(particleSprite);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleUpdate = function (particle) {\r\n\t        if (particle != null && particle.sprite != null) {\r\n\t            this.transformSprite(particle.sprite, particle);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleDead = function (particle) {\r\n\t        if (particle.sprite != null) {\r\n\t            particle.sprite.visible = false;\r\n\t            if (particle.sprite instanceof PIXI.extras.AnimatedSprite) {\r\n\t                particle.sprite.stop();\r\n\t            }\r\n\t            this.super2.removeChild(particle.sprite);\r\n\t        }\r\n\t        particle.sprite = null;\r\n\t        particle.dead = true;\r\n\t        particle = null;\r\n\t    };\r\n\t    ProtonElement.prototype.transformSprite = function (particleSprite, particle) {\r\n\t        if (particleSprite.transform != null &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(particleSprite) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(particle)) {\r\n\t            particleSprite.position.x = particle.p.x;\r\n\t            particleSprite.position.y = particle.p.y;\r\n\t            particleSprite.scale.x = particle.scale;\r\n\t            particleSprite.scale.y = particle.scale;\r\n\t            particleSprite.anchor.x = 0.5;\r\n\t            particleSprite.anchor.y = 0.5;\r\n\t            particleSprite.alpha = particle.alpha;\r\n\t            particleSprite.rotation = (particle.rotation * Math.PI) / 180;\r\n\t        }\r\n\t        else {\r\n\t            particle.dead = true;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.stop = function () {\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this.frame_stop();\r\n\t        if (this._renderer != null) {\r\n\t            this._renderer.stop();\r\n\t        }\r\n\t        this.removeChilds();\r\n\t    };\r\n\t    ProtonElement.prototype.removeChilds = function () {\r\n\t        if (this.super2.children != null) {\r\n\t            var i = 0;\r\n\t            while (this.super2.children.length !== 0) {\r\n\t                if (this.super2.children[0] != null) {\r\n\t                    if (this._textures != null && this._textures.length > 0) {\r\n\t                        this.super2.children[0].stop();\r\n\t                        ProtonElement.Pool[this._animationName].push(this.super2.children[0]);\r\n\t                    }\r\n\t                    else {\r\n\t                        ProtonElement.Pool[this.super2.children[0].name].push(this.super2.children[0]);\r\n\t                    }\r\n\t                    this.super2.removeChild(this.super2.children[0]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.internalDestroy = function (options) {\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this.frame_stop();\r\n\t        this._textures = null;\r\n\t        if (this._emitters != null && this._emitters.length > 0) {\r\n\t            for (var i = 0; i < this._emitters.length; i++) {\r\n\t                if (this._emitters[i] != null) {\r\n\t                    this._proton.removeEmitter(this._emitters[i]);\r\n\t                    this._emitters[i].destroy();\r\n\t                    this._emitters[i] = null;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._renderer != null) {\r\n\t            this._renderer.stop();\r\n\t            this._renderer = null;\r\n\t        }\r\n\t        this._proton.destroy();\r\n\t        this._proton = null;\r\n\t        this.removeChilds();\r\n\t    };\r\n\t    ProtonElement.prototype.createInitializers = function (node, emitter) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"ImageTarget\":\r\n\t                    var imageTarget = this.addImageTarget(next);\r\n\t                    if (imageTarget != null) {\r\n\t                        emitter.addInitialize(imageTarget);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING ImageTarget is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"AnimationTarget\":\r\n\t                    this.addAnimationTarget(next);\r\n\t                    break;\r\n\t                case \"Radius\":\r\n\t                    var radius = this.addRadius(next);\r\n\t                    if (radius != null) {\r\n\t                        emitter.addInitialize(radius);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Radius is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Mass\":\r\n\t                    var mass = this.addMass(next);\r\n\t                    if (mass != null) {\r\n\t                        emitter.addInitialize(mass);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Mass is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Life\":\r\n\t                    var life = this.addLife(next);\r\n\t                    if (life != null) {\r\n\t                        emitter.addInitialize(life);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Life is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Position\":\r\n\t                    var position = this.addPosition(next);\r\n\t                    if (position != null) {\r\n\t                        emitter.addInitialize(position);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Position is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Velocity\":\r\n\t                    var velocity = this.addVelocity(next);\r\n\t                    if (velocity != null) {\r\n\t                        emitter.addInitialize(velocity);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Velocity is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown initializer\");\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.addImageTarget = function (node) {\r\n\t        if (node.hasAttribute(\"Image\")) {\r\n\t            var arr = node.getAttribute(\"Image\").split(\";\");\r\n\t            var arrTextures = [];\r\n\t            for (var i = 0; i < arr.length; i++) {\r\n\t                var resourceId = arr[i];\r\n\t                var texture = StageController_1.StageController.getTextureByResourceId(resourceId);\r\n\t                if (texture != null) {\r\n\t                    arrTextures.push(texture);\r\n\t                }\r\n\t            }\r\n\t            if (arrTextures != null && arrTextures.length > 0) {\r\n\t                return new Proton.ImageTarget(arrTextures);\r\n\t            }\r\n\t            else {\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Image target has no attribute Image\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addAnimationTarget = function (node) {\r\n\t        if (node.hasAttribute(\"Animation\") && node.hasAttribute(\"Frames\")) {\r\n\t            if (node.hasAttribute(\"Speed\")) {\r\n\t                this._animationSpeed = parseFloat(node.getAttribute(\"Speed\"));\r\n\t            }\r\n\t            this._animationName = node.getAttribute(\"Animation\");\r\n\t            this._textures = [];\r\n\t            for (var i = 0; i < parseInt(node.getAttribute(\"Frames\")) - 1; i++) {\r\n\t                var val = i < 10 ? \"0\" + i : i;\r\n\t                var texture = PIXI.Texture.fromFrame(node.getAttribute(\"Animation\") + \"00\" + val);\r\n\t                this._textures.push(texture);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.addMass = function (node) {\r\n\t        if (node.hasAttribute(\"Mass\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Mass\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Mass(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Mass(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Mass(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Mass attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Mass in Mass initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addRadius = function (node) {\r\n\t        if (node.hasAttribute(\"Radius\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Radius\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Radius(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Radius(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Radius(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Radius attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Radius in Radius initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addLife = function (node) {\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Life\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Life(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Life(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Life(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Life attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Life in Life initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addPosition = function (node) {\r\n\t        var zone = node.firstElementChild;\r\n\t        if (zone != null) {\r\n\t            return new Proton.Position(this.getZone(zone));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Position has no zone\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addVelocity = function (node) {\r\n\t        var rpan;\r\n\t        var thapan;\r\n\t        var type;\r\n\t        if (node.getAttribute(\"RPan\")) {\r\n\t            rpan = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"RPan\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute RPan in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        if (node.getAttribute(\"ThaPan\")) {\r\n\t            thapan = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ThaPan\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute ThaPan in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        if (node.getAttribute(\"Type\")) {\r\n\t            type = node.getAttribute(\"Type\");\r\n\t        }\r\n\t        if (rpan != null && thapan != null) {\r\n\t            var rpanSpan;\r\n\t            if (rpan.length === 2) {\r\n\t                rpanSpan = new Proton.Span(rpan[0], rpan[1]);\r\n\t            }\r\n\t            else {\r\n\t                rpanSpan = rpan[0];\r\n\t            }\r\n\t            var thapanSpan;\r\n\t            if (thapan.length === 2) {\r\n\t                thapanSpan = new Proton.Span(thapan[0], thapan[1]);\r\n\t            }\r\n\t            else {\r\n\t                thapanSpan = thapan[0];\r\n\t            }\r\n\t            if (type != null) {\r\n\t                return new Proton.Velocity(rpanSpan, thapanSpan, type);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Velocity(rpanSpan, thapanSpan);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING missing some attribute in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.getZone = function (node) {\r\n\t        switch (node.nodeName) {\r\n\t            case \"RectZone\":\r\n\t                var rectZoneX;\r\n\t                var rectZoneY;\r\n\t                var rectZoneWidth;\r\n\t                var rectZoneHeight;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    rectZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    rectZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Width\")) {\r\n\t                    rectZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Width in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Height\")) {\r\n\t                    rectZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Height in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (rectZoneX != null && rectZoneY != null && rectZoneWidth != null && rectZoneHeight != null) {\r\n\t                    return new Proton.RectZone(rectZoneX, rectZoneY, rectZoneWidth, rectZoneHeight);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case \"LineZone\":\r\n\t                var lineZoneX;\r\n\t                var lineZoneY;\r\n\t                var lineZoneWidth;\r\n\t                var lineZoneHeight;\r\n\t                var lineZoneDirection;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    lineZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    lineZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Width\")) {\r\n\t                    lineZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Width in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Height\")) {\r\n\t                    lineZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Height in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Direction\")) {\r\n\t                    lineZoneDirection = node.getAttribute(\"Direction\");\r\n\t                }\r\n\t                if (lineZoneX != null && lineZoneY != null && lineZoneWidth != null && lineZoneHeight != null) {\r\n\t                    if (lineZoneDirection != null) {\r\n\t                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight, lineZoneDirection);\r\n\t                    }\r\n\t                    else {\r\n\t                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight);\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case \"CircleZone\":\r\n\t                var circleZoneX;\r\n\t                var circleZoneY;\r\n\t                var circleZoneRadius;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    circleZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    circleZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Radius\")) {\r\n\t                    circleZoneRadius = parseInt(node.getAttribute(\"Radius\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Radius in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (circleZoneX != null && circleZoneY != null && circleZoneRadius != null) {\r\n\t                    return new Proton.CircleZone(circleZoneX, circleZoneY, circleZoneRadius);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknown type zone: \" + node.nodeName);\r\n\t                }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.createBehaviours = function (node, emitter) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"AlphaDead\":\r\n\t                    if (next.hasAttribute(\"Age\")) {\r\n\t                        emitter.addBehaviour(this.alphaDead(parseFloat(next.getAttribute(\"Age\"))));\r\n\t                    }\r\n\t                    else {\r\n\t                        emitter.addBehaviour(this.alphaDead(1));\r\n\t                    }\r\n\t                    break;\r\n\t                case \"ScaleDead\":\r\n\t                    emitter.addBehaviour(this.scaleDead());\r\n\t                    break;\r\n\t                case \"Alpha\":\r\n\t                    var alpha = this.addAlpha(next);\r\n\t                    if (alpha != null) {\r\n\t                        emitter.addBehaviour(alpha);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Alpha is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Scale\":\r\n\t                    var scale = this.addScale(next);\r\n\t                    if (scale != null) {\r\n\t                        emitter.addBehaviour(scale);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Scale is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Rotate\":\r\n\t                    var rotate = this.addRotate(next);\r\n\t                    if (rotate != null) {\r\n\t                        emitter.addBehaviour(rotate);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Rotate is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Color\":\r\n\t                    var color = this.addColor(next);\r\n\t                    if (color != null) {\r\n\t                        emitter.addBehaviour(color);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Color is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"CrossZone\":\r\n\t                    var crossZone = this.addCrossZone(next);\r\n\t                    if (crossZone != null) {\r\n\t                        emitter.addBehaviour(crossZone);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING CrossZone is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"RandomDrift\":\r\n\t                    var randomDrift = this.addRandomDrift(next);\r\n\t                    if (randomDrift != null) {\r\n\t                        emitter.addBehaviour(randomDrift);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING RandomDrift is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Gravity\":\r\n\t                    var gravity = this.addGravity(next);\r\n\t                    if (gravity != null) {\r\n\t                        emitter.addBehaviour(gravity);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Gravity is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown behaviour\");\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.alphaDead = function (age) {\r\n\t        var self = this;\r\n\t        return {\r\n\t            initialize: function (particle) { },\r\n\t            applyBehaviour: function (particle) {\r\n\t                if (particle.age >= age) {\r\n\t                    particle[\"transform\"][\"alphaA\"] = 1;\r\n\t                    particle[\"transform\"][\"alphaB\"] = 0;\r\n\t                }\r\n\t                if (particle.age >= particle.life) {\r\n\t                    if (particle.sprite != null) {\r\n\t                        if (self._textures != null && self._textures.length > 0) {\r\n\t                            ProtonElement.Pool[self._animationName].push(particle.sprite);\r\n\t                        }\r\n\t                        else {\r\n\t                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                        }\r\n\t                        self.super2.removeChild(particle.sprite);\r\n\t                    }\r\n\t                    particle.sprite = null;\r\n\t                    particle.dead = true;\r\n\t                    particle = null;\r\n\t                }\r\n\t            },\r\n\t        };\r\n\t    };\r\n\t    ProtonElement.prototype.scaleDead = function () {\r\n\t        var self = this;\r\n\t        return {\r\n\t            initialize: function (particle) {\r\n\t                particle.scale = 0;\r\n\t            },\r\n\t            applyBehaviour: function (particle) {\r\n\t                if (particle.energy >= 2 / 3) {\r\n\t                    particle.scale = (1 - particle.energy) * 3;\r\n\t                }\r\n\t                else if (particle.energy <= 1 / 3) {\r\n\t                    particle.scale = particle.energy * 3;\r\n\t                }\r\n\t                if (particle.scale < 0) {\r\n\t                    if (particle.sprite != null) {\r\n\t                        if (this._textures != null && this._textures.length > 0) {\r\n\t                            ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n\t                        }\r\n\t                        else {\r\n\t                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                        }\r\n\t                        self.super2.removeChild(particle.sprite);\r\n\t                    }\r\n\t                    particle.sprite = null;\r\n\t                    particle.dead = true;\r\n\t                    particle = null;\r\n\t                }\r\n\t            },\r\n\t        };\r\n\t    };\r\n\t    ProtonElement.prototype.addAlpha = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var life;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = parseFloat(node.getAttribute(\"Start\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = parseFloat(node.getAttribute(\"End\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\r\n\t        }\r\n\t        if (start != null && end != null) {\r\n\t            if (life != null) {\r\n\t                return new Proton.Alpha(start, end, life);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Alpha(start, end);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no Start or End attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addScale = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var life;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Start\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Scale has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"End\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\r\n\t        }\r\n\t        if (start != null) {\r\n\t            var startSpan;\r\n\t            if (start.length === 2) {\r\n\t                startSpan = new Proton.Span(start[0], start[1]);\r\n\t            }\r\n\t            else {\r\n\t                startSpan = start[0];\r\n\t            }\r\n\t            var endSpan;\r\n\t            if (end != null) {\r\n\t                if (end.length === 2) {\r\n\t                    endSpan = new Proton.Span(end[0], end[1]);\r\n\t                }\r\n\t                else {\r\n\t                    endSpan = end[0];\r\n\t                }\r\n\t            }\r\n\t            if (startSpan != null && endSpan != null && life != null) {\r\n\t                return new Proton.Scale(startSpan, endSpan, life);\r\n\t            }\r\n\t            else if (startSpan != null && endSpan != null) {\r\n\t                return new Proton.Scale(startSpan, endSpan);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Scale(startSpan);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Scale has no Start or End attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addRotate = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var style;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Start\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Rotate has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"End\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Rotate has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            style = node.getAttribute(\"Style\");\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Style has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        if (start != null && end != null && style != null) {\r\n\t            var startSpan;\r\n\t            if (start.length === 2) {\r\n\t                startSpan = new Proton.Span(start[0], start[1]);\r\n\t            }\r\n\t            else {\r\n\t                startSpan = start[0];\r\n\t            }\r\n\t            var endSpan;\r\n\t            if (end.length === 2) {\r\n\t                endSpan = new Proton.Span(end[0], end[1]);\r\n\t            }\r\n\t            else {\r\n\t                endSpan = start[0];\r\n\t            }\r\n\t            return new Proton.Rotate(startSpan, endSpan, style);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Rotate has no Start or End attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addRandomDrift = function (node) {\r\n\t        var driftX;\r\n\t        var driftY;\r\n\t        var delay;\r\n\t        if (node.hasAttribute(\"DriftX\")) {\r\n\t            driftX = parseFloat(node.getAttribute(\"DriftX\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute DriftX\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"DriftY\")) {\r\n\t            driftY = parseFloat(node.getAttribute(\"DriftY\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute DriftY\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Delay\")) {\r\n\t            delay = parseFloat(node.getAttribute(\"Delay\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute Delay\");\r\n\t            }\r\n\t        }\r\n\t        if (driftX != null && driftY != null && delay != null) {\r\n\t            return new Proton.RandomDrift(driftX, driftY, delay);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no valid attributes\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addGravity = function (node) {\r\n\t        var gravity;\r\n\t        if (node.hasAttribute(\"Gravity\")) {\r\n\t            gravity = parseFloat(node.getAttribute(\"Gravity\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Gravity has no attribute Gravity\");\r\n\t            }\r\n\t        }\r\n\t        if (gravity != null) {\r\n\t            return new Proton.Gravity(gravity);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Gravity has no valid attributes\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addColor = function (node) {\r\n\t        var i;\r\n\t        var arr;\r\n\t        var endArr;\r\n\t        var color = [];\r\n\t        var endColor = [];\r\n\t        if (node.hasAttribute(\"Color\")) {\r\n\t            arr = node.getAttribute(\"Color\").split(\";\");\r\n\t            for (i = 0; i < arr.length; i++) {\r\n\t                color.push(neo_common_1.StringUtils.hexColor(arr[i]));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Color has no attribute Color\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"EndColor\")) {\r\n\t            endArr = node.getAttribute(\"EndColor\").split(\";\");\r\n\t            for (i = 0; i < endArr.length; i++) {\r\n\t                endColor.push(neo_common_1.StringUtils.hexColor(endArr[i]));\r\n\t            }\r\n\t        }\r\n\t        if (color.length > 0) {\r\n\t            if (endColor.length > 0) {\r\n\t                return new Proton.Color(color, endColor);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Color(color);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Color has no Color attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addCrossZone = function (node) {\r\n\t        var zone;\r\n\t        var type;\r\n\t        if (node.firstElementChild != null) {\r\n\t            zone = this.getZone(node.firstElementChild);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no zone in CrossZone\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Type\")) {\r\n\t            type = node.getAttribute(\"Type\");\r\n\t        }\r\n\t        if (zone != null) {\r\n\t            if (type != null) {\r\n\t                return new Proton.CrossZone(zone, type);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.CrossZone(zone);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no zone in CrossZone\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.clone = function () {\r\n\t        var element = new ProtonElement();\r\n\t        element.super2.position.x = this.super2.position.x;\r\n\t        element.super2.position.y = this.super2.position.y;\r\n\t        element.super2.pivot.x = this.super2.pivot.x;\r\n\t        element.super2.pivot.y = this.super2.pivot.y;\r\n\t        element.super2.scale.x = this.super2.scale.x;\r\n\t        element.super2.scale.y = this.super2.scale.y;\r\n\t        element.super2.visible = this.super2.visible;\r\n\t        var node = document.createElement(\"particle\");\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element.super2._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ProtonElement.Pool = {};\r\n\t    ProtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ProtonElement);\r\n\t    return ProtonElement;\r\n\t}(AnimationFrame_1.AnimationFrameBaseElement));\r\n\texports.ProtonElement = ProtonElement;\r\n\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar gsap_1 = __webpack_require__(17);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar RopeElement = (function (_super) {\r\n\t    __extends(RopeElement, _super);\r\n\t    function RopeElement() {\r\n\t        _super.call(this);\r\n\t        this._noWebGL = false;\r\n\t        this._rope = null;\r\n\t        this._pointsCount = 100;\r\n\t        this._bezierPoints = [];\r\n\t        this._pointsData = [];\r\n\t        this._pointsDataBuffer = [];\r\n\t        this._blendMode = 0;\r\n\t        this._animationStyle = null;\r\n\t        this._frame = 0;\r\n\t        this._tint = null;\r\n\t        this._curviness = 1;\r\n\t        this._continue = false;\r\n\t        this._isPlaying = false;\r\n\t        this._randomStartFrame = false;\r\n\t        this._time = -1;\r\n\t        this.count = 0;\r\n\t        this._ropeLength = 0;\r\n\t        this._increment = 0;\r\n\t        this._parts = [];\r\n\t        this._strength = [];\r\n\t        this._smooth = [];\r\n\t        this._created = false;\r\n\t        if (StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            this._noWebGL = true;\r\n\t        }\r\n\t    }\r\n\t    RopeElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS_COUNT)) {\r\n\t                this._pointsCount = parseInt(node.getAttribute(RopeElementAttributes.POINTS_COUNT));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(RopeElementAttributes.BLEND_MODE)));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.CURVINESS)) {\r\n\t                this._curviness = parseFloat(node.getAttribute(RopeElementAttributes.CURVINESS));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.RANDOM_START_FRAME)) {\r\n\t                this._randomStartFrame = neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.RANDOM_START_FRAME));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.TIME)) {\r\n\t                this._randomStartFrame = false;\r\n\t                this._time = parseFloat(node.getAttribute(RopeElementAttributes.TIME));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.TINT)) {\r\n\t                if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\r\n\t                    this._tint = null;\r\n\t                }\r\n\t                else {\r\n\t                    this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\r\n\t                var pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\r\n\t                var bezierData = gsap_1.BezierPlugin.bezierThrough(pointsData);\r\n\t                this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\r\n\t                var textureName = node.getAttribute(RopeElementAttributes.IMAGE);\r\n\t                if (textureName.indexOf(\"ANI_\") === 0) {\r\n\t                    this._animationStyle = StyleManager_1.StyleManager.Styles[textureName];\r\n\t                    if (this._animationStyle != null) {\r\n\t                        textureName = this._animationStyle.animation + \"0000\";\r\n\t                    }\r\n\t                }\r\n\t                this._texture = StageController_1.StageController.getTextureByResourceId(textureName);\r\n\t                if (this._texture != null) {\r\n\t                    if (this._bezierPoints.length == 0) {\r\n\t                        for (var i = 0; i < this._pointsCount; i++) {\r\n\t                            this._bezierPoints.push(new PIXI.Point(Math.round(this._texture.width / (this._pointsCount - 1)) * i, 0));\r\n\t                        }\r\n\t                    }\r\n\t                    this._rope = new PIXI.mesh.Rope(this._texture, this._bezierPoints);\r\n\t                    if (this._noWebGL) {\r\n\t                        this._rope.canvasPadding = 5;\r\n\t                    }\r\n\t                    this._rope.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t                    if (this._tint != null) {\r\n\t                        this._rope.tint = this._tint;\r\n\t                    }\r\n\t                    this.addChild(this._rope);\r\n\t                }\r\n\t            }\r\n\t            this._created = true;\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.addPoints = function (points) {\r\n\t        this._pointsDataBuffer = this._pointsDataBuffer.concat(points);\r\n\t    };\r\n\t    RopeElement.prototype.getPoints = function () {\r\n\t        return this._pointsData;\r\n\t    };\r\n\t    RopeElement.prototype.updateByNode = function (node) {\r\n\t        if (this._created) {\r\n\t            _super.prototype.updateByNode.call(this, node);\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\r\n\t                var XMLpointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\r\n\t                this._pointsData = [];\r\n\t                if (node.hasAttribute(RopeElementAttributes.REVERSE_POINTS) &&\r\n\t                    neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.REVERSE_POINTS))) {\r\n\t                    this._pointsData = XMLpointsData.concat(this._pointsDataBuffer).reverse();\r\n\t                }\r\n\t                else {\r\n\t                    this._pointsData = this._pointsDataBuffer.concat(XMLpointsData);\r\n\t                }\r\n\t                this._pointsDataBuffer = [];\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.GLOBAL_POINTS)) {\r\n\t                this._pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS), true);\r\n\t                this.updatePoints(this._pointsData);\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.TINT)) {\r\n\t                if (this._rope != null) {\r\n\t                    if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\r\n\t                        this._tint = null;\r\n\t                    }\r\n\t                    else {\r\n\t                        this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\r\n\t                    }\r\n\t                    this._rope.tint = this._tint;\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\r\n\t                var textureName = node.getAttribute(RopeElementAttributes.IMAGE);\r\n\t                if (textureName.indexOf(\"ANI_\") === 0) {\r\n\t                    this._animationStyle = StyleManager_1.StyleManager.Styles[textureName];\r\n\t                    if (this._animationStyle != null) {\r\n\t                        textureName = this._animationStyle.animation + \"0000\";\r\n\t                    }\r\n\t                }\r\n\t                this._texture = StageController_1.StageController.getTextureByResourceId(textureName);\r\n\t                if (this._texture != null) {\r\n\t                    if (this._rope != null) {\r\n\t                        this._rope.texture = this._texture;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.ROPE_LENGTH)) {\r\n\t                this._ropeLength = parseInt(node.getAttribute(RopeElementAttributes.ROPE_LENGTH));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.INCREMENT)) {\r\n\t                this._increment = parseFloat(node.getAttribute(RopeElementAttributes.INCREMENT));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.PARTS)) {\r\n\t                this._parts = neo_common_1.ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.PARTS));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.STRENGTH)) {\r\n\t                var strength = neo_common_1.ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.STRENGTH));\r\n\t                for (var i = 0; i < this._parts.length; i++) {\r\n\t                    if (strength.length == 2) {\r\n\t                        this._strength.push([strength[0], strength[1]]);\r\n\t                    }\r\n\t                    else {\r\n\t                        this._strength.push([strength[i * 2], strength[i * 2 + 1]]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.SMOOTH)) {\r\n\t                var smooth = neo_common_1.ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.SMOOTH));\r\n\t                for (var i = 0; i < this._parts.length; i++) {\r\n\t                    if (smooth.length == 2) {\r\n\t                        this._smooth.push([smooth[0], smooth[1]]);\r\n\t                    }\r\n\t                    else {\r\n\t                        this._smooth.push([smooth[i * 2], smooth[i * 2 + 1]]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.CONTINUE) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE))) {\r\n\t                this._continue = true;\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.PLAY) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.PLAY))) {\r\n\t                this.play();\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.STOP) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.STOP))) {\r\n\t                this.stop();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.play = function () {\r\n\t        if (this._animationStyle != null) {\r\n\t            if (!this._continue || !this._isPlaying) {\r\n\t                Tweens_1.Tweens.removeTweens(this, \"_frame\");\r\n\t                this.count = 0;\r\n\t                var tweenDuration = 60 / this._animationStyle.speed;\r\n\t                var tl = Tweens_1.Tweens.customTween(this, {\r\n\t                    tween: \"_frame\",\r\n\t                    tweenValues: [0, this._animationStyle.endFrame],\r\n\t                    tweenDuration: [tweenDuration],\r\n\t                    tweenEase: [\"linear\"],\r\n\t                    tweenLoop: this._animationStyle.loop,\r\n\t                    callbackType: \"onUpdate\",\r\n\t                    callbackFunction: this.updateTexture,\r\n\t                    callbackScope: this,\r\n\t                    callbackParams: [\"{self}\"],\r\n\t                });\r\n\t                tl.pause();\r\n\t                if (this._randomStartFrame) {\r\n\t                    tl.time(Math.random() * (tweenDuration / 60));\r\n\t                }\r\n\t                if (this._time > 0) {\r\n\t                    tl.time(this._time);\r\n\t                }\r\n\t                tl.play();\r\n\t                this._isPlaying = true;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Tweens_1.Tweens.removeTweens(this, \"rope\");\r\n\t            Tweens_1.Tweens.customTween(this, {\r\n\t                tween: \"rope\",\r\n\t                tweenValues: [0, 0],\r\n\t                tweenDuration: [120],\r\n\t                tweenEase: [\"linear\"],\r\n\t                tweenLoop: true,\r\n\t                callbackType: \"onUpdate\",\r\n\t                callbackFunction: this.updateTexture,\r\n\t                callbackScope: this,\r\n\t                callbackParams: [\"{self}\"],\r\n\t            });\r\n\t            this._isPlaying = true;\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.stop = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rope\");\r\n\t        this._isPlaying = false;\r\n\t        this.count = 0;\r\n\t    };\r\n\t    RopeElement.prototype.updateTexture = function (self) {\r\n\t        if (this._rope != null) {\r\n\t            this.count += this._increment;\r\n\t            for (var i = 0; i < this._pointsCount; i++) {\r\n\t                for (var j = 0; j < this._parts.length; j++) {\r\n\t                    if (i > this._parts[j]) {\r\n\t                        this._rope.points[i].y = Math.sin(i * this._smooth[j][0] + this.count) * this._strength[j][0];\r\n\t                        this._rope.points[i].x =\r\n\t                            i * this._ropeLength + Math.cos(i * this._smooth[j][1] + this.count) * this._strength[j][1];\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._animationStyle != null) {\r\n\t            var currentFrame = Math.round(this._frame);\r\n\t            if (currentFrame > self.previousValue || currentFrame == 0) {\r\n\t                this._rope.texture = StageController_1.StageController.getTextureByResourceId(this._animationStyle.animation + this.zerosPad(currentFrame, 4));\r\n\t            }\r\n\t            self.previousValue = currentFrame;\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    RopeElement.prototype.updateMeshPoints = function (points) {\r\n\t        if (this._rope != null) {\r\n\t            for (var i = 0; i < this._pointsCount; i++) {\r\n\t                this._rope.points[i].x = points[i].x;\r\n\t                this._rope.points[i].y = points[i].y;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.updatePoints = function (points) {\r\n\t        var bezierData = gsap_1.BezierPlugin.bezierThrough(points, this._curviness);\r\n\t        this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\r\n\t        this.updateMeshPoints(this._bezierPoints);\r\n\t    };\r\n\t    RopeElement.prototype.formatPoints = function (points, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result = [];\r\n\t        var regex = /\\[(.*?)\\]/g;\r\n\t        var data = points.match(regex);\r\n\t        for (var i = 0; i < data.length; i++) {\r\n\t            var pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\r\n\t            if (pointArray.length == 2) {\r\n\t                var x = this.formatPoint(pointArray[0], \"x\", useGlobal);\r\n\t                var y = this.formatPoint(pointArray[1], \"y\", useGlobal);\r\n\t                result.push(new PIXI.Point(x, y));\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    RopeElement.prototype.formatPoint = function (value, id, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result;\r\n\t        if (value == \"c\") {\r\n\t            result = this[id];\r\n\t        }\r\n\t        else {\r\n\t            if (useGlobal) {\r\n\t                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\r\n\t            }\r\n\t            else {\r\n\t                result = parseInt(value);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    RopeElement.prototype.getBezierStepPoints = function (data, length) {\r\n\t        var segmentLength = length / data.x.length;\r\n\t        var pointPerSegment = [];\r\n\t        var bezierStepPoints = [];\r\n\t        if (data.x.length > 1) {\r\n\t            segmentLength = Math.round(segmentLength);\r\n\t            var sum = 0;\r\n\t            for (var i = 0; i < data.x.length - 1; i++) {\r\n\t                pointPerSegment.push(segmentLength);\r\n\t                sum += segmentLength;\r\n\t            }\r\n\t            pointPerSegment.push(length - sum);\r\n\t        }\r\n\t        else {\r\n\t            pointPerSegment = [segmentLength];\r\n\t        }\r\n\t        var time = 0;\r\n\t        for (var i = 0; i < data.x.length; i++) {\r\n\t            for (var j = 0; j < pointPerSegment[i]; j++) {\r\n\t                if (i + 1 < data.x.length) {\r\n\t                    time = j / pointPerSegment[i];\r\n\t                }\r\n\t                else {\r\n\t                    time = j / (pointPerSegment[i] - 1);\r\n\t                }\r\n\t                bezierStepPoints.push(this.bezier(time, data.x[i], data.y[i]));\r\n\t            }\r\n\t        }\r\n\t        return bezierStepPoints;\r\n\t    };\r\n\t    RopeElement.prototype.bezier = function (t, dataX, dataY) {\r\n\t        var cX = 3 * dataX.ba, bX = 3 * (dataX.c - dataX.b) - cX, aX = dataX.da - cX - bX;\r\n\t        var cY = 3 * dataY.ba, bY = 3 * (dataY.c - dataY.b) - cY, aY = dataY.da - cY - bY;\r\n\t        var x = aX * Math.pow(t, 3) + bX * Math.pow(t, 2) + cX * t + dataX.a;\r\n\t        var y = aY * Math.pow(t, 3) + bY * Math.pow(t, 2) + cY * t + dataY.a;\r\n\t        return new PIXI.Point(x, y);\r\n\t    };\r\n\t    RopeElement.prototype.clone = function () {\r\n\t        var element = new RopeElement();\r\n\t        element._created = this._created;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element._pointsCount = this._pointsCount;\r\n\t        element._texture = this._texture;\r\n\t        element._blendMode = this._blendMode;\r\n\t        element._animationStyle = this._animationStyle;\r\n\t        element._frame = this._frame;\r\n\t        element._tint = this._tint;\r\n\t        element._randomStartFrame = this._randomStartFrame;\r\n\t        element._increment = this._increment;\r\n\t        element._parts = this._parts;\r\n\t        element._smooth = this._smooth;\r\n\t        element._strength = this._strength;\r\n\t        element._ropeLength = this._ropeLength;\r\n\t        element._bezierPoints = [];\r\n\t        for (var i = 0; i < this._bezierPoints.length; i++) {\r\n\t            element._bezierPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\r\n\t        }\r\n\t        element._rope = new PIXI.mesh.Rope(element._texture, element._bezierPoints);\r\n\t        element._rope.canvasPadding = this._rope.canvasPadding;\r\n\t        element._rope.blendMode = element._blendMode;\r\n\t        element.addChild(element._rope);\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    RopeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], RopeElement);\r\n\t    return RopeElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.RopeElement = RopeElement;\r\n\tvar RopeElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    CURVINESS: \"Curviness\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    TIME: \"Time\",\r\n\t    GLOBAL_POINTS: \"GlobalPoints\",\r\n\t    ROPE_LENGTH: \"RopeLength\",\r\n\t    INCREMENT: \"Increment\",\r\n\t    PARTS: \"Parts\",\r\n\t    STRENGTH: \"Strength\",\r\n\t    SMOOTH: \"Smooth\",\r\n\t    IMAGE: \"Image\",\r\n\t    PLAY: \"Play\",\r\n\t    CONTINUE: \"Continue\",\r\n\t    POINTS: \"Points\",\r\n\t    POINTS_COUNT: \"PointsCount\",\r\n\t    REVERSE_POINTS: \"ReversePoints\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar PaylinesDefinitions = (function () {\r\n\t    function PaylinesDefinitions() {\r\n\t    }\r\n\t    PaylinesDefinitions.initializePaylineDefinitions = function (paylineGroupId) {\r\n\t        var definition = {};\r\n\t        switch (paylineGroupId) {\r\n\t            case \"5x4\":\r\n\t                definition[1] = [1, 1, 1, 1, 1];\r\n\t                definition[2] = [2, 2, 2, 2, 2];\r\n\t                definition[3] = [0, 0, 0, 0, 0];\r\n\t                definition[4] = [3, 3, 3, 3, 3];\r\n\t                definition[5] = [1, 2, 3, 2, 1];\r\n\t                definition[6] = [2, 1, 0, 1, 2];\r\n\t                definition[7] = [1, 0, 0, 0, 1];\r\n\t                definition[8] = [2, 3, 3, 3, 2];\r\n\t                definition[9] = [1, 1, 2, 1, 1];\r\n\t                definition[10] = [2, 2, 1, 2, 2];\r\n\t                definition[11] = [0, 0, 1, 0, 0];\r\n\t                definition[12] = [3, 3, 2, 3, 3];\r\n\t                definition[13] = [1, 1, 2, 2, 1];\r\n\t                definition[14] = [2, 2, 1, 1, 2];\r\n\t                definition[15] = [0, 0, 0, 1, 0];\r\n\t                definition[16] = [3, 3, 3, 2, 3];\r\n\t                definition[17] = [0, 1, 2, 1, 0];\r\n\t                definition[18] = [3, 2, 1, 2, 3];\r\n\t                definition[19] = [0, 0, 1, 1, 0];\r\n\t                definition[20] = [3, 3, 2, 2, 3];\r\n\t                definition[21] = [0, 1, 0, 1, 0];\r\n\t                definition[22] = [3, 2, 3, 2, 3];\r\n\t                definition[23] = [1, 2, 2, 1, 1];\r\n\t                definition[24] = [2, 1, 1, 2, 2];\r\n\t                definition[25] = [1, 1, 0, 1, 1];\r\n\t                definition[26] = [2, 2, 3, 2, 2];\r\n\t                definition[27] = [1, 0, 1, 0, 1];\r\n\t                definition[28] = [2, 3, 2, 3, 2];\r\n\t                definition[29] = [0, 1, 1, 1, 0];\r\n\t                definition[30] = [3, 2, 2, 2, 3];\r\n\t                definition[31] = [1, 2, 1, 0, 1];\r\n\t                definition[32] = [2, 1, 2, 3, 2];\r\n\t                definition[33] = [0, 1, 1, 0, 0];\r\n\t                definition[34] = [3, 2, 2, 3, 3];\r\n\t                definition[35] = [1, 2, 2, 2, 1];\r\n\t                definition[36] = [2, 1, 1, 1, 2];\r\n\t                definition[37] = [1, 2, 1, 2, 1];\r\n\t                definition[38] = [2, 1, 2, 1, 2];\r\n\t                definition[39] = [1, 0, 1, 2, 1];\r\n\t                definition[40] = [2, 3, 2, 1, 2];\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n\t                }\r\n\t                return;\r\n\t        }\r\n\t        this._paylineGroupsDefinitions[paylineGroupId] = definition;\r\n\t    };\r\n\t    PaylinesDefinitions.getPaylineDefinitionsById = function (paylineId, paylineGroupId) {\r\n\t        if (this._paylineGroupsDefinitions != null) {\r\n\t            if (this._paylineGroupsDefinitions[paylineGroupId] != null) {\r\n\t                if (this._paylineGroupsDefinitions[paylineGroupId][paylineId] != null) {\r\n\t                    return this._paylineGroupsDefinitions[paylineGroupId][paylineId];\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no paylineId: \" + paylineId + \" in \" + paylineGroupId);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no paylines definitions\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    PaylinesDefinitions.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"PaylineDefinitions\", s);\r\n\t        }\r\n\t    };\r\n\t    PaylinesDefinitions._paylineGroupsDefinitions = {};\r\n\t    return PaylinesDefinitions;\r\n\t}());\r\n\texports.PaylinesDefinitions = PaylinesDefinitions;\r\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SwitchElement_1 = __webpack_require__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(21);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ImageTextElement_1 = __webpack_require__(102);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Symbol = (function (_super) {\r\n\t    __extends(Symbol, _super);\r\n\t    function Symbol() {\r\n\t        _super.call(this);\r\n\t        this.zIndex = 0;\r\n\t        this.amount = 0;\r\n\t        this.offsetX = 0;\r\n\t        this.offsetY = 0;\r\n\t        this.center = true;\r\n\t        this.usedInPool = false;\r\n\t        this.id = -1;\r\n\t        this.hasWinFrame = true;\r\n\t    }\r\n\t    Symbol.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.offsetX = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.OFFSET_X, this.offsetX);\r\n\t        this.offsetY = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.OFFSET_Y, this.offsetY);\r\n\t        if (node.hasAttribute(exports.SymbolAttributes.OFFSET)) {\r\n\t            this.offsetX = parseFloat(node.getAttribute(exports.SymbolAttributes.OFFSET));\r\n\t            this.offsetY = parseFloat(node.getAttribute(exports.SymbolAttributes.OFFSET));\r\n\t        }\r\n\t        this.zIndex = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.Z_INDEX, this.zIndex);\r\n\t        this.type = Attributes_1.Attributes.assignStringAttribute(node, exports.SymbolAttributes.TYPE, this.type);\r\n\t        this.hasWinFrame = Attributes_1.Attributes.assignBooleanAttribute(node, \"HasWinFrame\", this.hasWinFrame);\r\n\t        if (node.hasAttribute(exports.SymbolAttributes.ID)) {\r\n\t            this.id = parseInt(node.getAttribute(exports.SymbolAttributes.ID));\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_WIDTH)) {\r\n\t            this.symbolWidth = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_WIDTH));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_HEIGHT)) {\r\n\t            this.symbolHeight = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_HEIGHT));\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.bindSymbols = function (symbols) {\r\n\t        this.symbols = symbols;\r\n\t    };\r\n\t    Symbol.prototype.removeSunMultiplier = function () {\r\n\t        if (this.elements != null && this.elements.childs[\"Mlp\"] != null) {\r\n\t            this.elements.childs[\"Mlp\"].goToCase(\"NORMAL\");\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.addSunMultiplier = function (mlp) {\r\n\t        if (this.elements != null && this.elements.childs[\"Mlp\"] != null) {\r\n\t            this.elements.childs[\"Mlp\"].goToCase(\"MLP_\" + mlp);\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.removeWildMultiplier = function () {\r\n\t        if (this.elements != null && this.elements.childs[\"Title\"] != null) {\r\n\t            this.elements.childs[\"Title\"].goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this.elements != null && this.elements.childs[\"TitleB\"] != null) {\r\n\t            this.elements.childs[\"TitleB\"].goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this.elements != null && this.elements.childs[\"NoWinTitle\"] != null) {\r\n\t            this.elements.childs[\"NoWinTitle\"].goToCase(\"NORMAL\");\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.addWildMultiplier = function (mlp) {\r\n\t        if (this.elements != null && this.elements.childs[\"Title\"] != null) {\r\n\t            this.elements.childs[\"Title\"].goToCase(\"MLP_\" + mlp);\r\n\t        }\r\n\t        if (this.elements != null && this.elements.childs[\"TitleB\"] != null) {\r\n\t            this.elements.childs[\"TitleB\"].goToCase(\"MLP_\" + mlp);\r\n\t        }\r\n\t        if (this.elements != null && this.elements.childs[\"NoWinTitle\"] != null) {\r\n\t            this.elements.childs[\"NoWinTitle\"].goToCase(\"MLP_\" + mlp);\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.goToCase = function (s, emitEvent) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (s === \"RETURN\") {\r\n\t            if (this.symbols != null) {\r\n\t                this.symbols.returnSymbol(this);\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.id === 10 && ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            if (this.case === Symbol.CaseTease && s !== Symbol.CaseWin && s !== Symbol.CaseNowin) {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (Symbol.Teas && s === \"IMPACT_TO_NORMAL\") {\r\n\t            _super.prototype.goToCase.call(this, Symbol.CaseTease, emitEvent);\r\n\t            return;\r\n\t        }\r\n\t        if (this.id === 9 && this.case === \"LOOP\") {\r\n\t            if (s === Symbol.CaseNormal || s === Symbol.CaseNowin || s === Symbol.CaseCycle) {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.goToCase.call(this, s, emitEvent);\r\n\t    };\r\n\t    Symbol.prototype.clone = function () {\r\n\t        var element = new Symbol();\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.name = this.name;\r\n\t        element.id = this.id;\r\n\t        element.style = this.style;\r\n\t        element.offsetX = this.offsetX;\r\n\t        element.offsetY = this.offsetY;\r\n\t        element.symbolWidth = this.symbolWidth;\r\n\t        element.symbolHeight = this.symbolHeight;\r\n\t        element.visible = this.visible;\r\n\t        element.case = this.case;\r\n\t        element.style = this.style;\r\n\t        element.zIndex = this.zIndex;\r\n\t        element.type = this.type;\r\n\t        element.hasWinFrame = this.hasWinFrame;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    Symbol.prototype.switchAmounts = function (on) {\r\n\t        if (on === void 0) { on = true; }\r\n\t        if (this.elements == null ||\r\n\t            this.elements.childs == null ||\r\n\t            this.elements.childs[\"Amount\"] == null ||\r\n\t            this.elements.childs[\"AmountReset\"] == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (on) {\r\n\t            this.elements.childs[\"Amount\"].alpha = 1;\r\n\t            this.elements.childs[\"AmountReset\"].alpha = 0;\r\n\t        }\r\n\t        else {\r\n\t            this.elements.childs[\"Amount\"].alpha = 0;\r\n\t            this.elements.childs[\"AmountReset\"].alpha = 1;\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.setAmount = function (value, prefixName) {\r\n\t        var amountElements = this.getAmountElements(prefixName);\r\n\t        this.amount = value;\r\n\t        for (var i = 0; i < amountElements.length; i++) {\r\n\t            amountElements[i].bitmapText.text = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, value.toString());\r\n\t            amountElements[i].realign();\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.resetAmount = function (prefixName) {\r\n\t        var amountElements = this.getAmountElements(prefixName);\r\n\t        for (var i = 0; i < amountElements.length; i++) {\r\n\t            amountElements[i].bitmapText.text = \"\";\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.getAmountElements = function (prefixName) {\r\n\t        if (prefixName === void 0) { prefixName = \"Amount\"; }\r\n\t        var result = [];\r\n\t        if (this.elements != null && this.elements.childs != null) {\r\n\t            for (var key in this.elements.childs) {\r\n\t                if (key.indexOf(prefixName) > -1 && this.elements.childs[key] instanceof ImageTextElement_1.ImageTextElement) {\r\n\t                    result.push(this.elements.childs[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    Symbol.Teas = false;\r\n\t    Symbol.CaseRotation = \"ROTATION\";\r\n\t    Symbol.CaseBlur = \"BLUR\";\r\n\t    Symbol.CaseEmpty = \"EMPTY\";\r\n\t    Symbol.CaseNormal = \"NORMAL\";\r\n\t    Symbol.CaseIdle = \"IDLE\";\r\n\t    Symbol.CaseNowin = \"NOWIN\";\r\n\t    Symbol.CaseWin = \"WIN\";\r\n\t    Symbol.CaseCycle = \"CYCLE\";\r\n\t    Symbol.CaseImpact = \"IMPACT\";\r\n\t    Symbol.CaseTease = \"TEASE\";\r\n\t    Symbol.CaseImpactWithTease = \"IMPACT_WITH_TEASE\";\r\n\t    Symbol = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Symbol);\r\n\t    return Symbol;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.Symbol = Symbol;\r\n\texports.SymbolAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    ID: \"Id\",\r\n\t    OFFSET_X: \"OffsetX\",\r\n\t    OFFSET_Y: \"OffsetY\",\r\n\t    OFFSET: \"Offset\",\r\n\t    Z_INDEX: \"Zindex\",\r\n\t    TYPE: \"Type\",\r\n\t};\r\n\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ImageTextElement = (function (_super) {\r\n\t    __extends(ImageTextElement, _super);\r\n\t    function ImageTextElement() {\r\n\t        _super.call(this);\r\n\t        this.textAlign = exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.LEFT;\r\n\t        this.textBaseline = exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.TOP;\r\n\t        this.text = \"\";\r\n\t    }\r\n\t    ImageTextElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.bitmapText == null) {\r\n\t            if (node.hasAttribute(exports.ImageTextElementAttributes.FONT)) {\r\n\t                if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT)) {\r\n\t                    this.text = node.getAttribute(exports.ImageTextElementAttributes.TEXT);\r\n\t                }\r\n\t                this.font = node.getAttribute(exports.ImageTextElementAttributes.FONT);\r\n\t                this.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t                this.addChild(this.bitmapText);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT_ALIGN)) {\r\n\t            this.textAlign = node.getAttribute(exports.ImageTextElementAttributes.TEXT_ALIGN);\r\n\t            this.realign();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT_ALIGN)) {\r\n\t            this.textBaseline = node.getAttribute(exports.ImageTextElementAttributes.TEXT_BASELINE);\r\n\t            this.realign();\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.realign = function () {\r\n\t        switch (this.textAlign) {\r\n\t            case exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.RIGHT:\r\n\t                this.bitmapText.position.x = -this.bitmapText.width;\r\n\t                break;\r\n\t            case exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.CENTER:\r\n\t                this.bitmapText.position.x = -this.bitmapText.width * 0.5;\r\n\t                break;\r\n\t            default:\r\n\t                this.bitmapText.position.x = 0;\r\n\t                break;\r\n\t        }\r\n\t        switch (this.textBaseline) {\r\n\t            case exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\r\n\t                this.bitmapText.position.y = -this.bitmapText.height;\r\n\t                break;\r\n\t            case exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\r\n\t                this.bitmapText.position.y = -this.bitmapText.height * 0.5;\r\n\t                break;\r\n\t            default:\r\n\t                this.bitmapText.position.y = 0;\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.clone = function () {\r\n\t        var element = new ImageTextElement();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageTextElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextElement);\r\n\t    return ImageTextElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ImageTextElement = ImageTextElement;\r\n\texports.ImageTextElementAttributes = {\r\n\t    TEXT: \"Text\",\r\n\t    FONT: \"Font\",\r\n\t    TEXT_ALIGN: \"TextAlign\",\r\n\t    TEXT_ALIGN_VALUE: {\r\n\t        LEFT: \"left\",\r\n\t        CENTER: \"center\",\r\n\t        RIGHT: \"right\",\r\n\t    },\r\n\t    TEXT_BASELINE: \"TextBaseline\",\r\n\t    TEXT_BASELINE_VALUE: {\r\n\t        TOP: \"top\",\r\n\t        MIDDLE: \"middle\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t};\r\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(104);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar Song_1 = __webpack_require__(105);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar ParticleElement_1 = __webpack_require__(95);\r\n\tvar ParticleGroupElement_1 = __webpack_require__(106);\r\n\tvar TimelineElement = (function (_super) {\r\n\t    __extends(TimelineElement, _super);\r\n\t    function TimelineElement() {\r\n\t        _super.call(this);\r\n\t        this._frameCounter = 0;\r\n\t        this._loop = false;\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.animate.bind(this));\r\n\t    }\r\n\t    TimelineElement.prototype.internalDestroy = function (options) {\r\n\t        this._timer.stop();\r\n\t        if (this._elements.childs != null) {\r\n\t            for (var key in this._elements.childs) {\r\n\t                if (this._elements.childs.hasOwnProperty(key)) {\r\n\t                    if (this._elements.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                        this._elements.childs[key].destroy(options);\r\n\t                    }\r\n\t                    this._elements.childs[key] = null;\r\n\t                }\r\n\t            }\r\n\t            this._elements.childs = null;\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.LOOP)) {\r\n\t            this._loop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.LOOP));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.STYLE)) {\r\n\t            this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.TimelineElementAttributes.STYLE)];\r\n\t            if (this._style != null) {\r\n\t                if (this._style.container != null) {\r\n\t                    if (node.hasAttribute(exports.TimelineElementAttributes.CLONE) &&\r\n\t                        neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.CLONE))) {\r\n\t                        this._elements = this._style.container.clone();\r\n\t                    }\r\n\t                    else {\r\n\t                        this._elements = this._style.container;\r\n\t                    }\r\n\t                    this.addChild(this._elements);\r\n\t                    if (this._style.frames != null) {\r\n\t                        this._framesArray = [];\r\n\t                        for (var key in this._style.frames) {\r\n\t                            this._framesArray.push(parseInt(key));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING no timeline\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no children\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.TimelineElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.TINT)) {\r\n\t            if (this._elements != null && this._elements.children != null && this._elements.children.length > 0) {\r\n\t                for (var i = 0; i < this._elements.children.length; i++) {\r\n\t                    var child = this._elements.children[i];\r\n\t                    if (child instanceof PIXI.DisplayObject) {\r\n\t                        if (child.children != null && child.children.length > 0) {\r\n\t                            for (var j = 0; j < child.children.length; j++) {\r\n\t                                var childOfChild = child.children[j];\r\n\t                                if (childOfChild instanceof PIXI.Sprite ||\r\n\t                                    childOfChild instanceof PIXI.extras.AnimatedSprite) {\r\n\t                                    if (node.getAttribute(exports.TimelineElementAttributes.TINT) === \"0\") {\r\n\t                                        childOfChild.tint = 0xffffff;\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        childOfChild.tint = parseInt(node.getAttribute(exports.TimelineElementAttributes.TINT), 16);\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.PLAY) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.PLAY))) {\r\n\t            if (this._framesArray != null) {\r\n\t                this.startAnimate();\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING can't play because movieClip is null\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"GoToOutro\") && neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"GoToOutro\"))) {\r\n\t            this.goToOutro();\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.play = function (winValue) {\r\n\t        if (winValue != null) {\r\n\t            this._winValue = winValue;\r\n\t        }\r\n\t        if (this._framesArray != null) {\r\n\t            this.startAnimate();\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.stop = function () {\r\n\t        if (this._elements.childs != null) {\r\n\t            for (var key in this._elements.childs) {\r\n\t                if (this._elements.childs.hasOwnProperty(key)) {\r\n\t                    Tweens_1.Tweens.removeTweens(this._elements.childs[key], \"all\");\r\n\t                    this._elements.childs[key].visible = false;\r\n\t                    if (this._elements.childs[key] instanceof ImageTextCounterElement_1.ImageTextCounterElement) {\r\n\t                        this._elements.childs[key].stop();\r\n\t                    }\r\n\t                    if (this._elements.childs[key] instanceof ParticleGroupElement_1.ParticleGroupElement) {\r\n\t                        this._elements.childs[key].stop();\r\n\t                    }\r\n\t                    if (this._elements.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                        this._elements.childs[key].stop();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.stopAnimate();\r\n\t    };\r\n\t    TimelineElement.prototype.goToOutro = function (winValue) {\r\n\t        if (winValue != null) {\r\n\t            this._winValue = winValue;\r\n\t        }\r\n\t        this._timer.stop();\r\n\t        if (this._style != null && this._style.outro != null) {\r\n\t            var node = this._style.outro;\r\n\t            if (node != null) {\r\n\t                var next = node.firstElementChild;\r\n\t                if (next != null) {\r\n\t                    while (next != null) {\r\n\t                        var element = this._elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.updateByNode(next);\r\n\t                            if (element instanceof ImageTextCounterElement_1.ImageTextCounterElement) {\r\n\t                                if (this._winValue != null) {\r\n\t                                    element.start(0, this._winValue, 0);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.force();\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._style != null && this._style.outroSounds != null) {\r\n\t                var node2 = this._style.outroSounds;\r\n\t                if (node2 != null) {\r\n\t                    var next = node2.firstElementChild;\r\n\t                    if (next != null) {\r\n\t                        while (next != null) {\r\n\t                            if (next.hasAttribute(Song_1.SongAttributes.SONG)) {\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.PLAY)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.LOOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.STOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEOUT)) {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEOUT)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            next = next.nextElementSibling;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.startAnimate = function () {\r\n\t        this._timer.stop();\r\n\t        this._frameCounter = 0;\r\n\t        if (this.children != null) {\r\n\t            if (this._framesArray[0] === 0) {\r\n\t                this.animate();\r\n\t            }\r\n\t            else {\r\n\t                this._timer.start(this._framesArray[0]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.reset = function () {\r\n\t        this.startAnimate();\r\n\t    };\r\n\t    TimelineElement.prototype.stopAnimate = function () {\r\n\t        this._timer.stop();\r\n\t    };\r\n\t    TimelineElement.prototype.animate = function () {\r\n\t        if (this._framesArray != null) {\r\n\t            if (this._framesArray[this._frameCounter] != null) {\r\n\t                this.goToFrame(this._framesArray[this._frameCounter]);\r\n\t            }\r\n\t            else {\r\n\t                this._timer.stop();\r\n\t                if (this._loop) {\r\n\t                    this.reset();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._frameCounter++;\r\n\t        if (this._framesArray[this._frameCounter] != null) {\r\n\t            this._timer.stop();\r\n\t            this._timer.start(this._framesArray[this._frameCounter] - this._framesArray[this._frameCounter - 1]);\r\n\t        }\r\n\t        else {\r\n\t            this.emit(TimelineElement.AnimationComplete);\r\n\t            this._timer.stop();\r\n\t            if (this._loop) {\r\n\t                this.reset();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.goToFrame = function (frame) {\r\n\t        if (this._style != null && this._style.frames != null) {\r\n\t            var node = this._style.frames[frame.toString()];\r\n\t            if (node.hasAttribute(\"Emit\")) {\r\n\t                this.emit(node.getAttribute(\"Emit\"));\r\n\t            }\r\n\t            if (node != null && node.childElementCount > 0) {\r\n\t                var next = node.firstElementChild;\r\n\t                if (next != null) {\r\n\t                    while (next != null) {\r\n\t                        var element = this._elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.updateByNode(next);\r\n\t                            if (element instanceof ImageTextCounterElement_1.ImageTextCounterElement && this._winValue != null) {\r\n\t                                if (element.visible) {\r\n\t                                    element.start(0, this._winValue);\r\n\t                                    this._winValue = null;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._style != null && this._style.framesSounds != null) {\r\n\t                var node2 = this._style.framesSounds[frame.toString()];\r\n\t                if (node2 != null) {\r\n\t                    var next = node2.firstElementChild;\r\n\t                    if (next != null) {\r\n\t                        while (next != null) {\r\n\t                            if (next.hasAttribute(Song_1.SongAttributes.SONG)) {\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.PLAY)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.LOOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.STOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEOUT)) {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEOUT)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            next = next.nextElementSibling;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.destroy = function (options) {\r\n\t        this._timer.stop();\r\n\t        _super.prototype.destroy.call(this, options);\r\n\t    };\r\n\t    TimelineElement.prototype.clone = function () {\r\n\t        var element = new TimelineElement();\r\n\t        element._elements = this._elements.clone();\r\n\t        element.addChild(element._elements);\r\n\t        element._style = this._style;\r\n\t        element._framesArray = this._framesArray;\r\n\t        element._loop = this._loop;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    TimelineElement.AnimationComplete = \"animationComplete\";\r\n\t    TimelineElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], TimelineElement);\r\n\t    return TimelineElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.TimelineElement = TimelineElement;\r\n\texports.TimelineElementAttributes = {\r\n\t    CLONE: \"Clone\",\r\n\t    DEBUG: \"Debug\",\r\n\t    EMIT: \"Emit\",\r\n\t    LOOP: \"Loop\",\r\n\t    PLAY: \"Play\",\r\n\t    SOUNDS: \"Sounds\",\r\n\t    STYLE: \"Style\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ImageTextElement_1 = __webpack_require__(102);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ImageTextCounterElement = (function (_super) {\r\n\t    __extends(ImageTextCounterElement, _super);\r\n\t    function ImageTextCounterElement() {\r\n\t        _super.call(this);\r\n\t        this.from = 0;\r\n\t        this.to = 0;\r\n\t        this.duration = 0;\r\n\t        this.round = false;\r\n\t        this.currentValue = 0;\r\n\t        this.finalValue = 0;\r\n\t    }\r\n\t    ImageTextCounterElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.FROM)) {\r\n\t            this.from = parseFloat(node.getAttribute(exports.ImageTextCounterElementAttributes.FROM));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.TO)) {\r\n\t            this.to = parseFloat(node.getAttribute(exports.ImageTextCounterElementAttributes.TO));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.DURATION)) {\r\n\t            this.duration = parseInt(node.getAttribute(exports.ImageTextCounterElementAttributes.DURATION));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.ROUND)) {\r\n\t            this.round = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ImageTextCounterElementAttributes.ROUND));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.ACTION)) {\r\n\t            switch (node.getAttribute(exports.ImageTextCounterElementAttributes.ACTION)) {\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.START:\r\n\t                    this.start(this.from, this.to, this.duration);\r\n\t                    break;\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.STOP:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.FORCE:\r\n\t                    this.force();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.start = function (from, to, duration) {\r\n\t        var d = duration != null ? duration : this.duration;\r\n\t        if (d <= 0 || from === to) {\r\n\t            this.currentValue = to;\r\n\t            this.finalValue = to;\r\n\t            this.onCountTo();\r\n\t        }\r\n\t        else {\r\n\t            this.currentValue = from;\r\n\t            this.finalValue = from;\r\n\t            this.onCountTo();\r\n\t            this.finalValue = to;\r\n\t            Tweens_1.Tweens.customTween(this, {\r\n\t                tween: \"currentValue\",\r\n\t                tweenValues: [this.currentValue, this.finalValue],\r\n\t                tweenDuration: [d],\r\n\t                callbackType: \"onUpdate\",\r\n\t                callbackFunction: this.onCountTo,\r\n\t                callbackScope: this,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.onCountTo = function () {\r\n\t        if (this.currentValue === this.finalValue) {\r\n\t            Tweens_1.Tweens.removeTweens(this, \"currentValue\");\r\n\t        }\r\n\t        this.bitmapText.text = neo_common_1.NumberUtils.valueToNumber(this.currentValue, this.round || ImageTextCounterElement.Round ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t        this.realign();\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.stop = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"currentValue\");\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.force = function () {\r\n\t        this.currentValue = this.finalValue;\r\n\t        this.onCountTo();\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.clone = function () {\r\n\t        var element = new ImageTextCounterElement();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.from = this.from;\r\n\t        element.to = this.to;\r\n\t        element.duration = this.duration;\r\n\t        element.round = this.round;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageTextCounterElement.Round = false;\r\n\t    ImageTextCounterElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextCounterElement);\r\n\t    return ImageTextCounterElement;\r\n\t}(ImageTextElement_1.ImageTextElement));\r\n\texports.ImageTextCounterElement = ImageTextCounterElement;\r\n\texports.ImageTextCounterElementAttributes = {\r\n\t    ROUND: \"Round\",\r\n\t    DURATION: \"Duration\",\r\n\t    FROM: \"From\",\r\n\t    TO: \"To\",\r\n\t    ACTION: \"Action\",\r\n\t    ACTION_VALUE: {\r\n\t        START: \"Start\",\r\n\t        STOP: \"Stop\",\r\n\t        FORCE: \"Force\",\r\n\t    },\r\n\t};\r\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Song = (function () {\r\n\t    function Song() {\r\n\t    }\r\n\t    Song.prototype.create = function (node) {\r\n\t        this.id = node.nodeName;\r\n\t        this.alias = node.hasAttribute(exports.SongAttributes.ALIAS) ? node.getAttribute(exports.SongAttributes.ALIAS) : null;\r\n\t        this.instance = null;\r\n\t        this.group = node.hasAttribute(exports.SongAttributes.GROUP) ? node.getAttribute(exports.SongAttributes.GROUP) : null;\r\n\t        this.volume = node.hasAttribute(exports.SongAttributes.VOLUME)\r\n\t            ? parseFloat(node.getAttribute(exports.SongAttributes.VOLUME))\r\n\t            : 1;\r\n\t        this.pan = node.hasAttribute(exports.SongAttributes.PAN) ? parseFloat(node.getAttribute(exports.SongAttributes.PAN)) : 0;\r\n\t        this.fade = 0;\r\n\t        this.fadeStartTime = 0;\r\n\t        this.fadeEndTime = 0;\r\n\t        if (node.hasAttribute(exports.SongAttributes.SONG)) {\r\n\t            if (PIXI.sound.exists(node.getAttribute(exports.SongAttributes.SONG))) {\r\n\t                this.sound = PIXI.sound.find(node.getAttribute(exports.SongAttributes.SONG));\r\n\t            }\r\n\t            else {\r\n\t                this.sound = null;\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no sound with id: \" + node.getAttribute(\"Song\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.sound = null;\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no attribute: Song\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.play = function (loop, fadeIn, reset) {\r\n\t        if (this.group === \"BackgroundMusic\" && !AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.sound !== null && (reset || this.instance === null)) {\r\n\t            this.sound.filters = this.pan === 0 ? null : [new PIXI.sound.filters.StereoFilter(this.pan)];\r\n\t            if (fadeIn > 0) {\r\n\t                this.fade = 1;\r\n\t                this.fadeStartTime = new Date().getTime();\r\n\t                this.fadeEndTime = this.fadeStartTime + fadeIn * 16.7;\r\n\t            }\r\n\t            else {\r\n\t                this.fade = 0;\r\n\t                this.fadeStartTime = 0;\r\n\t                this.fadeEndTime = 0;\r\n\t            }\r\n\t            this.playInstance(loop);\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.playInstance = function (loop) {\r\n\t        if (loop === void 0) { loop = true; }\r\n\t        this.stopInstance();\r\n\t        var volume = this.volume;\r\n\t        if (this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame) {\r\n\t            volume = 0;\r\n\t        }\r\n\t        else if (this.fade > 0) {\r\n\t            volume = this.getFadeInVolume();\r\n\t        }\r\n\t        else if (this.fade < 0) {\r\n\t            volume = this.getFadeOutVolume();\r\n\t        }\r\n\t        this.instance = (this.sound.play(this.alias !== null ? { sprite: this.alias, volume: volume } : { volume: volume }));\r\n\t        this.instance.on(\"end\", loop ? this.playInstance : this.stopInstance, this);\r\n\t        if (this.fade !== 0) {\r\n\t            this.instance.on(\"progress\", this.fade === 1 ? this.onFadeIn : this.onFadeOut, this);\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.isPlaying = function () {\r\n\t        return !!this.instance;\r\n\t    };\r\n\t    Song.prototype.onFadeIn = function () {\r\n\t        var volume = this.getFadeInVolume();\r\n\t        try {\r\n\t            this.instance.volume =\r\n\t                this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame ? 0 : volume;\r\n\t        }\r\n\t        catch (e) { }\r\n\t        if (volume === this.volume) {\r\n\t            this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.getFadeInVolume = function () {\r\n\t        var duration = this.fadeEndTime - this.fadeStartTime;\r\n\t        var progress = new Date().getTime() - this.fadeStartTime;\r\n\t        return this.volume * Math.min(progress / duration, 1);\r\n\t    };\r\n\t    Song.prototype.stop = function (fadeOut) {\r\n\t        if (this.instance != null) {\r\n\t            if (fadeOut > 0) {\r\n\t                this.fade = -1;\r\n\t                this.fadeStartTime = new Date().getTime();\r\n\t                this.fadeEndTime = this.fadeStartTime + fadeOut * 16.7;\r\n\t                this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t                this.instance.on(\"progress\", this.onFadeOut, this);\r\n\t            }\r\n\t            else {\r\n\t                this.stopInstance();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.stopInstance = function () {\r\n\t        if (this.instance != null) {\r\n\t            this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t            this.instance.off(\"progress\", this.onFadeOut, this);\r\n\t            this.instance.off(\"end\", this.playInstance, this);\r\n\t            this.instance.off(\"end\", this.stopInstance, this);\r\n\t            this.instance.stop();\r\n\t            this.instance = null;\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.onFadeOut = function () {\r\n\t        var volume = this.getFadeOutVolume();\r\n\t        try {\r\n\t            this.instance.volume =\r\n\t                this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame ? 0 : volume;\r\n\t        }\r\n\t        catch (e) { }\r\n\t        if (volume === 0) {\r\n\t            this.stopInstance();\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.getFadeOutVolume = function () {\r\n\t        var duration = this.fadeEndTime - this.fadeStartTime;\r\n\t        var progress = new Date().getTime() - this.fadeStartTime;\r\n\t        return this.volume - this.volume * Math.min(progress / duration, 1);\r\n\t    };\r\n\t    Song.prototype.setVolume = function (volume) {\r\n\t        if (this.restoredVolume == null) {\r\n\t            this.restoredVolume = this.volume;\r\n\t        }\r\n\t        this.volume = volume;\r\n\t        if (this.instance != null) {\r\n\t            this.instance.volume = volume;\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.restoreVolume = function () {\r\n\t        if (this.restoredVolume != null) {\r\n\t            this.volume = this.restoredVolume;\r\n\t            if (this.instance != null) {\r\n\t                this.instance.volume = this.restoredVolume;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.toggleGroup = function (group, toggle) {\r\n\t        if (toggle === void 0) { toggle = false; }\r\n\t        if (this.group === group && this.instance != null) {\r\n\t            try {\r\n\t                this.instance.volume = toggle ? this.volume : 0;\r\n\t            }\r\n\t            catch (e) { }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Song = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Song)\r\n\t    ], Song);\r\n\t    return Song;\r\n\t}());\r\n\texports.Song = Song;\r\n\texports.SongAttributes = {\r\n\t    SONG: \"Song\",\r\n\t    ALIAS: \"Alias\",\r\n\t    GROUP: \"Group\",\r\n\t    VOLUME: \"Volume\",\r\n\t    PAN: \"Pan\",\r\n\t    PLAY: \"Play\",\r\n\t    LOOP: \"Loop\",\r\n\t    STOP: \"Stop\",\r\n\t    FADEIN: \"FadeIn\",\r\n\t    FADEOUT: \"FadeOut\",\r\n\t};\r\n\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar ParticleElement_1 = __webpack_require__(95);\r\n\tvar ParticleAnimationElement_1 = __webpack_require__(107);\r\n\tvar ParticleGroupElement = (function (_super) {\r\n\t    __extends(ParticleGroupElement, _super);\r\n\t    function ParticleGroupElement() {\r\n\t        _super.call(this);\r\n\t        this._emitOnce = false;\r\n\t        this._startType = \"\";\r\n\t    }\r\n\t    ParticleGroupElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.visible = false;\r\n\t    };\r\n\t    ParticleGroupElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE)) {\r\n\t            this._emitOnce = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE)) {\r\n\t            this._startType = node.getAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.START))) {\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n\t                this.start(this._emitOnce);\r\n\t            }\r\n\t            else {\r\n\t                this.startSelected(this._emitOnce, ParticleGroupElement.DynamicKey);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING))) {\r\n\t            this.stopping();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOP) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOP))) {\r\n\t            this.stop();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.RESET) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.RESET))) {\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n\t                this.reset();\r\n\t            }\r\n\t            else {\r\n\t                this.resetSelected(ParticleGroupElement.DynamicKey);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR))) {\r\n\t            this.clear();\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.start = function (emitOnce) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        this._emitOnce = emitOnce;\r\n\t        this.visible = true;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                    this.childs[key].start(this._emitOnce, this._startType);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.startSelected = function (emitOnce, particleKey) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(particleKey)) {\r\n\t            this._emitOnce = emitOnce;\r\n\t            this.visible = true;\r\n\t            if (this.childs != null) {\r\n\t                for (var key in this.childs) {\r\n\t                    if (key.indexOf(particleKey) > -1) {\r\n\t                        if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                            this.childs[key].start(this._emitOnce, this._startType);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.stopping = function () {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                    this.childs[key].stopping();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.stop = function () {\r\n\t        this.visible = false;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                    this.childs[key].stop();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.reset = function () {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                    this.childs[key].reset();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.resetSelected = function (particleKey) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(particleKey)) {\r\n\t            if (this.childs != null) {\r\n\t                for (var key in this.childs) {\r\n\t                    if (key.indexOf(particleKey) > -1) {\r\n\t                        if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                            this.childs[key].reset();\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.clear = function () {\r\n\t        this.visible = false;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement || ParticleAnimationElement_1.ParticleAnimationElement) {\r\n\t                    this.childs[key].clear();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.clone = function () {\r\n\t        var element = new ParticleGroupElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element._emitOnce = this._emitOnce;\r\n\t        element._startType = this._startType;\r\n\t        element.childs = {};\r\n\t        element.removeChildren();\r\n\t        for (var key in this.childs) {\r\n\t            element.childs[key] = this.childs[key].clone();\r\n\t            element.addChild(element.childs[key]);\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ParticleGroupElement.DynamicKey = \"\";\r\n\t    ParticleGroupElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ParticleGroupElement);\r\n\t    return ParticleGroupElement;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.ParticleGroupElement = ParticleGroupElement;\r\n\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar ParticleStyle_1 = __webpack_require__(97);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar AnimationElement_1 = __webpack_require__(92);\r\n\tvar ParticleElement_1 = __webpack_require__(95);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar ParticleAnimationElement = (function (_super) {\r\n\t    __extends(ParticleAnimationElement, _super);\r\n\t    function ParticleAnimationElement() {\r\n\t        _super.call(this);\r\n\t        this._pool = [];\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"particleTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.addParticles.bind(this));\r\n\t        this._created = false;\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._emitOnce = false;\r\n\t        this._startType = \"\";\r\n\t        this.visible = false;\r\n\t    }\r\n\t    ParticleAnimationElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = parseInt(node.getAttribute(ParticleElement_1.ParticleElementAttributes.BLEND_MODE));\r\n\t            }\r\n\t            if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STYLE) ||\r\n\t                node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STYLE2)) {\r\n\t                if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STYLE)) {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(ParticleElement_1.ParticleElementAttributes.STYLE)]);\r\n\t                }\r\n\t                else {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(ParticleElement_1.ParticleElementAttributes.STYLE2)]);\r\n\t                }\r\n\t                this._styleName = this._style.name;\r\n\t                this.createParticles();\r\n\t                this._created = true;\r\n\t            }\r\n\t            if (node.hasAttribute(\"Speed\")) {\r\n\t                this.setSpeed(parseFloat(node.getAttribute(\"Speed\")));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.setSpeed = function (speed) {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this._pool[i].changeAnimationSpeed(speed);\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.updateByNode = function (node) {\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE)) {\r\n\t            this._emitOnce = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE)) {\r\n\t            this._startType = node.getAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.START))) {\r\n\t            this.start(this._emitOnce, this._startType);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING))) {\r\n\t            this.stopping();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOP) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOP))) {\r\n\t            this.stop();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.RESET) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.RESET))) {\r\n\t            this.reset();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR))) {\r\n\t            this.clear();\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.start = function (emitOnce, startType) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        this.visible = true;\r\n\t        this._emitOnce = emitOnce;\r\n\t        this._startType = startType;\r\n\t        this._stopping = emitOnce;\r\n\t        this._stop = false;\r\n\t        if (!this._emitOnce) {\r\n\t            this._timer.start(this._style.time);\r\n\t            if (this._startType === \"now\") {\r\n\t                this.addParticles();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.addParticles();\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.stopping = function () {\r\n\t        this._stopping = true;\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.stop = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.reset = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setupPosition(this._pool[i]);\r\n\t            this._pool[i].visible = false;\r\n\t            this._pool[i].stop();\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.clear = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t        this.removeAllFromPool();\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.createParticles = function () {\r\n\t        if (this._style != null) {\r\n\t            if (this._style.images != null && this._style.images.length > 0) {\r\n\t                var elementsCount = this._style.calculateElements();\r\n\t                var elementsResources = this.prepareResources(elementsCount);\r\n\t                for (var i = 0; i < elementsCount; i++) {\r\n\t                    var node = document.createElement(\"particle\");\r\n\t                    node.setAttribute(\"Style2\", elementsResources[i]);\r\n\t                    node.setAttribute(\"RandomStartFrame\", \"true\");\r\n\t                    var imageElement = new AnimationElement_1.AnimationElement();\r\n\t                    imageElement.create(node);\r\n\t                    var particleLife = Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\r\n\t                    this.setupParticle(imageElement);\r\n\t                    this.setupPosition(imageElement);\r\n\t                    this.addPathBehaviour(imageElement, particleLife);\r\n\t                    this.addScaleBehaviour(imageElement, particleLife);\r\n\t                    this.addRotationBehaviour(imageElement, particleLife);\r\n\t                    this.addAlphaBehaviour(imageElement, particleLife);\r\n\t                    this.addChild(imageElement);\r\n\t                    this._pool.push(imageElement);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.prepareResources = function (count) {\r\n\t        var resources = [];\r\n\t        for (var i = 0; i < count; i++) {\r\n\t            resources.push(this._style.images[Math.floor(Math.random() * this._style.images.length)]);\r\n\t        }\r\n\t        return resources;\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.setupParticle = function (imageElement) {\r\n\t        imageElement.visible = false;\r\n\t        imageElement.usedInPool = false;\r\n\t        if (this._blendMode != null) {\r\n\t            imageElement.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.setupPosition = function (imageElement) {\r\n\t        imageElement.pivot.x = imageElement.width / 2;\r\n\t        imageElement.pivot.y = imageElement.height / 2;\r\n\t        switch (this._style.positionZone.type) {\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneRectangle:\r\n\t                imageElement.x = parseInt((this._style.positionZone.x + Math.random() * this._style.positionZone.width).toFixed(0));\r\n\t                imageElement.y = parseInt((this._style.positionZone.y + Math.random() * this._style.positionZone.height).toFixed(0));\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneLine:\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneEllipse:\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.addPathBehaviour = function (imageElement, life) {\r\n\t        if (this._style.pathValues != null) {\r\n\t            var points = [];\r\n\t            for (var i = 0; i < this._style.pathValues.length; i++) {\r\n\t                if (this._style.pathValues[i] != null &&\r\n\t                    this._style.pathValues[i].x != null &&\r\n\t                    this._style.pathValues[i].y != null) {\r\n\t                    var valueX = this._style.pathValues[i].x;\r\n\t                    var valueY = this._style.pathValues[i].y;\r\n\t                    if (this._style.pathValues[i].randomX != null) {\r\n\t                        valueX =\r\n\t                            Math.floor(Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x)) + this._style.pathValues[i].x;\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].randomY != null) {\r\n\t                        valueY =\r\n\t                            Math.floor(Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y)) + this._style.pathValues[i].y;\r\n\t                    }\r\n\t                    points.push({ x: imageElement.x + valueX, y: imageElement.y + valueY });\r\n\t                }\r\n\t            }\r\n\t            if (points.length > 2) {\r\n\t                Tweens_1.Tweens.positionTween(imageElement, {\r\n\t                    bezier: {\r\n\t                        values: points,\r\n\t                    },\r\n\t                    tweenX: [imageElement.x, imageElement.x],\r\n\t                    tweenY: [imageElement.y, imageElement.y],\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [imageElement],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t            else if (points.length === 2) {\r\n\t                Tweens_1.Tweens.positionTween(imageElement, {\r\n\t                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\r\n\t                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [imageElement],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.addScaleBehaviour = function (imageElement, life) {\r\n\t        if (this._style.scaleValues != null) {\r\n\t            var scalePoints = [];\r\n\t            for (var i = 0; i < this._style.scaleValues.length; i++) {\r\n\t                var scaleValue = void 0;\r\n\t                if (this._style.scaleValues[i].length > 1) {\r\n\t                    scaleValue = parseFloat((Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\r\n\t                        this._style.scaleValues[i][0]).toFixed(1));\r\n\t                }\r\n\t                else {\r\n\t                    scaleValue = this._style.scaleValues[i][0];\r\n\t                }\r\n\t                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\r\n\t            }\r\n\t            if (scalePoints.length === 1) {\r\n\t                imageElement.scale.x = scalePoints[0].x;\r\n\t                imageElement.scale.y = scalePoints[0].y;\r\n\t            }\r\n\t            else {\r\n\t                Tweens_1.Tweens.scaleTween(imageElement, {\r\n\t                    tweenValues: scalePoints,\r\n\t                    tweenDuration: life,\r\n\t                    paused: false,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.addRotationBehaviour = function (imageElement, life) {\r\n\t        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\r\n\t            Tweens_1.Tweens.rotationTween(imageElement, {\r\n\t                degrees: [this._style.rotationValues[0], this._style.rotationValues[1]],\r\n\t                tweenDuration: life,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.addAlphaBehaviour = function (imageElement, life) {\r\n\t        if (this._style.alphaValues != null) {\r\n\t            var alphas = [];\r\n\t            for (var i = 0; i < this._style.alphaValues.length; i++) {\r\n\t                alphas.push(this._style.alphaValues[i]);\r\n\t            }\r\n\t            Tweens_1.Tweens.alphaTween(imageElement, {\r\n\t                alphas: alphas,\r\n\t                tweenDuration: life,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.addParticles = function () {\r\n\t        if (!this._stop) {\r\n\t            this.getFromPool();\r\n\t            if (!this._stopping && this._style.time > 0) {\r\n\t                this._timer.start(this._style.time);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.getFromPool = function () {\r\n\t        this._pool.sort(function () {\r\n\t            return 0.5 - Math.random();\r\n\t        });\r\n\t        var counter = 0;\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            if (counter === this._style.count) {\r\n\t                return;\r\n\t            }\r\n\t            if (!this._pool[i].usedInPool) {\r\n\t                this._pool[i].usedInPool = true;\r\n\t                this._pool[i].visible = true;\r\n\t                this._pool[i].playMe();\r\n\t                counter++;\r\n\t                Tweens_1.Tweens.restartTweens(this._pool[i].uid);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.removeFromPool = function (imageElement) {\r\n\t        imageElement.visible = false;\r\n\t        imageElement.usedInPool = false;\r\n\t        imageElement.stop();\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.removeAllFromPool = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this._pool[i].visible = false;\r\n\t            this._pool[i].usedInPool = false;\r\n\t        }\r\n\t    };\r\n\t    ParticleAnimationElement.prototype.clone = function () {\r\n\t        var element = new ParticleAnimationElement();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element._blendMode = this._blendMode;\r\n\t        var node = document.createElement(\"particle\");\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ParticleAnimationElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ParticleAnimationElement);\r\n\t    return ParticleAnimationElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ParticleAnimationElement = ParticleAnimationElement;\r\n\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar LayoutManager_1 = __webpack_require__(109);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar LayoutContainerElement = (function (_super) {\r\n\t    __extends(LayoutContainerElement, _super);\r\n\t    function LayoutContainerElement() {\r\n\t        _super.call(this);\r\n\t        LayoutManager_1.LayoutManager.addLayoutElement(this);\r\n\t    }\r\n\t    LayoutContainerElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)) {\r\n\t            this.portraitStyle = (StyleManager_1.StyleManager.Styles[node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)]);\r\n\t            if (this.portraitStyle != null) {\r\n\t                this.portraitStyleNodeList = this.getNodesList(this.portraitStyle.node.firstElementChild);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name \" +\r\n\t                        node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.style != null) {\r\n\t            this.styleNodeList = this.getNodesList(this.style.node.firstElementChild);\r\n\t        }\r\n\t    };\r\n\t    LayoutContainerElement.prototype.onLayoutChange = function (isPortrait) {\r\n\t        if (isPortrait) {\r\n\t            this.updateChildElements(this.portraitStyleNodeList, this.styleNodeList);\r\n\t        }\r\n\t        else {\r\n\t            this.updateChildElements(this.styleNodeList, this.portraitStyleNodeList);\r\n\t        }\r\n\t    };\r\n\t    LayoutContainerElement.prototype.updateChildElements = function (styleNodeList, previousStyleNodeList) {\r\n\t        if (styleNodeList != null && previousStyleNodeList != null) {\r\n\t            if (styleNodeList.length === previousStyleNodeList.length) {\r\n\t                for (var i = 0; i < styleNodeList.length; i++) {\r\n\t                    var elementStyle = styleNodeList[i];\r\n\t                    var previousElementStyle = previousStyleNodeList[i];\r\n\t                    if (this.childs[elementStyle.nodeName] != null) {\r\n\t                        this.childs[elementStyle.nodeName].updateByNode(this.updateDefaultValues(elementStyle, previousElementStyle));\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    LayoutContainerElement.prototype.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = this.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    LayoutContainerElement.prototype.updateDefaultValues = function (node, previousNode) {\r\n\t        if (!node.hasAttribute(\"X\") && previousNode.hasAttribute(\"X\")) {\r\n\t            node.setAttribute(\"X\", \"0\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"Y\") && previousNode.hasAttribute(\"Y\")) {\r\n\t            node.setAttribute(\"Y\", \"0\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"PivotX\") && previousNode.hasAttribute(\"PivotX\")) {\r\n\t            node.setAttribute(\"PivotX\", \"0\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"PivotY\") && previousNode.hasAttribute(\"PivotY\")) {\r\n\t            node.setAttribute(\"PivotY\", \"0\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"Scale\") &&\r\n\t            !(node.hasAttribute(\"ScaleX\") || node.hasAttribute(\"ScaleY\")) &&\r\n\t            previousNode.hasAttribute(\"Scale\")) {\r\n\t            node.setAttribute(\"Scale\", \"1\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"Visible\") && previousNode.hasAttribute(\"Visible\")) {\r\n\t            node.setAttribute(\"Visible\", \"true\");\r\n\t        }\r\n\t        if (!node.hasAttribute(\"RemoveTweens\")) {\r\n\t            node.setAttribute(\"RemoveTweens\", \"false\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Case\")) {\r\n\t            node.removeAttribute(\"Case\");\r\n\t        }\r\n\t        return node;\r\n\t    };\r\n\t    LayoutContainerElement.prototype.clone = function () {\r\n\t        var element = new LayoutContainerElement();\r\n\t        element.style = this.style;\r\n\t        element.portraitStyle = this.portraitStyle;\r\n\t        element.styleNodeList = this.styleNodeList;\r\n\t        element.portraitStyleNodeList = this.portraitStyleNodeList;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element.childs = {};\r\n\t        element.removeChildren();\r\n\t        for (var key in this.childs) {\r\n\t            element.childs[key] = this.childs[key].clone();\r\n\t            element.addChild(element.childs[key]);\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        else if (this.maskGraphics != null) {\r\n\t            var elementMask = this.maskGraphics.clone();\r\n\t            elementMask.position.x = this.maskGraphics.position.x;\r\n\t            elementMask.position.y = this.maskGraphics.position.y;\r\n\t            element.maskGraphics = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    LayoutContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], LayoutContainerElement);\r\n\t    return LayoutContainerElement;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.LayoutContainerElement = LayoutContainerElement;\r\n\tvar LayoutContainerElementAttributes = {\r\n\t    PORTRAIT_STYLE: \"PortraitStyle\",\r\n\t};\r\n\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar LayoutManager = (function () {\r\n\t    function LayoutManager() {\r\n\t        this.usePlatform = false;\r\n\t        this.configured = false;\r\n\t        this.ratioIntervals = [];\r\n\t        var config = Configuration_1.Configuration.Configurations[\"LayoutManagerConfiguration\"];\r\n\t        if (config != null) {\r\n\t            this.configurate(config);\r\n\t            this.configured = true;\r\n\t        }\r\n\t        if (Scaling_1.Scaling.Emitter != null) {\r\n\t            Scaling_1.Scaling.Emitter.on(Scaling_1.Scaling.EventResize, this.onLayoutChange.bind(this));\r\n\t        }\r\n\t    }\r\n\t    LayoutManager.addLayoutElement = function (layoutElement) {\r\n\t        LayoutManager.LayoutElements.push(layoutElement);\r\n\t    };\r\n\t    LayoutManager.getSwitchPrefix = function () {\r\n\t        return LayoutManager.SwitchPrefix;\r\n\t    };\r\n\t    LayoutManager.getPreviousSwitchPrefix = function () {\r\n\t        return LayoutManager.PreviousSwitchPrefix;\r\n\t    };\r\n\t    LayoutManager.prototype.configurate = function (node) {\r\n\t        this.platform =\r\n\t            window[\"CHANNEL\"] == \"mobile\" ? exports.LayoutManagerAttributes.MOBILE : exports.LayoutManagerAttributes.DESKTOP;\r\n\t        if (node.hasAttribute(exports.LayoutManagerConfigurationAttributes.USE_PLATFORM)) {\r\n\t            this.usePlatform = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.LayoutManagerConfigurationAttributes.USE_PLATFORM));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.LayoutManagerConfigurationAttributes.WIDTH)) {\r\n\t            this.width = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.LayoutManagerConfigurationAttributes.WIDTH));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.LayoutManagerConfigurationAttributes.HEIGHT)) {\r\n\t            this.height = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.LayoutManagerConfigurationAttributes.HEIGHT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.LayoutManagerConfigurationAttributes.RATIO_INTERVALS)) {\r\n\t            var intervals = neo_common_1.ArrayUtils.stringArray(node.getAttribute(exports.LayoutManagerConfigurationAttributes.RATIO_INTERVALS), \"|\");\r\n\t            for (var i = 0; i < intervals.length; i++) {\r\n\t                this.ratioIntervals.push(neo_common_1.ArrayUtils.numberArray(intervals[i]));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    LayoutManager.prototype.onLayoutChange = function (isPortrait, ratio, screenWidth, screenHeight, ratioWidth, ratioHeight) {\r\n\t        if (!this.configured) {\r\n\t            return;\r\n\t        }\r\n\t        isPortrait = this.allowedPortraitLayout(isPortrait, ratio);\r\n\t        isPortrait = this.allowedCanvasPortraitLayout(isPortrait, screenHeight, ratioWidth);\r\n\t        LayoutManager.SwitchPrefix = \"\";\r\n\t        if (this.usePlatform) {\r\n\t            LayoutManager.SwitchPrefix = this.platform + \"_\";\r\n\t        }\r\n\t        if (isPortrait) {\r\n\t            document.body.classList.add(LayoutManager.ExtraPortraitClass);\r\n\t        }\r\n\t        else {\r\n\t            document.body.classList.remove(LayoutManager.ExtraPortraitClass);\r\n\t        }\r\n\t        this.changeCanvasSize(isPortrait, screenWidth, screenHeight, ratioWidth, ratioHeight);\r\n\t        this.updateLayoutElements(isPortrait);\r\n\t        LayoutManager.PreviousSwitchPrefix = LayoutManager.SwitchPrefix;\r\n\t    };\r\n\t    LayoutManager.prototype.allowedPortraitLayout = function (isPortrait, ratio) {\r\n\t        if (isPortrait) {\r\n\t            for (var i = 0; i < this.ratioIntervals.length; i++) {\r\n\t                if (ratio > this.ratioIntervals[i][0] && ratio < this.ratioIntervals[i][1]) {\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t            return false;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    LayoutManager.prototype.allowedCanvasPortraitLayout = function (isPortrait, screenHeight, ratioWidth) {\r\n\t        if (isPortrait) {\r\n\t            var screen_1 = document.getElementById(\"screen\");\r\n\t            var offset = parseInt(window.getComputedStyle(screen_1).top);\r\n\t            if (!document.body.classList.contains(\"jpt-on\")) {\r\n\t                offset *= -1;\r\n\t            }\r\n\t            var height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\r\n\t            var canvasRatio = this.width[1] / height;\r\n\t            return this.allowedPortraitLayout(isPortrait, canvasRatio);\r\n\t        }\r\n\t        return isPortrait;\r\n\t    };\r\n\t    LayoutManager.prototype.changeCanvasSize = function (isPortrait, screenWidth, screenHeight, ratioWidth, ratioHeight) {\r\n\t        var screen = document.getElementById(\"screen\");\r\n\t        if (isPortrait) {\r\n\t            var offset = parseInt(window.getComputedStyle(screen).top);\r\n\t            var height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\r\n\t            StageController_1.StageController.Renderer.resize(this.width[1], height);\r\n\t        }\r\n\t        else {\r\n\t            StageController_1.StageController.Renderer.resize(this.width[0], this.height[0]);\r\n\t        }\r\n\t        StageController_1.StageController.Renderer.render(StageController_1.StageController.Stage);\r\n\t    };\r\n\t    LayoutManager.prototype.updateLayoutElements = function (isPortrait) {\r\n\t        for (var i = 0; i < LayoutManager.LayoutElements.length; i++) {\r\n\t            LayoutManager.LayoutElements[i].onLayoutChange(isPortrait);\r\n\t        }\r\n\t    };\r\n\t    LayoutManager.ExtraPortraitClass = \"extendPortrait\";\r\n\t    LayoutManager.SwitchPrefix = \"\";\r\n\t    LayoutManager.PreviousSwitchPrefix = \"\";\r\n\t    LayoutManager.LayoutElements = [];\r\n\t    return LayoutManager;\r\n\t}());\r\n\texports.LayoutManager = LayoutManager;\r\n\texports.LayoutManagerConfigurationAttributes = {\r\n\t    USE_ORIENTATION: \"UseOrientation\",\r\n\t    USE_PLATFORM: \"UsePlatform\",\r\n\t    HEIGHT: \"Height\",\r\n\t    WIDTH: \"Width\",\r\n\t    RATIO_INTERVALS: \"RatioIntervals\",\r\n\t};\r\n\texports.LayoutManagerAttributes = {\r\n\t    PORTRAIT: \"PORTRAIT\",\r\n\t    LANDSCAPE: \"LANDSCAPE\",\r\n\t    DESKTOP: \"DESKTOP\",\r\n\t    MOBILE: \"MOBILE\",\r\n\t};\r\n\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar Reel_1 = __webpack_require__(111);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Reel2_1 = __webpack_require__(112);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar WinAnimator2_1 = __webpack_require__(113);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar Machine = (function (_super) {\r\n\t    __extends(Machine, _super);\r\n\t    function Machine() {\r\n\t        _super.call(this);\r\n\t        this._longTeasing = false;\r\n\t        this.isFreespins = false;\r\n\t        this._reels = [];\r\n\t        this._stoppedSymbolsArray = [];\r\n\t        this._stoppedFromServer = false;\r\n\t        this._stoppedFromMachine = false;\r\n\t        this._stoppedFromLegal = false;\r\n\t        this._stoppedReelIndexes = 0;\r\n\t        this._stopTimer = FrameTimer_1.CreateFrameTimer(\"Machine\");\r\n\t        this._stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\t        this.actualReelStopped = -1;\r\n\t        this._reelsContainer = new PIXI.Container();\r\n\t        this.addChild(this._reelsContainer);\r\n\t    }\r\n\t    Machine.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (this.maskSprite != null && this._reelsContainer != null) {\r\n\t            this._reelsContainer.addChild(this.maskSprite);\r\n\t            this._reelsContainer.mask = this.maskSprite;\r\n\t        }\r\n\t        if (this.maskGraphics != null && this._reelsContainer != null) {\r\n\t            this._reelsContainer.addChild(this.maskGraphics);\r\n\t            this._reelsContainer.mask = this.maskGraphics;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.MachineAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(exports.MachineAttributes.CONFIGS).split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"ReelCount\")) {\r\n\t            this._reelCount = parseInt(node.getAttribute(\"ReelCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelX\")) {\r\n\t            this._reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelY\")) {\r\n\t            this._reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolWidth\")) {\r\n\t            this._symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolHeight\")) {\r\n\t            this._symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"VisibleSymbolCount\")) {\r\n\t            this._visibleSymbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"MinSpinRotation\")) {\r\n\t            this._minSpinRotation = parseInt(node.getAttribute(\"MinSpinRotation\"));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotation = 40;\r\n\t        }\r\n\t        if (node.hasAttribute(\"MinSpinRotationLong\")) {\r\n\t            this._minSpinRotationLong = parseInt(node.getAttribute(\"MinSpinRotationLong\"));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotationLong = 100;\r\n\t        }\r\n\t        if (node.hasAttribute(\"StartDelay\")) {\r\n\t            this._startDelay = parseInt(node.getAttribute(\"StartDelay\"));\r\n\t        }\r\n\t        else {\r\n\t            this._startDelay = 3;\r\n\t        }\r\n\t        if (node.hasAttribute(\"StopDelay\")) {\r\n\t            this._stopDelay = parseInt(node.getAttribute(\"StopDelay\"));\r\n\t        }\r\n\t        else {\r\n\t            this._stopDelay = 10;\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelConfiguration\")) {\r\n\t            this._reelConfiguration = node.getAttribute(\"ReelConfiguration\");\r\n\t        }\r\n\t        if (this.mask) {\r\n\t            this.disabledMask();\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.createReels = function (reels) {\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            var reel = new Reel2_1.Reel2();\r\n\t            if (this._reelConfiguration != null) {\r\n\t                var configs = this._reelConfiguration.split(\";\");\r\n\t                for (var j = 0; j < configs.length; j++) {\r\n\t                    reel.configure(Configuration_1.Configuration.Configurations[configs[j]]);\r\n\t                }\r\n\t            }\r\n\t            reel.visible = false;\r\n\t            reel.initialize(i > 0 ? this._reels[i - 1] : null, i < this._reelCount - 1 ? this._reels[i + 1] : null, i, this._symbols, reels[i], this._reelX[i], this._reelY[i], this._visibleSymbolCount, 1, 3, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\r\n\t            if (this.isFreespins) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.initData != null &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.initData.customData != null &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"] != null &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"][i] != null) {\r\n\t                    reel.valuesStrip = GameManager_1.GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"][i];\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (GameManager_1.GameManager.baseResponse != null &&\r\n\t                    GameManager_1.GameManager.baseResponse.initData != null &&\r\n\t                    GameManager_1.GameManager.baseResponse.initData.customData != null &&\r\n\t                    GameManager_1.GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"] != null &&\r\n\t                    GameManager_1.GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"][i] != null) {\r\n\t                    reel.valuesStrip = GameManager_1.GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"][i];\r\n\t                }\r\n\t            }\r\n\t            reel.on(Reel_1.Reel.ReelStopped, this.onReelStopped.bind(this));\r\n\t            this._reelsContainer.addChild(reel);\r\n\t            this._reels.push(reel);\r\n\t        }\r\n\t        this._reelsContainer.visible = false;\r\n\t    };\r\n\t    Machine.prototype.initialize = function (symbols, reels, teasing, teasingTop, freespins, background, sunContainer) {\r\n\t        this._background = background;\r\n\t        this._teasing = teasing;\r\n\t        this._teasingTop = teasingTop;\r\n\t        this._symbols = symbols;\r\n\t        this.isFreespins = freespins;\r\n\t        this.createReels(reels);\r\n\t    };\r\n\t    Machine.prototype.setStoppedSymbolsArray = function (value) {\r\n\t        this._stoppedSymbolsArray = value;\r\n\t    };\r\n\t    Machine.prototype.showSymbols = function (reelsData) {\r\n\t        if (false) {\r\n\t            this.log(\"showSymbols\");\r\n\t        }\r\n\t        this.actualReelStopped = -1;\r\n\t        if (this._reels != null) {\r\n\t            for (var i = 0; i < this._reelCount; i++) {\r\n\t                if (reelsData[i] != null) {\r\n\t                    if (this._reels[i] != null) {\r\n\t                        this._reels[i].visible = true;\r\n\t                        this._reels[i].setData(reelsData[i]);\r\n\t                        this._reels[i].showSymbols();\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reel with index: \" + i);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no reelsData with index: \" + i);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no reels\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.spinStart = function (longRotation, useTransform, currentSymbols) {\r\n\t        if (useTransform === void 0) { useTransform = false; }\r\n\t        if (false) {\r\n\t            this.log(\"spinStart\");\r\n\t        }\r\n\t        this.enabledMask();\r\n\t        this._longTeasing = false;\r\n\t        if (this._teasing != null) {\r\n\t            this._teasing.goToCase(\"EMPTY\");\r\n\t        }\r\n\t        if (this._teasingTop != null) {\r\n\t            this._teasingTop.goToCase(\"EMPTY\");\r\n\t        }\r\n\t        Symbol_1.Symbol.Teas = false;\r\n\t        Reel2_1.Reel2.Tease = false;\r\n\t        WinAnimator2_1.WinAnimator2.Force = false;\r\n\t        this._stoppedFromServer = false;\r\n\t        this._stoppedFromMachine = false;\r\n\t        this._stoppedFromLegal = false;\r\n\t        this._startSpinTime = Date.now();\r\n\t        this.visible = true;\r\n\t        this._reelsContainer.visible = true;\r\n\t        this.actualReelStopped = -1;\r\n\t        this._stoppedReelIndexes = 0;\r\n\t        if (this._reels != null) {\r\n\t            for (var i = 0; i < this._reelCount; i++) {\r\n\t                if (this._reels[i] != null) {\r\n\t                    if (this._stoppedSymbolsArray.length > 0) {\r\n\t                        this._reels[i].visible = true;\r\n\t                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\t                        this._reels[i].currentSymbols = [];\r\n\t                        for (var j = 0; j < this._visibleSymbolCount; j++) {\r\n\t                            this._reels[i].currentSymbols.push(currentSymbols[i][j]);\r\n\t                            currentSymbols[i][j] = null;\r\n\t                        }\r\n\t                        this._reels[i].showSymbols(useTransform);\r\n\t                        this._reels[i].spinStart();\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no stopped symbols\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no reel with index: \" + i);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (longRotation != null && longRotation) {\r\n\t                this._stopTimer.start(this._minSpinRotationLong);\r\n\t            }\r\n\t            else {\r\n\t                this._stopTimer.start(this._minSpinRotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no reels\");\r\n\t            }\r\n\t        }\r\n\t        if (this.isFreespins) {\r\n\t            PlayList_1.PlayList.play(\"SND_FSRotationStart\");\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseRotationStart\");\r\n\t        }\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseRotation\", 0, true);\r\n\t    };\r\n\t    Machine.prototype.verifyMinGameRoundDurationConditions = function () {\r\n\t        return ((AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration > 0 ||\r\n\t            AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0 ||\r\n\t            (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan > 0)) &&\r\n\t            !ModuleManager_1.ModuleManager.freespinsActive());\r\n\t    };\r\n\t    Machine.prototype.spinStop = function (event, force, fromServer, legal) {\r\n\t        var _this = this;\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (fromServer === void 0) { fromServer = false; }\r\n\t        if (legal === void 0) { legal = false; }\r\n\t        if (fromServer) {\r\n\t            this._stoppedFromServer = true;\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            if (this.verifyMinGameRoundDurationConditions()) {\r\n\t                this._legalStopTimer = setTimeout(function () { return _this.spinStop(null, false, false, true); }, this.getLegalRemainingSpinDuration());\r\n\t            }\r\n\t            else {\r\n\t                this._stoppedFromLegal = true;\r\n\t            }\r\n\t        }\r\n\t        else if (legal) {\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t        }\r\n\t        else {\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (force) {\r\n\t            WinAnimator2_1.WinAnimator2.Force = true;\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseFSTeaser\");\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (false) {\r\n\t            this.log(\"spinStop: \" + force);\r\n\t        }\r\n\t        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\r\n\t            this._longTeasing = this.calcLongTeasing();\r\n\t            if (!ModuleManager_1.ModuleManager.freespinsActive() &&\r\n\t                !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            }\r\n\t            if (force && this._teasing != null) {\r\n\t                this._teasing.goToCase(\"EMPTY\");\r\n\t            }\r\n\t            if (force && this._teasingTop != null) {\r\n\t                this._teasingTop.goToCase(\"EMPTY\");\r\n\t            }\r\n\t            this._canTease1 = false;\r\n\t            this._canTease2 = false;\r\n\t            this._canTease3 = false;\r\n\t            this._canTease4 = force ? false : this.checkTeasing(4);\r\n\t            if (this._reels != null) {\r\n\t                for (var i = 0; i < this._reelCount; i++) {\r\n\t                    if (this._reels[i] != null) {\r\n\t                        if (this._stoppedSymbolsArray.length !== 0) {\r\n\t                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\t                            if (force ||\r\n\t                                (!this._canTease1 && !this._canTease2 && !this._canTease3 && !this._canTease4)) {\r\n\t                                this._reels[i].spinStop(force);\r\n\t                            }\r\n\t                            else {\r\n\t                                if (this._canTease1 && this._canTease2 && this._canTease3 && this._canTease4) {\r\n\t                                    if (i === 0) {\r\n\t                                        this._reels[i].spinStop(force);\r\n\t                                    }\r\n\t                                }\r\n\t                                else if (this._canTease2 && this._canTease3 && this._canTease4) {\r\n\t                                    if (i === 0 || i === 1) {\r\n\t                                        this._reels[i].spinStop(force);\r\n\t                                    }\r\n\t                                }\r\n\t                                else if (this._canTease3 && this._canTease4) {\r\n\t                                    if (i === 0 || i === 1 || i === 2) {\r\n\t                                        this._reels[i].spinStop(force);\r\n\t                                    }\r\n\t                                }\r\n\t                                else if (this._canTease4) {\r\n\t                                    if (i === 0 || i === 1 || i === 2 || i === 3) {\r\n\t                                        this._reels[i].spinStop(force);\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"ERROR no stopped symbols\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reel with index: \" + i);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no reels\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.getLegalRemainingSpinDuration = function () {\r\n\t        var duration = 0;\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0) {\r\n\t            duration = this.calculateRemainingSpinDuration(AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan);\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration > 0) {\r\n\t            duration = AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan > 0 && FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            duration = this.calculateRemainingSpinDuration(Math.max(AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan, AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan));\r\n\t        }\r\n\t        return duration;\r\n\t    };\r\n\t    Machine.prototype.calculateRemainingSpinDuration = function (minTime) {\r\n\t        var now = Date.now();\r\n\t        var diff = now - this._startSpinTime;\r\n\t        var reelStopDuration = this.getReelStopDuration();\r\n\t        return Math.max(minTime - diff - reelStopDuration, 0);\r\n\t    };\r\n\t    Machine.prototype.getReelStopDuration = function () {\r\n\t        return (this._reels[this._reelCount - 1].getStopDuration() / 60) * 1000;\r\n\t    };\r\n\t    Machine.prototype.checkTeasing = function (reelIndex) {\r\n\t        if (this._teasing == null) {\r\n\t            return false;\r\n\t        }\r\n\t        var count = 0;\r\n\t        for (var i = 0; i < reelIndex; i++) {\r\n\t            for (var j = 0; j < this._stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                if (this._stoppedSymbolsArray[i].symbols[j] === 11) {\r\n\t                    count++;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return count >= 2;\r\n\t    };\r\n\t    Machine.prototype.onReelStopped = function (reelIndex) {\r\n\t        if (this._teasing != null) {\r\n\t            this.tease(reelIndex);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\r\n\t        this._stoppedReelIndexes++;\r\n\t        this.actualReelStopped = reelIndex;\r\n\t        this._reels[reelIndex].visible = false;\r\n\t        this.emit(Machine.ReelStopped);\r\n\t        if (this._stoppedReelIndexes === this._reelCount) {\r\n\t            this.disabledMask();\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotation\", 10);\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseFSTeaser\");\r\n\t            if (Symbol_1.Symbol.Teas) {\r\n\t                WinAnimator2_1.WinAnimator2.Teas = true;\r\n\t                if (this._teasing != null && this._teasing.getCurrentCase() !== \"EMPTY\") {\r\n\t                    this._teasing.goToCase(\"TEAS_4_1\");\r\n\t                }\r\n\t                if (this._teasingTop != null && this._teasingTop.getCurrentCase() !== \"EMPTY\") {\r\n\t                    this._teasingTop.goToCase(\"TEAS_4_1\");\r\n\t                }\r\n\t                if (!this.isFreespins && !ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseFSTeaserFail\");\r\n\t                }\r\n\t                if (this.isFreespins && !this.retrigger()) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseFSTeaserFail\");\r\n\t                }\r\n\t            }\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stopTimer.stop();\r\n\t            if (false) {\r\n\t                var old = AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t                var current = AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan;\r\n\t                var minDuration = current > 0 ? current : old > 0 ? old : 0;\r\n\t                var spinDuration = Date.now() - this._startSpinTime;\r\n\t                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\r\n\t                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\r\n\t                }\r\n\t                else {\r\n\t                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\r\n\t                }\r\n\t            }\r\n\t            Symbol_1.Symbol.Teas = false;\r\n\t            this.emit(Machine.MachineStopped);\r\n\t            this._reelsContainer.visible = false;\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.retrigger = function () {\r\n\t        var wasRetrigger = false;\r\n\t        if (GameManager_1.GameManager.freespinsResponse.wins != null && GameManager_1.GameManager.freespinsResponse.wins.length > 0) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\r\n\t                    wasRetrigger = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return wasRetrigger;\r\n\t    };\r\n\t    Machine.prototype.calcLongTeasing = function () {\r\n\t        return false;\r\n\t    };\r\n\t    Machine.prototype.tease = function (reelIndex) {\r\n\t        switch (reelIndex) {\r\n\t            case 3:\r\n\t                if (this._canTease4) {\r\n\t                    Symbol_1.Symbol.Teas = true;\r\n\t                    Reel2_1.Reel2.Tease = true;\r\n\t                    this._reels[4].spinTease([10], 180);\r\n\t                    if (this._teasing != null && this._teasing.getCurrentCase() === \"EMPTY\") {\r\n\t                        PlayList_1.PlayList.play(\"SND_BaseFSTeaser\");\r\n\t                        this._teasing.goToCase(\"TEAS_4\");\r\n\t                        if (this._background != null) {\r\n\t                            this._background.goToCase(\"TEASING\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (this._teasingTop != null && this._teasingTop.getCurrentCase() === \"EMPTY\") {\r\n\t                        this._teasingTop.goToCase(\"TEAS_4\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.disabledMask = function () {\r\n\t        if (this.mask) {\r\n\t            this.backupMask = this.mask;\r\n\t            this.mask.visible = false;\r\n\t            this.mask = null;\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.enabledMask = function () {\r\n\t        if (this.backupMask && this.mask === null) {\r\n\t            this.mask = this.backupMask;\r\n\t            this.mask.visible = true;\r\n\t        }\r\n\t    };\r\n\t    Machine.MachineStopped = \"machineStopped\";\r\n\t    Machine.ReelStopped = \"onReelStopped\";\r\n\t    Machine = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Machine);\r\n\t    return Machine;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.Machine = Machine;\r\n\texports.MachineAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar Reel = (function (_super) {\r\n\t    __extends(Reel, _super);\r\n\t    function Reel() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Reel.prototype.configure = function (node) {\r\n\t        this.preRoll = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL))\r\n\t            : 180;\r\n\t        this.preRollSpeed = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL_SPEED)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL_SPEED))\r\n\t            : 10;\r\n\t        this.postRoll = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.POST_ROLL)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.POST_ROLL))\r\n\t            : 180;\r\n\t        this.postRollSpeed = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.POST_ROLL_SPEED)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.POST_ROLL_SPEED))\r\n\t            : 5;\r\n\t        this.speed = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.SPEED)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.SPEED))\r\n\t            : 3;\r\n\t        this.forceSpeed = node.hasAttribute(Configuration_1.ReelConfigurationAttributes.FORCE_SPEED)\r\n\t            ? parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.FORCE_SPEED))\r\n\t            : 2;\r\n\t    };\r\n\t    Reel.prototype.initialize = function (previousReel, nextReel, index, symbols, strip, positionX, positionY, symbolCount, symbolTopCount, symbolBottomCount, symbolWidth, symbolHeight, startDelay, stopDelay) {\r\n\t        this.previousReel = previousReel;\r\n\t        this.nextReel = nextReel;\r\n\t        this.index = index;\r\n\t        this.symbols = symbols;\r\n\t        this.strip = strip;\r\n\t        this.positionX = positionX;\r\n\t        this.positionY = positionY;\r\n\t        this.symbolCount = symbolCount;\r\n\t        this.symbolTopCount = symbolTopCount;\r\n\t        this.symbolBottomCount = symbolBottomCount;\r\n\t        this.symbolWidth = symbolWidth;\r\n\t        this.symbolHeight = symbolHeight;\r\n\t        this.startDelay = startDelay;\r\n\t        this.stopDelay = stopDelay;\r\n\t        this.stopTimer = FrameTimer_1.CreateFrameTimer(\"reel\");\r\n\t        this.stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onStopTimerComplete.bind(this));\r\n\t        this.currentSymbols = [];\r\n\t    };\r\n\t    Reel.prototype.setData = function (data) {\r\n\t        this.data = data;\r\n\t    };\r\n\t    Reel.prototype.showSymbols = function () {\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.x = this.positionX;\r\n\t        this.y = this.positionY;\r\n\t        while (this.currentSymbols.length > 0) {\r\n\t            this.returnSymbol(this.currentSymbols.pop());\r\n\t        }\r\n\t        for (var i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n\t            var symbolId = void 0;\r\n\t            var symbolCase = void 0;\r\n\t            if (i < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (i < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            this.addChild(this.currentSymbols[0]);\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.spinStart = function () {\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.rollSpeed = this.speed;\r\n\t        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n\t        this.spinPreRoll();\r\n\t    };\r\n\t    Reel.prototype.spinStop = function (force, customDelay) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (customDelay === void 0) { customDelay = 0; }\r\n\t        this.stopTimer.stop();\r\n\t        if (force) {\r\n\t            this.shouldBeStopping = true;\r\n\t            this.rollSpeed = this.forceSpeed;\r\n\t        }\r\n\t        else {\r\n\t            this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.onStopTimerComplete = function () {\r\n\t        this.shouldBeStopping = true;\r\n\t        this.isStopping = true;\r\n\t    };\r\n\t    Reel.prototype.getStopDuration = function () {\r\n\t        var stoppingSymbols = this.symbolTopCount + this.symbolCount + this.symbolBottomCount - 1;\r\n\t        return this.stopDelay + stoppingSymbols * this.speed + this.postRollSpeed * 2;\r\n\t    };\r\n\t    Reel.prototype.spinTease = function (symbols, customDelay) {\r\n\t        if (customDelay === void 0) { customDelay = 0; }\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = true;\r\n\t        this.teasingSymbols = symbols;\r\n\t        this.stopTimer.stop();\r\n\t        this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n\t    };\r\n\t    Reel.prototype.spinPreRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY - this.preRoll, this.positionY],\r\n\t            tweenDuration: this.preRollSpeed * 2,\r\n\t            tweenDelay: this.startDelay,\r\n\t            callbackFunction: this.spinRoll,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.spinRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY + this.symbolHeight],\r\n\t            tweenDuration: this.rollSpeed,\r\n\t            callbackFunction: this.updateReel,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.updateReel = function () {\r\n\t        this.returnSymbol(this.currentSymbols.pop());\r\n\t        if (this.shouldBeStopping && !this.isStopping) {\r\n\t            if (this.previousReel === null) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t            else if (this.previousReel.isStopping) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t        }\r\n\t        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\t        var symbolId = this.strip[this.stripIndex];\r\n\t        var symbolCase = Symbol_1.Symbol.CaseBlur;\r\n\t        if (this.isStopping) {\r\n\t            if (this.stoppingCounter < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n\t                        ? Symbol_1.Symbol.CaseRotation\r\n\t                        : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            this.stoppingCounter++;\r\n\t        }\r\n\t        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t        this.addChild(this.currentSymbols[0]);\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t        if (this.isStopping &&\r\n\t            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount) {\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t        else {\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.spinPostRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY + this.postRoll, this.positionY],\r\n\t            tweenDuration: this.postRollSpeed * 2,\r\n\t            callbackFunction: this.spinComplete,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.spinComplete = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        while (this.currentSymbols.length > 0) {\r\n\t            this.returnSymbol(this.currentSymbols.pop());\r\n\t        }\r\n\t        this.emit(Reel.ReelStopped, this.index);\r\n\t    };\r\n\t    Reel.prototype.getSymbol = function (symbolId, symbolCase) {\r\n\t        return this.symbols.getSymbol(symbolId, symbolCase);\r\n\t    };\r\n\t    Reel.prototype.returnSymbol = function (symbol) {\r\n\t        this.symbols.returnSymbol(symbol);\r\n\t    };\r\n\t    Reel.ReelStopped = \"reelStopped\";\r\n\t    Reel = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Reel);\r\n\t    return Reel;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.Reel = Reel;\r\n\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Reel_1 = __webpack_require__(111);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar Reel2 = (function (_super) {\r\n\t    __extends(Reel2, _super);\r\n\t    function Reel2() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.valuesStrip = [];\r\n\t    }\r\n\t    Reel2.prototype.initialize = function (previousReel, nextReel, index, symbols, strip, positionX, positionY, symbolCount, symbolTopCount, symbolBottomCount, symbolWidth, symbolHeight, startDelay, stopDelay) {\r\n\t        _super.prototype.initialize.call(this, previousReel, nextReel, index, symbols, strip, positionX, positionY, symbolCount, symbolTopCount, symbolBottomCount, symbolWidth, symbolHeight, startDelay, stopDelay);\r\n\t        this._baseSoundFlyByDelay = FrameTimer_1.CreateFrameTimer(\"baseSoundFlyByDelay\");\r\n\t        this._baseSoundFlyByDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.baseSoundFlyByDelay.bind(this));\r\n\t    };\r\n\t    Reel2.prototype.showSymbols = function (useTransform) {\r\n\t        if (useTransform === void 0) { useTransform = false; }\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.x = this.positionX;\r\n\t        this.y = this.positionY;\r\n\t        if (!useTransform) {\r\n\t            while (this.currentSymbols.length > 0) {\r\n\t                this.returnSymbol(this.currentSymbols.pop());\r\n\t            }\r\n\t        }\r\n\t        var bottomSymbols = [];\r\n\t        var topSymbols = [];\r\n\t        for (var i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n\t            var symbolId = void 0;\r\n\t            var symbolCase = void 0;\r\n\t            var symbolValue = 0;\r\n\t            var useMultiplier = true;\r\n\t            if (i < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolValue =\r\n\t                    this.valuesStrip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else if (i < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                if (this.data.customData) {\r\n\t                    symbolValue = this.data.customData[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                }\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t                useMultiplier = false;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolValue =\r\n\t                    this.valuesStrip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            if (!useTransform) {\r\n\t                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\r\n\t            }\r\n\t            else {\r\n\t                if (i < this.symbolBottomCount) {\r\n\t                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\r\n\t                }\r\n\t                else if (i > this.symbolBottomCount + this.symbolCount - 1) {\r\n\t                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (useTransform) {\r\n\t            while (bottomSymbols.length > 0) {\r\n\t                var symbol = bottomSymbols.shift();\r\n\t                if (symbol.id === 10) {\r\n\t                    symbol.goToCase(\"ROTATION_BOTTOM\");\r\n\t                }\r\n\t                this.currentSymbols.push(symbol);\r\n\t            }\r\n\t            while (topSymbols.length > 0) {\r\n\t                this.currentSymbols.unshift(topSymbols.shift());\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            this.addChild(this.currentSymbols[i]);\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t        this.moveToTop();\r\n\t    };\r\n\t    Reel2.prototype.updateReel = function () {\r\n\t        this.returnSymbol(this.currentSymbols.pop());\r\n\t        if (this.shouldBeStopping && !this.isStopping) {\r\n\t            if (this.previousReel === null) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t            else if (this.previousReel.isStopping) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t        }\r\n\t        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\t        var symbolId = this.strip[this.stripIndex];\r\n\t        var symbolCase = Symbol_1.Symbol.CaseBlur;\r\n\t        var symbolValue = this.valuesStrip[this.stripIndex];\r\n\t        var useMultiplier = true;\r\n\t        if (this.isStopping) {\r\n\t            if (this.stoppingCounter < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolValue =\r\n\t                    this.valuesStrip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n\t                if (this.data.customData) {\r\n\t                    symbolValue =\r\n\t                        this.data.customData[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n\t                }\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t                useMultiplier = false;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolValue =\r\n\t                    this.valuesStrip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n\t                        ? Symbol_1.Symbol.CaseRotation\r\n\t                        : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            this.stoppingCounter++;\r\n\t        }\r\n\t        if (!(this.isStopping && this.stoppingCounter > this.symbolBottomCount + this.symbolCount)) {\r\n\t            if (symbolId === 11) {\r\n\t                this._baseSoundFlyByDelay.start(5);\r\n\t            }\r\n\t        }\r\n\t        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\r\n\t        this.addChild(this.currentSymbols[0]);\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t        if (this.isStopping &&\r\n\t            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount) {\r\n\t            this.spinPostRoll();\r\n\t            for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t                var symbol = this.currentSymbols[i];\r\n\t                if (symbol.id == 10) {\r\n\t                    symbol.goToCase(\"POST_ROLL\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.spinRoll();\r\n\t        }\r\n\t        this.moveToTop();\r\n\t    };\r\n\t    Reel2.prototype.baseSoundFlyByDelay = function () {\r\n\t        this._baseSoundFlyByDelay.stop();\r\n\t        PlayList_1.PlayList.play(\"SND_BaseScatterFlyby_\" + this.index);\r\n\t    };\r\n\t    Reel2.prototype.moveToTop = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            if (symbol !== null && symbol.id === 6) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t            if (symbol !== null && symbol.id === 7) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            if (symbol !== null && symbol.id === 8) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            if (symbol !== null && symbol.id === 9) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            if (symbol !== null && symbol.id === 10) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Reel2.prototype.getSymbol = function (symbolId, symbolCase, amount, useMultiplier) {\r\n\t        if (amount === void 0) { amount = 0; }\r\n\t        if (useMultiplier === void 0) { useMultiplier = true; }\r\n\t        if (symbolCase === Symbol_1.Symbol.CaseRotation && symbolId !== 10) {\r\n\t            symbolCase = Symbol_1.Symbol.CaseNormal;\r\n\t        }\r\n\t        var symbol = _super.prototype.getSymbol.call(this, symbolId, symbolCase);\r\n\t        if (amount > 0) {\r\n\t            if (useMultiplier) {\r\n\t                symbol.setAmount(parseFloat(neo_common_1.NumberUtils.multiply(amount, BetManager_1.BetManager.Bet)));\r\n\t            }\r\n\t            else {\r\n\t                symbol.setAmount(amount);\r\n\t            }\r\n\t        }\r\n\t        if (Reel2.Tease) {\r\n\t            if (symbol.id !== 10) {\r\n\t                symbol.goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t                symbol.alpha = 0.9;\r\n\t            }\r\n\t        }\r\n\t        return symbol;\r\n\t    };\r\n\t    Reel2.Tease = false;\r\n\t    Reel2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Reel2);\r\n\t    return Reel2;\r\n\t}(Reel_1.Reel));\r\n\texports.Reel2 = Reel2;\r\n\n\n/***/ },\n/* 113 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar WinAnimator_1 = __webpack_require__(87);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar Payline_1 = __webpack_require__(88);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(100);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar BaseView_1 = __webpack_require__(86);\r\n\tvar FreespinsView_1 = __webpack_require__(114);\r\n\tvar WinAnimator2 = (function (_super) {\r\n\t    __extends(WinAnimator2, _super);\r\n\t    function WinAnimator2() {\r\n\t        _super.apply(this, arguments);\r\n\t        this._currentPaylineId = 0;\r\n\t        this._currentPaylineCount = 0;\r\n\t        this._winLineIndex = 1;\r\n\t        this._multiplierSoundCounter = 0;\r\n\t    }\r\n\t    WinAnimator2.prototype.setupPaylinesContainer = function (bottom, top, right, middle, multiplier) {\r\n\t        this._paylinesContainerBottom = bottom;\r\n\t        this._paylinesContainerTop = top;\r\n\t        this._paylineNumbersRight = right;\r\n\t        this._multiplierNumber = multiplier;\r\n\t        this._paylineNumbersMiddle = middle;\r\n\t    };\r\n\t    WinAnimator2.prototype.initialize = function (symbols, paylines, noWinSymbolsContainer, symbolsContainer, winFrameContainer, cycleContainer, paylineNumbers, sunContainer, bonusTeasingContainer, hwContainer) {\r\n\t        _super.prototype.initialize.call(this, symbols, paylines, noWinSymbolsContainer, symbolsContainer, winFrameContainer, cycleContainer, paylineNumbers, sunContainer, hwContainer);\r\n\t        if (bonusTeasingContainer) {\r\n\t            this._bonusTeasingContainer = bonusTeasingContainer;\r\n\t        }\r\n\t        this.topSuns = [null, null, null, null, null];\r\n\t    };\r\n\t    WinAnimator2.prototype.createTimer = function () {\r\n\t        _super.prototype.createTimer.call(this);\r\n\t        this._paylineTimer = FrameTimer_1.CreateFrameTimer(\"_paylineTimer\");\r\n\t        this._paylineTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onPaylineTimer.bind(this));\r\n\t        this._paylinesTimer = FrameTimer_1.CreateFrameTimer(\"_paylinesTimer\");\r\n\t        this._paylinesTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onPaylinesTimer.bind(this));\r\n\t    };\r\n\t    WinAnimator2.prototype.onReelStopped = function (reelsData, reelIndex) {\r\n\t        _super.prototype.onReelStopped.call(this, reelsData, reelIndex);\r\n\t        var transofrmMOESound = false;\r\n\t        for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol.id === 10 && this.currentSuns[reelIndex][i] != null) {\r\n\t                this.currentSuns[reelIndex][i].alpha = 0.5;\r\n\t            }\r\n\t            if (symbol.id === 8 && this.currentSuns[reelIndex][i] != null) {\r\n\t                transofrmMOESound = true;\r\n\t                symbol.goToCase(\"HIDE_TITLE\");\r\n\t                if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                    this.currentSuns[reelIndex][i].goToCase(\"ADD_MOE_FS\");\r\n\t                }\r\n\t                else {\r\n\t                    this.currentSuns[reelIndex][i].goToCase(\"ADD_MOE\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (transofrmMOESound) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWildMOE\");\r\n\t        }\r\n\t        this.reorderSymbols(reelIndex);\r\n\t        if (Symbol_1.Symbol.Teas) {\r\n\t            for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t                for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                    if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id < 10) {\r\n\t                        this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var calcScatters = 0;\r\n\t        for (var i = 0; i <= reelIndex; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id === 10) {\r\n\t                    calcScatters++;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        switch (reelIndex) {\r\n\t            case 0:\r\n\t                for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t                    if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\r\n\t                        this.currentSymbols[reelIndex][i].goToCase(Symbol_1.Symbol.CaseImpact);\r\n\t                    }\r\n\t                }\r\n\t                if (calcScatters === 1) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseScatter_0\");\r\n\t                }\r\n\t                break;\r\n\t            case 2:\r\n\t                if (calcScatters > 1) {\r\n\t                    for (var i = 0; i < this.currentSymbols[0].length; i++) {\r\n\t                        if (this.currentSymbols[0][i] != null && this.currentSymbols[0][i].id === 10) {\r\n\t                            this.currentSymbols[0][i].goToCase(Symbol_1.Symbol.CaseTease);\r\n\t                        }\r\n\t                    }\r\n\t                    for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t                        if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\r\n\t                            this.currentSymbols[reelIndex][i].goToCase(Symbol_1.Symbol.CaseImpactWithTease);\r\n\t                        }\r\n\t                    }\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseScatter_2\");\r\n\t                }\r\n\t                break;\r\n\t            case 3:\r\n\t                if (calcScatters > 1) {\r\n\t                    for (var i = 0; i < this.currentSymbols[0].length; i++) {\r\n\t                        if (this.currentSymbols[0][i] != null && this.currentSymbols[0][i].id === 10) {\r\n\t                            this._bonusTeasingContainer.addChild(this.currentSymbols[0][i]);\r\n\t                        }\r\n\t                    }\r\n\t                    for (var i = 0; i < this.currentSymbols[2].length; i++) {\r\n\t                        if (this.currentSymbols[2][i] != null && this.currentSymbols[2][i].id === 10) {\r\n\t                            this._bonusTeasingContainer.addChild(this.currentSymbols[2][i]);\r\n\t                        }\r\n\t                    }\r\n\t                    this.allSunsToCase(\"TEASING\");\r\n\t                }\r\n\t                break;\r\n\t            case 4:\r\n\t                if (calcScatters > 2) {\r\n\t                    for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t                        if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\r\n\t                            this.currentSymbols[reelIndex][i].goToCase(Symbol_1.Symbol.CaseImpactWithTease);\r\n\t                        }\r\n\t                    }\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseScatter_4\");\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.allSunsToCase = function (symbolCase) {\r\n\t        for (var i = 0; i < this.sunContainer.children.length; i++) {\r\n\t            this.sunContainer.children[i].goToCase(symbolCase);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showSymbols = function (reelsData) {\r\n\t        if (this._currentWinScatterSymbols != null) {\r\n\t            for (var i = 0; i < this._currentWinScatterSymbols.length; i++) {\r\n\t                this.symbols.returnSymbol(this._currentWinScatterSymbols[i]);\r\n\t            }\r\n\t        }\r\n\t        this._currentWinScatterSymbols = [];\r\n\t        _super.prototype.showSymbols.call(this, reelsData);\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.reorderSymbols(i);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.finishFirstWins = function () {\r\n\t        if (this.hasScatterWin()) {\r\n\t            this.showScatterWin();\r\n\t            return;\r\n\t        }\r\n\t        this.emit(WinAnimator_1.WinAnimator.FinishWinAnimator);\r\n\t        if (this.currentWins && this.currentWins.length > 0) {\r\n\t            this.stopTimer();\r\n\t            this.currentCycle = 0;\r\n\t            this.cycleWins(true);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.hasScatterWin = function () {\r\n\t        if (this.currentWins != null) {\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                var win = this.currentWins[i];\r\n\t                if (win.type === neo_games_1.Communication.Game.WinType.freeSpins &&\r\n\t                    win.trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    WinAnimator2.prototype.showScatterWin = function () {\r\n\t        if (this.currentWins != null) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseBonusWin\");\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                var win = this.currentWins[i];\r\n\t                if (win.type === neo_games_1.Communication.Game.WinType.freeSpins &&\r\n\t                    win.trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    this.winSymbolsGoToCaseAsScatter(i, Symbol_1.Symbol.CaseWin, true);\r\n\t                    this.stopTimer();\r\n\t                    this.startTimer(WinAnimator2.AlLWinsFinishedTimer, WinAnimator2.ShowScatterWinDuration);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showInitWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.resetAnimations();\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            this.reorderSymbols(i);\r\n\t        }\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.showFirstInitWins();\r\n\t            this.finishFirstInitWins();\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimator_1.WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this._currentPaylineId = 0;\r\n\t        this._currentPaylineCount = 0;\r\n\t        if (this._paylineTimer != null)\r\n\t            this._paylineTimer.stop();\r\n\t        if (this._paylinesTimer != null)\r\n\t            this._paylinesTimer.stop();\r\n\t        this.resetAnimations();\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.currentMultiplierIndex = 6;\r\n\t            for (var i = 0; i < this.multipliers.length; i++) {\r\n\t                if (this.currentWin / BetManager_1.BetManager.Bet > this.multipliers[i]) {\r\n\t                    this.currentMultiplierIndex = i;\r\n\t                }\r\n\t            }\r\n\t            this.showFirstWins();\r\n\t            return this.currentMultiplierIndex >= 3;\r\n\t        }\r\n\t        else {\r\n\t            this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNormal, false, true);\r\n\t            this.startTimer(WinAnimator_1.WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showFirstWins = function () {\r\n\t        this.currentAnimationIndex = this.getAnimationIndex();\r\n\t        this.currentAnimationFinished = false;\r\n\t        this._paylinesContainerTop.addChild(this.paylines);\r\n\t        for (var i = 0; i < this.topSuns.length; i++) {\r\n\t            if (this.topSuns[i] != null) {\r\n\t                this.topSuns[i].goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t            }\r\n\t        }\r\n\t        this.allSunsToCase(Symbol_1.Symbol.CaseNowin);\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, false, Symbol_1.Symbol.CaseNowin);\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t        this.showPaylinesOnFirst();\r\n\t    };\r\n\t    WinAnimator2.prototype.showFirstWinsDelayed = function () {\r\n\t        var symbolId = 0;\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            if (this.currentWins[i].payoutId > symbolId) {\r\n\t                symbolId = this.currentWins[i].payoutId;\r\n\t            }\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false, Symbol_1.Symbol.CaseNowin);\r\n\t            this.winPaylineGoToCase(i, \"END\");\r\n\t        }\r\n\t        if (symbolId >= 4) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseSymbol_\" + symbolId);\r\n\t        }\r\n\t        this.startAnimation();\r\n\t    };\r\n\t    WinAnimator2.prototype.startAnimation = function () {\r\n\t        _super.prototype.startAnimation.call(this);\r\n\t        if (this.currentMultiplierIndex >= 3) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t            if (BaseView_1.BaseView.Logo != null)\r\n\t                BaseView_1.BaseView.Logo.goToCase(\"ONLY_LOGO\");\r\n\t            if (FreespinsView_1.FreespinsView.Logo != null)\r\n\t                FreespinsView_1.FreespinsView.Logo.goToCase(\"ONLY_LOGO\");\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showFirstInitWins = function () {\r\n\t        this.allSunsToCase(Symbol_1.Symbol.CaseNowin);\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            if (this.currentWins[i].trigger == neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            }\r\n\t            else {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            }\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseFirstWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.finishFirstInitWins = function () {\r\n\t        if (this.currentWins.length > 0) {\r\n\t            if (this.currentWins.length > 1) {\r\n\t                if (this.currentWins[0].trigger == neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t                    this.currentWins.length == 2) {\r\n\t                    this.winSymbolsGoToCase(0, Symbol_1.Symbol.CaseWin, true);\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseRecapWinline\");\r\n\t                    if (!ModuleManager_1.ModuleManager.freespinsEnabled() && !ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                        PlayList_1.PlayList.loop(\"SND_BaseRecapLoop\");\r\n\t                    }\r\n\t                    return;\r\n\t                }\r\n\t                this.stopTimer();\r\n\t                this.currentCycle = 0;\r\n\t                this.cycleWins(true);\r\n\t            }\r\n\t            else {\r\n\t                this.winSymbolsGoToCase(0, Symbol_1.Symbol.CaseWin, true);\r\n\t                PlayList_1.PlayList.play(\"SND_BaseRecapWinline\");\r\n\t                if (!ModuleManager_1.ModuleManager.freespinsEnabled() && !ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                    PlayList_1.PlayList.loop(\"SND_BaseRecapLoop\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.cycleWins = function (isFirst) {\r\n\t        if (isFirst === void 0) { isFirst = false; }\r\n\t        if (this.currentWins == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.currentWins[this.currentCycle].type === neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t            if (this.currentWins.length === 1) {\r\n\t                return;\r\n\t            }\r\n\t            this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\t            this.cycleWins(isFirst);\r\n\t            return;\r\n\t        }\r\n\t        if (this.paylineNumbers != null) {\r\n\t            if (this.currentWins[this.currentCycle].paylineId != null) {\r\n\t                this.paylineNumbers.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\r\n\t            }\r\n\t            else {\r\n\t                this.paylineNumbers.goToCase(\"NORMAL\");\r\n\t            }\r\n\t        }\r\n\t        if (this._paylineNumbersRight != null) {\r\n\t            if (this.currentWins[this.currentCycle].paylineId != null) {\r\n\t                if (ModuleManager_1.ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\r\n\t                    var multiplier = this.currentWins[this.currentCycle].symbolMultiplier.toString();\r\n\t                    this._paylineNumbersRight.goToCase(\"MULTIPLIER_\" + multiplier);\r\n\t                }\r\n\t                else {\r\n\t                    this._paylineNumbersRight.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._paylineNumbersRight.goToCase(\"NORMAL\");\r\n\t            }\r\n\t        }\r\n\t        if (this._multiplierNumber != null) {\r\n\t            if (this.currentWins[this.currentCycle].paylineId != null) {\r\n\t                if (ModuleManager_1.ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\r\n\t                    var multiplier = this.currentWins[this.currentCycle].symbolMultiplier.toString();\r\n\t                    this._multiplierNumber.goToCase(\"MULTIPLIER_\" + multiplier);\r\n\t                }\r\n\t                else {\r\n\t                    this._multiplierNumber.goToCase(\"NORMAL\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._multiplierNumber.goToCase(\"NORMAL\");\r\n\t            }\r\n\t        }\r\n\t        if (this._paylineNumbersMiddle != null) {\r\n\t            if (this.currentWins[this.currentCycle].paylineId != null) {\r\n\t                if (ModuleManager_1.ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\r\n\t                    this._paylineNumbersMiddle.goToCase(\"CYCLE_FS_\" + this.currentWins[this.currentCycle].paylineId);\r\n\t                }\r\n\t                else {\r\n\t                    this._paylineNumbersMiddle.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._paylineNumbersMiddle.goToCase(\"NORMAL\");\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, false);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_BaseCycleLine\");\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            if (i == this.currentCycle) {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, false);\r\n\t            }\r\n\t            else {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, true);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            if (this.currentWins[i].type !== neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t                if (this.paylines != null) {\r\n\t                    var definition = PaylinesDefinitions_1.PaylinesDefinitions.getPaylineDefinitionsById(this.currentWins[i].paylineId, this.paylines.paylineDefinition);\r\n\t                    for (var i_1 = 0; i_1 < definition.length; i_1++) {\r\n\t                        var symbol = this.currentSymbols[i_1][definition[i_1]];\r\n\t                        this.cycleContainer.addChild(symbol);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            this.reorderSymbols(i);\r\n\t        }\r\n\t        _super.prototype.cycleWins.call(this, isFirst);\r\n\t    };\r\n\t    WinAnimator2.prototype.winSymbolsGoToCase = function (winIndex, caseType, useValue, caseTypeScatter) {\r\n\t        if (this.currentWins[winIndex].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t            this.currentWins.length > 1) {\r\n\t            if (caseTypeScatter) {\r\n\t                _super.prototype.winSymbolsGoToCase.call(this, winIndex, caseTypeScatter, false);\r\n\t            }\r\n\t            else {\r\n\t                _super.prototype.winSymbolsGoToCase.call(this, winIndex, caseType, false);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            _super.prototype.winSymbolsGoToCase.call(this, winIndex, caseType, useValue);\r\n\t        }\r\n\t        if (!useValue) {\r\n\t            for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t                this.reorderSymbols(i);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.winSymbolsGoToCaseAsPayline = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        if (this.paylines != null) {\r\n\t            var definition = PaylinesDefinitions_1.PaylinesDefinitions.getPaylineDefinitionsById(win.paylineId, this.paylines.paylineDefinition);\r\n\t            for (var i = 0; i < definition.length; i++) {\r\n\t                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][definition[i]];\r\n\t                    var caseTypeCustom = Symbol_1.Symbol.CaseWin + \"_\" + i;\r\n\t                    if (this.currentMultiplierIndex === 0) {\r\n\t                        caseTypeCustom = Symbol_1.Symbol.CaseWin;\r\n\t                    }\r\n\t                    if (caseType === Symbol_1.Symbol.CaseCycle) {\r\n\t                        caseTypeCustom = Symbol_1.Symbol.CaseCycle + \"_\" + i;\r\n\t                    }\r\n\t                    if (caseType === Symbol_1.Symbol.CaseWin || caseType === Symbol_1.Symbol.CaseCycle) {\r\n\t                        if (symbol.hasCase(caseTypeCustom)) {\r\n\t                            symbol.goToCase(caseTypeCustom);\r\n\t                            if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\r\n\t                                this.winFrames[i][definition[i]].goToCase(caseTypeCustom);\r\n\t                        }\r\n\t                        else {\r\n\t                            symbol.goToCase(caseType);\r\n\t                            if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\r\n\t                                this.winFrames[i][definition[i]].goToCase(caseType);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        symbol.goToCase(caseType);\r\n\t                        if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\r\n\t                            this.winFrames[i][definition[i]].goToCase(caseType);\r\n\t                    }\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator2.prototype.allSymbolsGoToCase = function (caseType, noWin, noAddChild) {\r\n\t        if (noAddChild === void 0) { noAddChild = false; }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    if (this.winFrames != null && this.winFrames[i][j] != null)\r\n\t                        this.winFrames[i][j].goToCase(caseType);\r\n\t                    if (caseType === Symbol_1.Symbol.CaseNormal && symbol.getCurrentCase() === Symbol_1.Symbol.CaseIdle) {\r\n\t                    }\r\n\t                    else {\r\n\t                        symbol.goToCase(caseType);\r\n\t                        if (!noAddChild) {\r\n\t                            if (noWin) {\r\n\t                                this.noWinSymbolsContainer.addChild(symbol);\r\n\t                            }\r\n\t                            else {\r\n\t                                this.symbolsContainer.addChild(symbol);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.addCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n\t            var id = this.currentReels[reelIndex].symbols[symbolIndex];\r\n\t            var value = 0;\r\n\t            if (this.currentReels[reelIndex].customData != null) {\r\n\t                value = this.currentReels[reelIndex].customData[symbolIndex];\r\n\t            }\r\n\t            var symbol = this.symbols.getSymbol(id - 1, Symbol_1.Symbol.CaseNormal);\r\n\t            if (Symbol_1.Symbol.Teas && symbol.id < 8) {\r\n\t                symbol.goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t            }\r\n\t            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n\t            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\t            this.symbolsContainer.addChild(symbol);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.winSymbolsGoToCaseAsScatter = function (winIndex, caseType, replaceWildWithScatter) {\r\n\t        var _this = this;\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    if (symbol.id == 9 && replaceWildWithScatter) {\r\n\t                        if (this._currentWinScatterSymbols.length > 0) {\r\n\t                            var wildSymbol = symbol;\r\n\t                            symbol = this._currentWinScatterSymbols.shift();\r\n\t                            this._currentWinScatterSymbols.push(wildSymbol);\r\n\t                            this.currentSymbols[i][j] = symbol;\r\n\t                            wildSymbol.goToCase(\"BELOW_SCATTER\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (symbol.id !== 9) {\r\n\t                        symbol.goToCase(caseType);\r\n\t                        if (caseType === Symbol_1.Symbol.CaseNowin) {\r\n\t                            this.noWinSymbolsContainer.addChild(symbol);\r\n\t                        }\r\n\t                        else {\r\n\t                            this.symbolsContainer.addChild(symbol);\r\n\t                        }\r\n\t                        symbols.push(symbol);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._currentWinScatterSymbols.forEach(function (symbol) {\r\n\t            if (caseType === Symbol_1.Symbol.CaseNowin) {\r\n\t                symbol.goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t                _this.noWinSymbolsContainer.addChild(symbol);\r\n\t            }\r\n\t        });\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator2.prototype.cleanUpSymbols = function () { };\r\n\t    WinAnimator2.prototype.onTimerComplete = function () {\r\n\t        this.timer.stop();\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimator2.AlLWinsFinishedTimer:\r\n\t                this.emit(WinAnimator_1.WinAnimator.FinishWinAnimator);\r\n\t                break;\r\n\t            default:\r\n\t                _super.prototype.onTimerComplete.call(this);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.reset = function (showLastSymbols) {\r\n\t        WinAnimator2.Teas = false;\r\n\t        this._currentPaylineId = 0;\r\n\t        this._currentPaylineCount = 0;\r\n\t        if (this._paylineTimer != null)\r\n\t            this._paylineTimer.stop();\r\n\t        if (this._paylinesTimer != null)\r\n\t            this._paylinesTimer.stop();\r\n\t        if (this.paylineNumbers != null) {\r\n\t            this.paylineNumbers.goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this._paylineNumbersRight != null) {\r\n\t            this._paylineNumbersRight.goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this._multiplierNumber != null) {\r\n\t            this._multiplierNumber.goToCase(\"NORMAL\");\r\n\t        }\r\n\t        if (this._paylineNumbersMiddle != null) {\r\n\t            this._paylineNumbersMiddle.goToCase(\"NORMAL\");\r\n\t        }\r\n\t        var rtn = _super.prototype.reset.call(this, showLastSymbols);\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            this.reorderSymbols(i);\r\n\t            this.reorderWildSymbols(i);\r\n\t        }\r\n\t        return rtn;\r\n\t    };\r\n\t    WinAnimator2.prototype.beforeWinPaylineGoToCase = function (winIndex, caseType) {\r\n\t        if (this.paylines != null) {\r\n\t            var win = this.currentWins[winIndex];\r\n\t            if (win.trigger === neo_games_1.Communication.Game.WinTrigger.Payline) {\r\n\t                this._currentPaylineCount++;\r\n\t                if (this.paylineNumbers != null) {\r\n\t                    this.paylineNumbers.goToCase(\"WIN_\" + this._currentPaylineCount);\r\n\t                }\r\n\t                if (this._paylineNumbersRight != null) {\r\n\t                    this._paylineNumbersRight.goToCase(\"WIN_\" + this._currentPaylineCount);\r\n\t                }\r\n\t                if (this._paylineNumbersMiddle != null) {\r\n\t                    this._paylineNumbersMiddle.goToCase(\"WIN_\" + this._currentPaylineCount);\r\n\t                }\r\n\t                if (caseType === Payline_1.Payline.CaseWin && this.currentWins.length === 1) {\r\n\t                    this.paylines.goToCase(Payline_1.Payline.CaseSingleWin, win.paylineId);\r\n\t                }\r\n\t                else {\r\n\t                    this.paylines.goToCase(caseType, win.paylineId);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.showPaylinesOnFirst = function () {\r\n\t        this.beforeWinPaylineGoToCase(this._currentPaylineId, Payline_1.Payline.CaseFirstWin);\r\n\t        if (this.currentWins.length > 1 || this.currentWins[0].trigger !== neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWinline_\" + this._winLineIndex + \"_\" + Math.floor(Math.random() * 3));\r\n\t        }\r\n\t        this._winLineIndex++;\r\n\t        if (this._winLineIndex > 3) {\r\n\t            this._winLineIndex = 1;\r\n\t        }\r\n\t        this._paylineTimer.start(5);\r\n\t    };\r\n\t    WinAnimator2.prototype.onPaylineTimer = function () {\r\n\t        if (this._currentPaylineId < this.currentWins.length - 1) {\r\n\t            this._currentPaylineId++;\r\n\t            this.showPaylinesOnFirst();\r\n\t        }\r\n\t        else {\r\n\t            if (this.currentWins.length === 1 &&\r\n\t                this.currentWins[0].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                this.onPaylinesTimer();\r\n\t            }\r\n\t            else {\r\n\t                this._paylinesTimer.start(15);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.onPaylinesTimer = function () {\r\n\t        this._paylinesContainerBottom.addChild(this.paylines);\r\n\t        if (this.currentWins.length === 1 && this.currentWins[0].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t            this.startAnimation();\r\n\t        }\r\n\t        else {\r\n\t            this.showFirstWinsDelayed();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.machineStopped = function (reels) {\r\n\t        this.allSunsToCase(\"AFTER_TEASING\");\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id === 10) {\r\n\t                    this.symbolsContainer.addChild(this.currentSymbols[i][j]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.topSuns.length; i++) {\r\n\t            if (this.topSuns[i] != null) {\r\n\t                this.noWinSymbolsContainer.addChild(this.topSuns[i]);\r\n\t            }\r\n\t        }\r\n\t        var transofrmSound = false;\r\n\t        var transofrmMOESound = false;\r\n\t        for (var i = 0; i < this.currentSuns.length; i++) {\r\n\t            for (var j = 0; j < this.currentSuns[i].length - 1; j++) {\r\n\t                if (this.currentSuns[i][j] !== null) {\r\n\t                    if (this.currentSymbols[i][j] !== null && this.currentSymbols[i][j].id === 8) {\r\n\t                        this.currentSuns[i][j].goToCase(\"TRANSFORM_MOE\");\r\n\t                        transofrmMOESound = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        this.currentSuns[i][j].goToCase(\"TRANSFORM\");\r\n\t                        transofrmSound = true;\r\n\t                    }\r\n\t                    this.currentSuns[i][j].alpha = 1;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._currentWinScatterSymbols = [];\r\n\t        var transform = false;\r\n\t        for (var i = 0; i < reels.length; i++) {\r\n\t            if (reels[i].transform != null) {\r\n\t                for (var j = 0; j < reels[i].transform.length; j++) {\r\n\t                    var id = reels[i].transform[j];\r\n\t                    if (id > 0) {\r\n\t                        var symbol1 = this.currentSymbols[i][j];\r\n\t                        symbol1.bindSymbols(this.symbols);\r\n\t                        if (symbol1.id == 10 && ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                            this._currentWinScatterSymbols.push(symbol1);\r\n\t                        }\r\n\t                        else {\r\n\t                            symbol1.goToCase(\"HIDE\");\r\n\t                        }\r\n\t                        transofrmSound = true;\r\n\t                        this.currentSymbols[i][j] = null;\r\n\t                        var symbol2 = this.symbols.getSymbol(9, \"TRANSFORM\");\r\n\t                        symbol2.position.x = this.reelX[i] - symbol2.offsetX;\r\n\t                        symbol2.position.y = this.reelY[i] + this.symbolHeight * j - symbol2.offsetY;\r\n\t                        symbol2.bindSymbols(this.symbols);\r\n\t                        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                            if (reels[i].customData != null &&\r\n\t                                reels[i].customData[\"wildMultiplier\"] != null &&\r\n\t                                reels[i].customData[\"wildMultiplier\"][j] != null) {\r\n\t                                symbol2.addWildMultiplier(reels[i].customData[\"wildMultiplier\"][j]);\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            symbol2.removeWildMultiplier();\r\n\t                        }\r\n\t                        this.currentSymbols[i][j] = symbol2;\r\n\t                        this.symbolsContainer.addChild(symbol2);\r\n\t                        transform = true;\r\n\t                    }\r\n\t                }\r\n\t                this.reorderSymbols(i);\r\n\t                this.reorderWildSymbols(i);\r\n\t            }\r\n\t        }\r\n\t        if (transofrmSound) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWildExplode\");\r\n\t        }\r\n\t        if (transofrmMOESound) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWildMOEExplode\");\r\n\t        }\r\n\t        return transform;\r\n\t    };\r\n\t    WinAnimator2.prototype.isMoESymbol = function (reels) {\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNormal, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t        var isMoESymbol = false;\r\n\t        for (var i = 0; i < this.currentSuns.length; i++) {\r\n\t            for (var j = 0; j < this.currentSuns[i].length - 1; j++) {\r\n\t                if (this.currentSuns[i][j] !== null) {\r\n\t                    if (this.currentSymbols[i][j] !== null && this.currentSymbols[i][j].id === 8) {\r\n\t                        isMoESymbol = true;\r\n\t                        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                            this.currentSuns[i][j].goToCase(\"MOE_BEFORE_WIN_FS\");\r\n\t                        }\r\n\t                        else {\r\n\t                            this.currentSuns[i][j].goToCase(\"MOE_BEFORE_WIN\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (isMoESymbol) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWildMOE2\");\r\n\t        }\r\n\t        return isMoESymbol;\r\n\t    };\r\n\t    WinAnimator2.prototype.spin = function (reels) {\r\n\t        for (var i = 0; i < this.topSuns.length; i++) {\r\n\t            if (this.topSuns[i] != null) {\r\n\t                this.sunContainer.addChild(this.topSuns[i]);\r\n\t                this.topSuns[i].x = this.reelX[i] - this.topSuns[i].offsetX;\r\n\t                this.topSuns[i].y = this.reelY[i] - this.symbolHeight - this.topSuns[i].offsetY;\r\n\t                this.topSuns[i].goToCase(\"CREATE_TOP\");\r\n\t                this.topSuns[i] = null;\r\n\t            }\r\n\t        }\r\n\t        var sunMoveSound = false;\r\n\t        for (var i = 0; i < this.currentSuns.length; i++) {\r\n\t            for (var j = 0; j < this.currentSuns[i].length; j++) {\r\n\t                if (this.currentSuns[i][j] !== null) {\r\n\t                    var sun = this.currentSuns[i][j];\r\n\t                    sun.position.x = this.reelX[i] - this.currentSuns[i][j].offsetX;\r\n\t                    sun.position.y = this.reelY[i] + this.symbolHeight * j - this.currentSuns[i][j].offsetY;\r\n\t                    sunMoveSound = true;\r\n\t                    if (j === 0) {\r\n\t                        sun.goToCase(\"CREATE\");\r\n\t                        this.currentSuns[i][j] = null;\r\n\t                        this.topSuns[i] = sun;\r\n\t                    }\r\n\t                    else if (j === 4) {\r\n\t                        sun.goToCase(\"MOVE_FROM_BOTTOM\");\r\n\t                    }\r\n\t                    else {\r\n\t                        sun.goToCase(\"CREATE\");\r\n\t                    }\r\n\t                    sun.alpha = 1;\r\n\t                    sun.removeSunMultiplier();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (sunMoveSound) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseWildMoves\");\r\n\t        }\r\n\t        if (this._currentWinScatterSymbols != null) {\r\n\t            for (var i = 0; i < this._currentWinScatterSymbols.length; i++) {\r\n\t                var symbol = this._currentWinScatterSymbols[i];\r\n\t                if (symbol !== null && symbol.id === 9) {\r\n\t                    symbol.goToCase(\"HIDE\");\r\n\t                }\r\n\t            }\r\n\t            this._currentWinScatterSymbols = [];\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.spinReceived = function (reels) {\r\n\t        var newSunSound = false;\r\n\t        for (var i = 0; i < reels.length; i++) {\r\n\t            if (reels[i].overlay != null) {\r\n\t                this.currentSuns[i].shift();\r\n\t                for (var j = 0; j < reels[i].overlay.length; j++) {\r\n\t                    var id = reels[i].overlay[j];\r\n\t                    if (j === reels[i].overlay.length - 1) {\r\n\t                        if (id > 0) {\r\n\t                            var symbol = this.symbols.getSymbol(12, \"CREATE_WITHOUT_MOVE\");\r\n\t                            newSunSound = true;\r\n\t                            symbol.position.x = this.reelX[i] - symbol.offsetX;\r\n\t                            symbol.position.y = this.reelY[i] + this.symbolHeight * 4 - symbol.offsetY;\r\n\t                            symbol.bindSymbols(this.symbols);\r\n\t                            symbol.removeSunMultiplier();\r\n\t                            this.currentSuns[i].push(symbol);\r\n\t                            this.sunContainer.addChild(symbol);\r\n\t                        }\r\n\t                        else {\r\n\t                            this.currentSuns[i].push(null);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (newSunSound) {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseWildCreate\");\r\n\t            }\r\n\t        }\r\n\t        var isAddMlp = false;\r\n\t        for (var i = 0; i < reels.length; i++) {\r\n\t            if (reels[i].overlay != null) {\r\n\t                for (var j = 0; j < reels[i].overlay.length; j++) {\r\n\t                    if (this.currentSuns[i][j] !== null) {\r\n\t                        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                            if (reels[i].customData != null &&\r\n\t                                reels[i].customData[\"baseWildMultiplier\"] != null &&\r\n\t                                reels[i].customData[\"baseWildMultiplier\"][j] != null) {\r\n\t                                this.currentSuns[i][j].addSunMultiplier(reels[i].customData[\"baseWildMultiplier\"][j]);\r\n\t                                this.currentSuns[i][j].goToCase(\"ADD_MLP\");\r\n\t                                isAddMlp = true;\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            this.currentSuns[i][j].removeSunMultiplier();\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (isAddMlp) {\r\n\t            PlayList_1.PlayList.play(\"SND_FSMultiplier\" + this._multiplierSoundCounter);\r\n\t            this._multiplierSoundCounter++;\r\n\t            if (this._multiplierSoundCounter > 2) {\r\n\t                this._multiplierSoundCounter = 0;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.createSuns = function (reels) {\r\n\t        for (var i = 0; i < this.currentSuns.length; i++) {\r\n\t            for (var j = 0; j < this.currentSuns[i].length; j++) {\r\n\t                if (this.currentSuns[i][j] !== null) {\r\n\t                    this.currentSuns[i][j].goToCase(\"RESET\");\r\n\t                    this.currentSuns[i][j].removeSunMultiplier();\r\n\t                    this.currentSuns[i][j] = null;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < reels.length; i++) {\r\n\t            if (reels[i].overlay != null) {\r\n\t                for (var j = 0; j < reels[i].overlay.length; j++) {\r\n\t                    var id = reels[i].overlay[j];\r\n\t                    if (id > 0) {\r\n\t                        var symbol = this.symbols.getSymbol(12, j === 4 ? \"QUICK_CREATE\" : \"EMPTY\");\r\n\t                        symbol.position.x = this.reelX[i] - symbol.offsetX;\r\n\t                        symbol.position.y = this.reelY[i] + this.symbolHeight * j - symbol.offsetY;\r\n\t                        symbol.bindSymbols(this.symbols);\r\n\t                        symbol.removeSunMultiplier();\r\n\t                        this.currentSuns[i][j] = symbol;\r\n\t                        this.currentSuns[i][j].alpha = 1;\r\n\t                        this.sunContainer.addChild(symbol);\r\n\t                    }\r\n\t                    else {\r\n\t                        this.currentSuns[i][j] = null;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.clearTopSuns = function () {\r\n\t        for (var i = 0; i < this.topSuns.length; i++) {\r\n\t            if (this.topSuns[i] != null) {\r\n\t                this.topSuns[i].goToCase(\"RESET\");\r\n\t                this.topSuns[i].removeSunMultiplier();\r\n\t                this.topSuns[i] = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.reorderSymbols = function (reelIndex) {\r\n\t        for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol !== null && symbol.id === 6) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t            if (symbol !== null && symbol.id === 7) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol !== null && symbol.id === 8) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol !== null && symbol.id === 9) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol !== null && symbol.id === 10) {\r\n\t                symbol.parent.addChild(symbol);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.prototype.reorderWildSymbols = function (reelIndex) {\r\n\t        if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            for (var i = 0; i < this.currentSymbols[reelIndex].length; i++) {\r\n\t                var symbol = this.currentSymbols[reelIndex][i];\r\n\t                if (symbol !== null && symbol.id === 9) {\r\n\t                    symbol.parent.addChild(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator2.Force = false;\r\n\t    WinAnimator2.Teas = false;\r\n\t    WinAnimator2.AlLWinsFinishedTimer = \"alLWinsFinishedTimer\";\r\n\t    WinAnimator2.ShowScatterWinDuration = 90;\r\n\t    WinAnimator2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimator2);\r\n\t    return WinAnimator2;\r\n\t}(WinAnimator_1.WinAnimator));\r\n\texports.WinAnimator2 = WinAnimator2;\r\n\n\n/***/ },\n/* 114 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar Machine_1 = __webpack_require__(110);\r\n\tvar WinAnimator_1 = __webpack_require__(87);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar AmbientBackground_1 = __webpack_require__(63);\r\n\tvar BaseView_1 = __webpack_require__(86);\r\n\tvar FreespinsModel_1 = __webpack_require__(61);\r\n\tvar LayoutContainerElement_1 = __webpack_require__(108);\r\n\tvar FreespinsView = (function (_super) {\r\n\t    __extends(FreespinsView, _super);\r\n\t    function FreespinsView() {\r\n\t        _super.call(this);\r\n\t        this._introDelay = FrameTimer_1.CreateFrameTimer(\"introDelay\");\r\n\t        this._introDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.introFinished.bind(this));\r\n\t        this._outroDelay = FrameTimer_1.CreateFrameTimer(\"outroDelay\");\r\n\t        this._outroDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        this._wildDelay = FrameTimer_1.CreateFrameTimer(\"wildDelay\");\r\n\t        this._wildDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.machineStoppedDelayed.bind(this));\r\n\t        this._symbolMoEDelay = FrameTimer_1.CreateFrameTimer(\"symbolMoEDelay\");\r\n\t        this._symbolMoEDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.symbolMoEDelay.bind(this));\r\n\t        this._showMessageEndFsDelay = FrameTimer_1.CreateFrameTimer(\"showMessageEndFsDelay\");\r\n\t        this._showMessageEndFsDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.showMessageEndFsDelay.bind(this));\r\n\t    }\r\n\t    FreespinsView.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (this.childs[\"Symbols\"] != null) {\r\n\t            this._symbols = this.childs[\"Symbols\"];\r\n\t            this.removeChild(this._symbols);\r\n\t        }\r\n\t        if (this.childs[\"Paylines\"] != null)\r\n\t            this._paylines = this.childs[\"Paylines\"];\r\n\t        if (this.childs[\"Machine\"] != null)\r\n\t            this._machine = this.childs[\"Machine\"];\r\n\t        if (this.childs[\"WinAnimator\"] != null)\r\n\t            this._winAnimator = this.childs[\"WinAnimator\"];\r\n\t        if (this.childs[\"FsMessageBox\"] != null)\r\n\t            FreespinsView.FsMessageBox = this.childs[\"FsMessageBox\"];\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            FreespinsView.Logo = this.childs[\"Logo\"];\r\n\t        this._fsMessageStart = document.getElementById(\"fsMessageStart\");\r\n\t        this._fsMessageEnd = document.getElementById(\"fsMessageEnd\");\r\n\t        this._fsMessageEndNoWin = document.getElementById(\"fsMessageEndNoWin\");\r\n\t        this._fsMessageStart.classList.add(\"_noAnim\");\r\n\t        this._fsMessageEnd.classList.add(\"_noAnim\");\r\n\t        this._fsMessageEndNoWin.classList.add(\"_noAnim\");\r\n\t        this.visible = false;\r\n\t    };\r\n\t    FreespinsView.prototype.initReceived = function (controller) {\r\n\t        this._controller = controller;\r\n\t        if (this._symbols != null) {\r\n\t            if (this._machine != null) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse != null) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.initData != null &&\r\n\t                        GameManager_1.GameManager.freespinsResponse.initData.reels !== null) {\r\n\t                        this._machine.on(Machine_1.Machine.ReelStopped, this.onReelStopped.bind(this));\r\n\t                        this._machine.on(Machine_1.Machine.MachineStopped, this.machineStopped.bind(this));\r\n\t                        this._machine.initialize(this._symbols, GameManager_1.GameManager.freespinsResponse.initData.reels, null, null, true);\r\n\t                    }\r\n\t                    if (this._winAnimator != null) {\r\n\t                        this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\r\n\t                        this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n\t                        this._winAnimator.initialize(this._symbols, this._paylines, this.childs[\"NoWinContainer\"], this.childs[\"WinContainer\"], this.childs[\"WinFrameContainer\"], this.childs[\"CycleContainer\"], this.childs[\"PaylineNumbers\"], this.childs[\"SunContainer\"], this.childs[\"BonusTeasingContainer\"], this.childs[\"HWContainer\"]);\r\n\t                        this._winAnimator.setupPaylinesContainer(this.childs[\"PaylinesContainerBottom\"], this.childs[\"PaylinesContainerTop\"], this.childs[\"PaylineNumbersRight\"], this.childs[\"PaylineNumbersMiddle\"], this.childs[\"MultiplierNumberMiddle\"]);\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no freespin reponse\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no machine\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t        this.visible = false;\r\n\t    };\r\n\t    FreespinsView.prototype.startReceived = function () {\r\n\t        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageStart.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            BaseView_1.BaseView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\r\n\t        }\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        if (FreespinsModel_1.FreespinsModel.LastScreen != null && FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"] !== null)\r\n\t            this._winAnimator.createSuns(FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"]);\r\n\t        this._winAnimator.reset(true);\r\n\t    };\r\n\t    FreespinsView.prototype.spinReceived = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.screen !== null) {\r\n\t            this._winAnimator.spinReceived(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        }\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._machine.spinStop(null, false, true);\r\n\t    };\r\n\t    FreespinsView.prototype.endReceived = function () { };\r\n\t    FreespinsView.prototype.spin = function () {\r\n\t        if (FreespinsModel_1.FreespinsModel.LastScreen != null && FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"] != null) {\r\n\t            this._winAnimator.spin(FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"]);\r\n\t        }\r\n\t        else {\r\n\t            this._winAnimator.spin(null);\r\n\t        }\r\n\t        PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageStart.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\r\n\t        }\r\n\t        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n\t    };\r\n\t    FreespinsView.prototype.stop = function () {\r\n\t        this._machine.spinStop(null, true);\r\n\t    };\r\n\t    FreespinsView.prototype.initIntro = function () {\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"fs\", 0);\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        if (FreespinsModel_1.FreespinsModel.LastScreen != null && FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"] !== null)\r\n\t            this._winAnimator.createSuns(FreespinsModel_1.FreespinsModel.LastScreen[\"reels\"]);\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.freespinsResponse.wins, GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        this.visible = true;\r\n\t        this.retrigger();\r\n\t        if (this.isLastFreespin()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_FSEndWait\");\r\n\t            PlayList_1.PlayList.play(\"SND_FSEnd\");\r\n\t            if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEnd.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    this._fsMessageEnd.classList.remove(\"_noAnim\");\r\n\t                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                    if (this.childs[\"Logo\"] != null)\r\n\t                        this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._fsMessageEndNoWin != null &&\r\n\t                    this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEndNoWin.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\r\n\t                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                    if (this.childs[\"Logo\"] != null)\r\n\t                        this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.visible = true;\r\n\t        if (BaseView_1.BaseView.Transition != null) {\r\n\t            this.addChild(BaseView_1.BaseView.Transition);\r\n\t            BaseView_1.BaseView.Transition.goToCase(\"END\");\r\n\t        }\r\n\t        setTimeout(function () {\r\n\t        }, 800);\r\n\t        this._introDelay.start(60);\r\n\t    };\r\n\t    FreespinsView.prototype.outro = function () {\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 90);\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t        this.visible = true;\r\n\t        if (BaseView_1.BaseView.Transition != null) {\r\n\t            this.addChild(BaseView_1.BaseView.Transition);\r\n\t            BaseView_1.BaseView.Transition.goToCase(\"START\");\r\n\t        }\r\n\t        if (FreespinsView.FsMessageBox.getCurrentCase() === \"MESSAGE_SHOW\") {\r\n\t            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\r\n\t        }\r\n\t        PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSWait\");\r\n\t        PlayList_1.PlayList.play(\"SND_FSTrans\");\r\n\t        if (this._fsMessageEnd != null && !this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageEnd.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMessageEndNoWin != null &&\r\n\t            !this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageEndNoWin.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._outroDelay.start(30);\r\n\t    };\r\n\t    FreespinsView.prototype.disableLogo = function () {\r\n\t        if (this.childs[\"Logo\"] != null) {\r\n\t            this.removeChild(this.childs[\"Logo\"]);\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.enable = function () {\r\n\t        PlayList_1.PlayList.play(\"SND_FSWin\");\r\n\t        if (this._fsMessageStart != null && this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageStart.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            this._fsMessageStart.classList.remove(\"_noAnim\");\r\n\t            BaseView_1.BaseView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t            if (BaseView_1.BaseView.Logo != null)\r\n\t                BaseView_1.BaseView.Logo.goToCase(\"ONLY_LOGO\");\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.onReelStopped = function () {\r\n\t        this._winAnimator.onReelStopped(GameManager_1.GameManager.freespinsResponse.screen.reels, this._machine.actualReelStopped);\r\n\t    };\r\n\t    FreespinsView.prototype.machineStopped = function () {\r\n\t        if (this._winAnimator.isMoESymbol(GameManager_1.GameManager.freespinsResponse.screen.reels)) {\r\n\t            this._controller.beforeMachineStopped();\r\n\t            this._symbolMoEDelay.start(35);\r\n\t        }\r\n\t        else {\r\n\t            this.symbolMoEDelay();\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.symbolMoEDelay = function () {\r\n\t        this._symbolMoEDelay.stop();\r\n\t        if (this._winAnimator.machineStopped(GameManager_1.GameManager.freespinsResponse.screen.reels)) {\r\n\t            this._controller.beforeMachineStopped();\r\n\t            this._wildDelay.start(40);\r\n\t        }\r\n\t        else {\r\n\t            this.machineStoppedDelayed();\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.machineStoppedDelayed = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin !== 0 || !this.isLastFreespin()) {\r\n\t            this._controller.machineStopped();\r\n\t        }\r\n\t        if (this._winAnimator.showWins(GameManager_1.GameManager.freespinsResponse.wins, GameManager_1.GameManager.freespinsResponse.currentWin)) {\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            if (this.isLastFreespin()) {\r\n\t                this._showMessageEndFsDelay.start(50);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.showMessageEndFsDelay = function () {\r\n\t        this._showMessageEndFsDelay.stop();\r\n\t        this._controller.machineStopped();\r\n\t        PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_FSWait\");\r\n\t        PlayList_1.PlayList.play(\"SND_FSEnd\");\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageEnd.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                this._fsMessageEnd.classList.remove(\"_noAnim\");\r\n\t                FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                if (this.childs[\"Logo\"] != null)\r\n\t                    this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._fsMessageEndNoWin != null &&\r\n\t                this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageEndNoWin.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\r\n\t                FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                if (this.childs[\"Logo\"] != null)\r\n\t                    this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.finishWinCalculation = function () {\r\n\t        this._controller.winCalculationFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.finishWinAnimator = function () {\r\n\t        this._controller.allWinsFinished();\r\n\t        if (this.isLastFreespin()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_FSWait\");\r\n\t            PlayList_1.PlayList.play(\"SND_FSEnd\");\r\n\t            if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEnd.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    this._fsMessageEnd.classList.remove(\"_noAnim\");\r\n\t                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                    if (this.childs[\"Logo\"] != null)\r\n\t                        this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._fsMessageEndNoWin != null &&\r\n\t                    this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEndNoWin.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\r\n\t                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                    if (this.childs[\"Logo\"] != null)\r\n\t                        this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        }\r\n\t        this.retrigger();\r\n\t    };\r\n\t    FreespinsView.prototype.introFinished = function () {\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"color-1\", 0);\r\n\t        PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        FreespinsView.FsMessageBox.goToCase(\"EMPTY\");\r\n\t        if (this.childs[\"Logo\"] != null)\r\n\t            this.childs[\"Logo\"].goToCase(\"LOGO\");\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.outroFinished = function () {\r\n\t        this.visible = false;\r\n\t        this._winAnimator.resetTimer();\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.retrigger = function () {\r\n\t        if (!this.isLastFreespin()) {\r\n\t            if (GameManager_1.GameManager.freespinsResponse.wins != null && GameManager_1.GameManager.freespinsResponse.wins.length > 0) {\r\n\t                for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t                        GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.freeSpins &&\r\n\t                        GameManager_1.GameManager.freespinsResponse.wins[i].symbols[0] === 9) {\r\n\t                        if (this._fsMessageStart != null &&\r\n\t                            this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            PlayList_1.PlayList.play(\"SND_FSWin\");\r\n\t                            this._fsMessageStart.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                            this._fsMessageStart.classList.remove(\"_noAnim\");\r\n\t                            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\r\n\t                            if (this.childs[\"Logo\"] != null)\r\n\t                                this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            return true;\r\n\t        }\r\n\t        return (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0);\r\n\t    };\r\n\t    FreespinsView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], FreespinsView);\r\n\t    return FreespinsView;\r\n\t}(LayoutContainerElement_1.LayoutContainerElement));\r\n\texports.FreespinsView = FreespinsView;\r\n\n\n/***/ },\n/* 115 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(52);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(84);\r\n\tvar BaseController_1 = __webpack_require__(85);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(44);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(39);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar MobileBaseUserControls = (function (_super) {\r\n\t    __extends(MobileBaseUserControls, _super);\r\n\t    function MobileBaseUserControls() {\r\n\t        _super.call(this, \"base\");\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = 0;\r\n\t        this._machineStopped = true;\r\n\t        this.longIntro = false;\r\n\t    }\r\n\t    MobileBaseUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._unColectedWinDelay = FrameTimer_1.CreateFrameTimer(\"unColectedWinDelay\");\r\n\t        this._unColectedWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\t        this._userControls = document.getElementById(\"userControls\");\r\n\t        this._betSettings = document.getElementById(\"betSettings\");\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BaseController_1.BaseController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._paytable = new Paytable_1.Paytable();\r\n\t        this._paytable.initialize();\r\n\t        if (GameManager_1.GameManager.gameResponse != null) {\r\n\t            if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            }\r\n\t        }\r\n\t        if (this._userControls != null && !ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null && !ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._userControls_supreme.style.display = \"none\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._unColectedWin,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this.prepareNewGameRound();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            }\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = 0;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this.changeWinBox(collect);\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this._afterWinDelay.start(35);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.frbSpin();\r\n\t        var hasFRBRestriction = FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && AppContext_1.AppContext.gameConfiguration.FRBGameRoundMinSpan > 0;\r\n\t        if (DataManager_1.DataManager.quickspinEnabled() && !hasFRBRestriction) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop && !hasFRBRestriction);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            if (action === BaseActions_1.BaseActions.ActionBaseCollect) {\r\n\t                this.changeWinBox(true);\r\n\t            }\r\n\t            else {\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetCycle:\r\n\t                    this.changeBet(false, false, true);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    this.changeBet(false, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    this.changeBet(true, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBaseCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.collect = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.collect();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Base);\r\n\t        if (!(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, !AppContext_1.AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString());\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.unColectedWinDelay = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.spin = function () {\r\n\t        this._machineStopped = false;\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.hasNewActiveOffer()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t            return;\r\n\t        }\r\n\t        if (Paytable_1.Paytable.shouldOpen(true, true)) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                Paytable_1.Paytable.show();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.Autoplay &&\r\n\t            !this._wasCalclulated &&\r\n\t            !DataManager_1.DataManager.GameRoundClosed &&\r\n\t            AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t            if (!this._wasCalclulated) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                    neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balanceTotal = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal));\r\n\t            var balanceAfter = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.totalWin, balanceTotal));\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: balanceAfter,\r\n\t                inSpin: true,\r\n\t            });\r\n\t        }\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            this.autoplayStop();\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        if (!BalanceManager_1.BalanceManager.hasCredit(false, true)) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            this.prepareNewGameRound();\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (!DataManager_1.DataManager.AutoplayStarted &&\r\n\t                GameManager_1.GameManager.baseResponse != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.baseResponse.totalWin);\r\n\t            }\r\n\t            DataManager_1.DataManager.updateLossLimit();\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled);\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this.playCollectSound();\r\n\t        DataManager_1.DataManager.updateTotalGain(true);\r\n\t        BalanceManager_1.BalanceManager.fixBalance();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed ||\r\n\t            (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        }\r\n\t        this._controller.spin();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        this._wasCalclulated = false;\r\n\t        neo_games_1.Platforms.Platforms.roundStarted({\r\n\t            totalBet: BetManager_1.BetManager.Bet,\r\n\t            freeRound: FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb,\r\n\t            userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)) });\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        neo_games_1.Platforms.Platforms.autoplayStop();\r\n\t        if (this._machineStopped) {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                    FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._unColectedWin = 0;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            this.changeWinBox();\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBet(decrease, max, cycle);\r\n\t        this._paytable.updateDataValues();\r\n\t        if (BetManager_1.BetManager.minBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t        }\r\n\t        else if (BetManager_1.BetManager.maxBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        this.updateReelsByBetChange();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.updateReelsByBetChange = function () {\r\n\t        this._controller.updateReelsByBetChange();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.beforeMachineStopped = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this.autoplayStop();\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.machineStopped = function () {\r\n\t        this._machineStopped = true;\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        DataManager_1.DataManager.stopAutoplayIfLossLimit();\r\n\t        DataManager_1.DataManager.stopAutoplayIfWinLimit();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (DataManager_1.DataManager.AutoplayCount === 0 + \"\") {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            this._afterWinDelay.start(30);\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.baseResponse.currentWin === 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed &&\r\n\t            !(FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        if (DataManager_1.DataManager.Autoplay && this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplayStop)) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.intro = function (long) {\r\n\t        var _this = this;\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        this.longIntro = long;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        this._controller.intro(long);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        var timer = 2500;\r\n\t        if (!long) {\r\n\t            timer = 16;\r\n\t        }\r\n\t        setTimeout(function () {\r\n\t            if (_this._userControls != null && _this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (_this._userControls_supreme != null &&\r\n\t                _this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }, timer);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.introFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded();\r\n\t        }\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            DataManager_1.DataManager.Autoplay = DataManager_1.DataManager.AutoplayAfterGamble;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        if (this.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonusExtended_1.FreeRoundBonusExtended.id != null || FreeRoundBonusExtended_1.FreeRoundBonusExtended.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.enableUi();\r\n\t            this.longIntro = false;\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonusExtended_1.FreeRoundBonusExtended.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.outro = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t            }\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this._autoplayDelay.stop();\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.outroFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null) {\r\n\t                this._userControls.style.display = \"none\";\r\n\t            }\r\n\t            if (this._userControls_supreme != null) {\r\n\t                this._userControls_supreme.style.display = \"none\";\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Gamble);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.prepareJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t        Paytable_1.Paytable.openAtStart(true);\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplay] = (DataManager_1.DataManager.GameRoundClosed ||\r\n\t                        (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb &&\r\n\t                            FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb)) &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBaseCollect] = FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended_1.FreeRoundBonusExtended.winPayMethod === \"cumulative\"\r\n\t                        ? false\r\n\t                        : !DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetCycle] = !ModuleManager_1.ModuleManager.gambleEnabled(),\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = !FreeRoundBonusExtended_1.FreeRoundBonusExtended.isLastFrb,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t                if (this._betSettings != null) {\r\n\t                    if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                        if (this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (!this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                    if (FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t                        if (!this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    neo_games_1.Platforms.Platforms.roundInit();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.prepareJackpotMiniGame = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            if (Jackpot_1.Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.resetWinAnimator();\r\n\t                this.disable();\r\n\t                FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t                Jackpot_1.Jackpot.startMiniGame();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                var self_1 = this;\r\n\t                if (this._wasCalclulated) {\r\n\t                    Jackpot_1.Jackpot.initMiniGame(true, function () {\r\n\t                        self_1.resetWinAnimator();\r\n\t                        self_1.disable();\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t                    });\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameLimit) {\r\n\t                    DataManager_1.DataManager.Autoplay = false;\r\n\t                    this.limit();\r\n\t                }\r\n\t                if (Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t                    this.actions.disableAllActions();\r\n\t                    HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t                    if (this._betSettings != null &&\r\n\t                        !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                        this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    }\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.checkJackpotMiniGame = function () {\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame() || FreeRoundBonusExtended_1.FreeRoundBonusExtended.inFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasInitializedGame() || Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox();\r\n\t                this._wasCalclulated = true;\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    this.collect();\r\n\t                }\r\n\t                else {\r\n\t                    this.playCollectSound();\r\n\t                    DataManager_1.DataManager.updateDataElements();\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.initMiniGame(false, null);\r\n\t            Jackpot_1.Jackpot.disableMiniGameAutostart();\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplay] = AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetCycle] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _a\r\n\t            ));\r\n\t            if (this._betSettings != null && this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._betSettings.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionStates((_b = {},\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBaseCollect] = true,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _b\r\n\t            ));\r\n\t            if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        var _a, _b;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.disable = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._controller.disableBase();\r\n\t        }\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.resetWinAnimator = function () {\r\n\t        this._controller.resetWinAnimator();\r\n\t    };\r\n\t    MobileBaseUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileBaseUserControls);\r\n\t    return MobileBaseUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobileBaseUserControls = MobileBaseUserControls;\r\n\n\n/***/ },\n/* 116 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(84);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar FreespinsController_1 = __webpack_require__(117);\r\n\tvar FreespinsActions_1 = __webpack_require__(118);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar DesktopFreespinsUserControls = (function (_super) {\r\n\t    __extends(DesktopFreespinsUserControls, _super);\r\n\t    function DesktopFreespinsUserControls() {\r\n\t        _super.call(this, \"freespins\");\r\n\t        this._wasCalclulated = true;\r\n\t        this._featureAutoEnded = false;\r\n\t    }\r\n\t    DesktopFreespinsUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._retriggerDelay = FrameTimer_1.CreateFrameTimer(\"retriggerDelay\");\r\n\t        this._retriggerDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.retriggerDelayed.bind(this));\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._featureAutoEndTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoEndTimer\");\r\n\t        this._featureAutoEndTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoEndDelayed.bind(this));\r\n\t        this._featureAutoPlayTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoPlayTimer\");\r\n\t        this._featureAutoPlayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoPlayDelayed.bind(this));\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.spinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Freespins);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionStart)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionStart;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionBack)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpin)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case FreespinsActions_1.FreespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.start = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.spin = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, (GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString());\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled);\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.spin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.back = function () {\r\n\t        this._featureAutoEndTimer.stop();\r\n\t        this._featureAutoPlayTimer.stop();\r\n\t        if (!this._featureAutoEnded) {\r\n\t            ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t        }\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endFreespins();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.totalWin, true);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t            this.startFeatureAutoPlay();\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.beforeMachineStopped = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this.autoplayStop();\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.machineStopped = function () {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        if (this.retrigger()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            return;\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t                this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t                this.startFeatureAutoEnd();\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t            this._afterWinDelay.start(30);\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                this._autoplayDelay.start(15);\r\n\t            }\r\n\t            else {\r\n\t                this.startFeatureAutoPlay();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.showExpandWilds = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this.retrigger()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (this.retrigger(true)) {\r\n\t            this._retriggerDelay.start(60);\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            this.startFeatureAutoEnd();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.startFeatureAutoPlay();\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.retriggerDelayed = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this._autoplayDelay.start(30);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"freespins\")) {\r\n\t            this._userControls_supreme.classList.add(\"freespins\");\r\n\t        }\r\n\t        this.retrigger(true);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t        if (this.isLastFreespin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            this.startFeatureAutoEnd();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        this.startFeatureAutoPlay();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.intro = function (long) {\r\n\t        var _this = this;\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        this._controller.intro(long);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        setTimeout(function () {\r\n\t            if (_this._userControls != null && _this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (_this._userControls_supreme != null &&\r\n\t                _this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }, 800);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t        this.startFeatureAutoPlay();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.outro = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._featureAutoEnded = false;\r\n\t        this._controller.outro();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base, true);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"freespins\")) {\r\n\t            this._userControls_supreme.classList.remove(\"freespins\");\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpin] = true,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.enable = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.retrigger = function (updateCount) {\r\n\t        if (updateCount === void 0) { updateCount = false; }\r\n\t        var wasRetrigger = false;\r\n\t        if (GameManager_1.GameManager.freespinsResponse.wins != null && GameManager_1.GameManager.freespinsResponse.wins.length > 0) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\r\n\t                    if (updateCount) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t                    }\r\n\t                    var count = GameManager_1.GameManager.freespinsResponse.wins[i].customData[\"count\"];\r\n\t                    if (count != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, count.toString());\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsWonCount, count.toString());\r\n\t                    }\r\n\t                    wasRetrigger = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return wasRetrigger && !this.isLastFreespin();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            this.limit();\r\n\t            return true;\r\n\t        }\r\n\t        return (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.featureAutoEndDelayed = function () {\r\n\t        this._featureAutoEndTimer.stop();\r\n\t        this._featureAutoEnded = true;\r\n\t        this.dispatchAction(FreespinsActions_1.FreespinsActions.ActionBack);\r\n\t        if (false) {\r\n\t            this.log(\"INFO featureAutoEndDelayed ActionBack\");\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.featureAutoPlayDelayed = function () {\r\n\t        this._featureAutoPlayTimer.stop();\r\n\t        this.dispatchAction(FreespinsActions_1.FreespinsActions.ActionAutoplay);\r\n\t        if (false) {\r\n\t            this.log(\"INFO featureAutoPlayDelayed ActionAutoplay\");\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.startFeatureAutoEnd = function (preDuration) {\r\n\t        if (preDuration === void 0) { preDuration = 0; }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoEndTimer.start(preDuration + AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.startFeatureAutoPlay = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoPlayTimer.start(AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopFreespinsUserControls);\r\n\t    return DesktopFreespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopFreespinsUserControls = DesktopFreespinsUserControls;\r\n\n\n/***/ },\n/* 117 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(79);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar FreespinsView_1 = __webpack_require__(114);\r\n\tvar FreespinsModel_1 = __webpack_require__(61);\r\n\tvar FreespinsController = (function (_super) {\r\n\t    __extends(FreespinsController, _super);\r\n\t    function FreespinsController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    FreespinsController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof FreespinsView_1.FreespinsView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR view is not instance of BaseView\");\r\n\t            }\r\n\t        }\r\n\t        this._model = new FreespinsModel_1.FreespinsModel(this);\r\n\t    };\r\n\t    FreespinsController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    FreespinsController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    FreespinsController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    FreespinsController.prototype.start = function () {\r\n\t        this._model.start();\r\n\t    };\r\n\t    FreespinsController.prototype.spin = function () {\r\n\t        this._model.spin();\r\n\t        this._view.spin();\r\n\t    };\r\n\t    FreespinsController.prototype.end = function () {\r\n\t        this._model.end();\r\n\t    };\r\n\t    FreespinsController.prototype.stop = function () {\r\n\t        this._view.stop();\r\n\t    };\r\n\t    FreespinsController.prototype.startReceived = function () {\r\n\t        this._view.startReceived();\r\n\t        this.emit(FreespinsController.StartReceived);\r\n\t    };\r\n\t    FreespinsController.prototype.spinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(FreespinsController.SpinReceived);\r\n\t    };\r\n\t    FreespinsController.prototype.endReceived = function () {\r\n\t        this._view.endReceived();\r\n\t        this.emit(FreespinsController.EndReceived);\r\n\t    };\r\n\t    FreespinsController.prototype.beforeMachineStopped = function () {\r\n\t        this.emit(FreespinsController.BeforeMachineStopped);\r\n\t    };\r\n\t    FreespinsController.prototype.machineStopped = function () {\r\n\t        this.emit(FreespinsController.MachineStopped);\r\n\t    };\r\n\t    FreespinsController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(FreespinsController.WinCalculationFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.allWinsFinished = function () {\r\n\t        this.emit(FreespinsController.AllWinsFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._view.intro(long);\r\n\t    };\r\n\t    FreespinsController.prototype.introFinished = function () {\r\n\t        this.emit(FreespinsController.IntroFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    FreespinsController.prototype.outroFinished = function () {\r\n\t        this.emit(FreespinsController.OutroFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.enable = function () {\r\n\t        this._view.enable();\r\n\t    };\r\n\t    FreespinsController.StartReceived = \"eventStartReceived\";\r\n\t    FreespinsController.SpinReceived = \"eventSpinReceived\";\r\n\t    FreespinsController.EndReceived = \"eventEndReceived\";\r\n\t    FreespinsController.MachineStopped = \"eventMachineStopped\";\r\n\t    FreespinsController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    FreespinsController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    FreespinsController.IntroFinished = \"eventIntroFinished\";\r\n\t    FreespinsController.OutroFinished = \"eventOutroFinished\";\r\n\t    FreespinsController.BeforeMachineStopped = \"eventBeforeMachineStopped\";\r\n\t    FreespinsController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], FreespinsController);\r\n\t    return FreespinsController;\r\n\t}(Controller_1.Controller));\r\n\texports.FreespinsController = FreespinsController;\r\n\n\n/***/ },\n/* 118 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar FreespinsActions = (function () {\r\n\t    function FreespinsActions() {\r\n\t    }\r\n\t    FreespinsActions.ActionStart = \"FREESPIN_START\";\r\n\t    FreespinsActions.ActionBack = \"FREESPIN_BACK_TO_GAME\";\r\n\t    FreespinsActions.ActionSpin = \"FREESPIN_SPIN\";\r\n\t    FreespinsActions.ActionSpinStop = \"FREESPIN_SPIN_STOP\";\r\n\t    FreespinsActions.ActionAutoplay = \"FREESPIN_AUTOPLAY\";\r\n\t    FreespinsActions.ActionAutoplayStop = \"FREESPIN_AUTOPLAY_STOP\";\r\n\t    return FreespinsActions;\r\n\t}());\r\n\texports.FreespinsActions = FreespinsActions;\r\n\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar LimitDialog_1 = __webpack_require__(55);\r\n\tvar FreespinsController_1 = __webpack_require__(117);\r\n\tvar FreespinsActions_1 = __webpack_require__(118);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar FreeRoundBonusExtended_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar MobileFreespinsUserControls = (function (_super) {\r\n\t    __extends(MobileFreespinsUserControls, _super);\r\n\t    function MobileFreespinsUserControls() {\r\n\t        _super.call(this, \"freespins\");\r\n\t        this._wasCalclulated = true;\r\n\t    }\r\n\t    MobileFreespinsUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._retriggerDelay = FrameTimer_1.CreateFrameTimer(\"retriggerDelay\");\r\n\t        this._retriggerDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.retriggerDelayed.bind(this));\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.spinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Freespins);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case FreespinsActions_1.FreespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.start = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.spin = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, (GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString());\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled);\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.spin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.back = function () {\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endFreespins();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.totalWin, true);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.beforeMachineStopped = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this.autoplayStop();\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.machineStopped = function () {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        if (this.retrigger()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            return;\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t                this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t            this._afterWinDelay.start(30);\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.showExpandWilds = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this.retrigger()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (this.retrigger(true)) {\r\n\t            this._retriggerDelay.start(60);\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.retriggerDelayed = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"freespins\")) {\r\n\t            this._userControls_supreme.classList.add(\"freespins\");\r\n\t        }\r\n\t        this.retrigger(true);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t        if (this.isLastFreespin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.intro = function (long) {\r\n\t        var _this = this;\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonusExtended_1.FreeRoundBonusExtended.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        this._controller.intro(long);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        setTimeout(function () {\r\n\t            if (_this._userControls != null && _this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (_this._userControls_supreme != null &&\r\n\t                _this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                _this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }, 2500);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.outro = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._controller.outro();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base, true);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"freespins\")) {\r\n\t            this._userControls_supreme.classList.remove(\"freespins\");\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpin] = true,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.enable = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.retrigger = function (updateCount) {\r\n\t        if (updateCount === void 0) { updateCount = false; }\r\n\t        var wasRetrigger = false;\r\n\t        if (GameManager_1.GameManager.freespinsResponse.wins != null && GameManager_1.GameManager.freespinsResponse.wins.length > 0) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\r\n\t                    if (updateCount) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t                    }\r\n\t                    var count = GameManager_1.GameManager.freespinsResponse.wins[i].customData[\"count\"];\r\n\t                    if (count != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, count.toString());\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsWonCount, count.toString());\r\n\t                    }\r\n\t                    wasRetrigger = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return wasRetrigger && !this.isLastFreespin();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            this.limit();\r\n\t            return true;\r\n\t        }\r\n\t        return (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0);\r\n\t    };\r\n\t    MobileFreespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileFreespinsUserControls);\r\n\t    return MobileFreespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobileFreespinsUserControls = MobileFreespinsUserControls;\r\n\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ActionManager = (function () {\r\n\t    function ActionManager() {\r\n\t    }\r\n\t    ActionManager.parseActionSets = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        ActionManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                node.getAttribute(\"Class\") === \"ActionSet\" &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(\"ActionSet\", ComponentTypes_1.ComponentTypes.ActionSet);\r\n\t        })\r\n\t            .forEach(function (node) { return neo_common_1.EngineComponentFactory.get(\"ActionSet\").RegisterActionSet(node); });\r\n\t    };\r\n\t    ActionManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ActionManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    ActionManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ActionManager\", data);\r\n\t        }\r\n\t    };\r\n\t    return ActionManager;\r\n\t}());\r\n\texports.ActionManager = ActionManager;\r\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Dialog_1 = __webpack_require__(35);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar SplashScreen_1 = __webpack_require__(60);\r\n\tvar GameClientHostConsumer = (function (_super) {\r\n\t    __extends(GameClientHostConsumer, _super);\r\n\t    function GameClientHostConsumer(app) {\r\n\t        _super.call(this, app);\r\n\t    }\r\n\t    Object.defineProperty(GameClientHostConsumer.prototype, \"dialog\", {\r\n\t        get: function () {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(this._dialog)) {\r\n\t                this._dialog = new Dialog_1.Dialog(this._app);\r\n\t            }\r\n\t            return this._dialog;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameClientHostConsumer.prototype.handleAction = function (actionGroup, action) {\r\n\t        if (!HtmlController_1.HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        if (actionGroup === neo_games_1.ClientHost.Types.ClientHostActionGroup.Default.toString()) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"Received action \\\"\" + action + \"\\\" (group: '\" + actionGroup + \"'), dispatching to controller.dispatchAction() ...\");\r\n\t            }\r\n\t            DataManager_1.DataManager.addTrustedUserAction(action);\r\n\t            ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t        }\r\n\t        else if (actionGroup === neo_games_1.ClientHost.Types.ClientHostActionGroup.Terminal.toString()) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"Received action \\\"\" + action + \"\\\" (group: '\" + actionGroup + \"'), dispatching to controller.dispatchTerminalAction() ...\");\r\n\t            }\r\n\t            DataManager_1.DataManager.addTrustedUserAction(action);\r\n\t            ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleShowDialog = function (request) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"inside handleShowDialog(), request: \", request);\r\n\t        }\r\n\t        if (request.type === neo_games_1.ClientHost.Types.ClientHostDialogType.Responsible1) {\r\n\t            this.showResponsibleDialog1(request.data);\r\n\t        }\r\n\t        else {\r\n\t            var dialogData = neo_common_1.Utils.isNullOrUndefined(request.data) ? null : request.data;\r\n\t            var special = false;\r\n\t            var gameRoundId = \"0\";\r\n\t            var errorId = \"\";\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(dialogData)) {\r\n\t                special = dialogData.special;\r\n\t                gameRoundId = dialogData.gameRoundId;\r\n\t                errorId = dialogData.errorId;\r\n\t            }\r\n\t            var isError = request.type === neo_games_1.ClientHost.Types.ClientHostDialogType.Error;\r\n\t            var code = request.error ? request.error.errorCode : \"\";\r\n\t            SplashScreen_1.SplashScreen.hideSplashScreen();\r\n\t            this.dialog.openDialog(request.text, code, errorId, isError, special, gameRoundId, request);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleShowEndGameDialog = function () {\r\n\t        var customData = {\r\n\t            data: {\r\n\t                actions: [null],\r\n\t            },\r\n\t        };\r\n\t        this.dialog.openDialog(Languages_1.Languages.getRid(\"DLG_ENDGAME\"), \"\", \"\", false, true, \"\", customData);\r\n\t        PIXI.sound.removeAll();\r\n\t        var dialog = document.getElementById(\"dialog\");\r\n\t        var root = document.getElementById(\"root\");\r\n\t        if (root != null && dialog != null) {\r\n\t            root.innerHTML = dialog.outerHTML;\r\n\t            document.body.innerHTML = \"\";\r\n\t            document.body.appendChild(root);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleCloseDialog = function () {\r\n\t        this.dialog.closeDialog();\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleRefreshAccount = function () {\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleError = function (error, data) {\r\n\t        this.dialog.openDialog(error, null, \"\", true);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleBlockRequest = function (blocked) {\r\n\t        if (blocked) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t            }\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handlePaytableRequest = function (request) { };\r\n\t    GameClientHostConsumer.prototype.handleAccountUpdate = function (balance, forceShow) {\r\n\t        if (forceShow) {\r\n\t            BetManager_1.BetManager.unHideValues(true);\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.balanceReceived(balance);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleAutoplayAction = function (action) {\r\n\t        switch (action) {\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Stop: {\r\n\t                if (DataManager_1.DataManager.Autoplay) {\r\n\t                    DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t                }\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Enable: {\r\n\t                DataManager_1.DataManager.AutoplayEnabled = true;\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Disable: {\r\n\t                if (DataManager_1.DataManager.Autoplay) {\r\n\t                    DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t                }\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayEnabled = false;\r\n\t                break;\r\n\t            }\r\n\t            default: {\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.errorGroup(\"GameClientHostConsumer\", \"Unknown autoplay action '\" + action + \"'\");\r\n\t                }\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleGameplayAction = function (action) {\r\n\t        switch (action) {\r\n\t            case neo_games_1.ClientHost.Types.GamePlayAction.Enable: {\r\n\t                GameManager_1.GameManager.enablePlay();\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.GamePlayAction.Disable: {\r\n\t                GameManager_1.GameManager.disablePlay();\r\n\t                break;\r\n\t            }\r\n\t            default: {\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.errorGroup(\"GameClientHostConsumer\", \"Unknown gameplay action '\" + action + \"'\");\r\n\t                }\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.terminateOnCollect = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"inside terminateOnCollect()\");\r\n\t        }\r\n\t        return GameManager_1.GameManager.canExit(true);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.showResponsibleDialog1 = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"showResponsibleDialog1(), data: \", data);\r\n\t        }\r\n\t        GameManager_1.GameManager.showResponsibleDialog1(data);\r\n\t    };\r\n\t    return GameClientHostConsumer;\r\n\t}(neo_games_1.GameEngine.GameClientHostConsumerBase));\r\n\texports.GameClientHostConsumer = GameClientHostConsumer;\r\n\n\n/***/ },\n/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameDefinition = (function (_super) {\r\n\t    __extends(GameDefinition, _super);\r\n\t    function GameDefinition() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(GameDefinition.prototype, \"Gamble\", {\r\n\t        get: function () {\r\n\t            return this.getValue(\"Gamble\", true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return GameDefinition;\r\n\t}(neo_games_1.GameEngine.GameDefinitionBase));\r\n\texports.GameDefinition = GameDefinition;\r\n\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar key_GameEnableReelsStop = \"GameEnableReelsStop\";\r\n\tvar key_GameEnableQuickSpin = \"GameEnableQuickSpin\";\r\n\tvar key_QuickSpinDialogCount = \"QuickSpinDialogCount\";\r\n\tvar key_QuickSpinDecayDelay = \"QuickSpinDecayDelay\";\r\n\tvar key_MinGameRoundDuration = \"MinGameRoundDuration\";\r\n\tvar key_GameRoundMinSpan = \"GameRoundMinSpan\";\r\n\tvar key_FRBGameRoundMinSpan = \"FRBGameRoundMinSpan\";\r\n\tvar key_UIShowTime = \"UIShowTime\";\r\n\tvar key_GUIShowSessionTime = \"GUI_ShowSessionTime\";\r\n\tvar key_GUIShowSessionTimeStartValue = \"GUI_ShowSessionTimeStartValue\";\r\n\tvar key_UseServerTime = \"UseServerTime\";\r\n\tvar key_UseHtmlAudio = \"UseHtmlAudio\";\r\n\tvar key_FullscreenOnClick = \"FullscreenOnClick\";\r\n\tvar key_UseCoins = \"UseCoins\";\r\n\tvar key_AutoplayGambleEnabled = \"AutoplayGambleEnabled\";\r\n\tvar key_AutoplayMode = \"AutoplayMode\";\r\n\tvar key_AutoplayCounts = \"AutoplayCounts\";\r\n\tvar key_AutoplayLossLimit = \"AutoplayLossLimit\";\r\n\tvar key_AutoplaySingleWinLimit = \"AutoplaySingleWinLimit\";\r\n\tvar key_HelpShowGameLimit = \"HelpShowGameLimit\";\r\n\tvar key_HelpShowRTP = \"HelpShowRTP\";\r\n\tvar key_ShowGameRoundsHistory = \"ShowGameRoundsHistory\";\r\n\tvar key_ExpirationResolveHours = \"ExpirationResolveHours\";\r\n\tvar key_AutoplayModeSpeed = \"AutoplayModeSpeed\";\r\n\tvar key_HideAmountsEnabled = \"HideAmountsEnabled\";\r\n\tvar key_AutoplayModeEnabled = \"AutoplayModeEnabled\";\r\n\tvar key_ResetCoinCountOnDenomChange = \"ResetCoinCountOnDenomChange\";\r\n\tvar key_CollectOnUnCalculatedWin = \"CollectOnUnCalculatedWin\";\r\n\tvar key_PluginUrl = \"PluginUrl\";\r\n\tvar key_PluginOrigin = \"PluginOrigin\";\r\n\tvar key_Platform = \"Platform\";\r\n\tvar key_PollCredit = \"PollCredit\";\r\n\tvar key_ShowDecimalPlaces = \"ShowDecimalPlaces\";\r\n\tvar key_SelectorRolloutDuration = \"SelectorRolloutDuration\";\r\n\tvar key_DisplayCurrencies = \"DisplayCurrencies\";\r\n\tvar key_CanvasFallback = \"CanvasFallback\";\r\n\tvar key_GameRoundIdVisible = \"GameRoundIdVisible\";\r\n\tvar key_MuteOnLostFocus = \"MuteOnLostFocus\";\r\n\tvar key_ShowCashierMessage = \"ShowCashierMessage\";\r\n\tvar key_CashierMessageShowRefreshBalanceButton = \"CashierMessageShowRefreshBalanceButton\";\r\n\tvar key_CashierUrl = \"CashierUrl\";\r\n\tvar key_DisableUntrustedClicks = \"DisableUntrustedClicks\";\r\n\tvar key_PlayerSessionReconnectionInterval = \"PlayerSessionReconnectionInterval\";\r\n\tvar key_ApplicationGatewayUrl = \"ApplicationGatewayUrl\";\r\n\tvar key_EventTrackerEnabled = \"EventTrackerEnabled\";\r\n\tvar key_GameEnableVibration = \"GameEnableVibration\";\r\n\tvar key_SplashScreen = \"SplashScreen\";\r\n\tvar key_PaytableUseValue = \"PaytableUseValue\";\r\n\tvar key_GUI_HistoryUrl = \"GUI_HistoryUrl\";\r\n\tvar key_RCI_HistoryUrl = \"RCI_HistoryUrl\";\r\n\tvar key_RCI_Info = \"RCI_Info\";\r\n\tvar key_RCI_IntervalInfo = \"RCI_IntervalInfo\";\r\n\tvar key_RCI_ShowHistoryButton = \"RCI_ShowHistoryButton\";\r\n\tvar key_FeatureAutoPlay = \"FeatureAutoPlay\";\r\n\tvar key_FeatureAutoPick = \"FeatureAutoPick\";\r\n\tvar key_ShowSimilarGames = \"ShowSimilarGames\";\r\n\tvar key_SimilarGamesList = \"SimilarGamesList\";\r\n\tvar key_ShowExitGameButton = \"ShowExitGameButton\";\r\n\tvar key_StaticContentUrl = \"StaticContentUrl\";\r\n\tvar key_ShowHomeButton = \"ShowHomeButton\";\r\n\tvar key_UsePortraitMode = \"UsePortraitMode\";\r\n\tvar key_FRBShowDenyButton = \"FRBShowDenyButton\";\r\n\tvar key_FRBShowPostponeButton = \"FRBShowPostponeButton\";\r\n\tvar key_StatusBar = \"StatusBar\";\r\n\tvar key_StatusBarData = \"StatusBarData\";\r\n\tvar key_ProgressiveBonusId = \"ProgressiveBonusId\";\r\n\tvar key_ProgressiveBonusContributeOnlyQualified = \"ProgressiveBonusContributeOnlyQualified\";\r\n\tvar key_ProgressiveBonusMinQualifyingBet = \"ProgressiveBonusMinQualifyingBet\";\r\n\tvar key_ProgressiveBonusMaxQualifyingBet = \"ProgressiveBonusMaxQualifyingBet\";\r\n\tvar key_ProgressiveBonusVisibleMax = \"ProgressiveBonusVisibleMax\";\r\n\tvar key_ProgressiveBonusHelpShowMaxVisibleLimit = \"ProgressiveBonusHelpShowMaxVisibleLimit\";\r\n\tvar key_ProgressiveBonusHelpShowCumulativeWinLimit = \"ProgressiveBonusHelpShowCumulativeWinLimit\";\r\n\tvar key_ProgressiveBonusTicketConstraint = \"ProgressiveBonusTicketConstraint\";\r\n\tvar key_UseJackpotLocalization = \"UseJackpotLocalization\";\r\n\tvar key_ProgressiveBonusTheme = \"ProgressiveBonusTheme\";\r\n\tvar key_SessionBalance = \"SessionBalance\";\r\n\tvar key_TotalBet = \"TotalBet\";\r\n\tvar key_TotalWin = \"TotalWin\";\r\n\tvar key_PlayerTokenId = \"PlayerTokenId\";\r\n\tvar key_ClientToken = \"ClientToken\";\r\n\tvar key_MaxBetEnabled = \"MaxBetEnabled\";\r\n\tvar key_ShowMaxBetMessage = \"ShowMaxBetMessage\";\r\n\tvar key_HelpShowGameModuleVersion = \"HelpShowGameModuleVersion\";\r\n\tvar key_NotifyBetHigherThanMin = \"NotifyBetHigherThanMin\";\r\n\tvar key_ShowPaytableAtStart = \"ShowPaytableAtStart\";\r\n\tvar key_HelpShowMaxPayoutProbability = \"HelpShowMaxPayoutProbability\";\r\n\tvar key_HelpShowMaxPayoutProbabilityFrequency = \"HelpShowMaxPayoutProbabilityFrequency\";\r\n\tvar GameConfiguration = (function (_super) {\r\n\t    __extends(GameConfiguration, _super);\r\n\t    function GameConfiguration() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableReelsStop\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableReelsStop, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableQuickSpin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableQuickSpin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"QuickSpinDialogCount\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_QuickSpinDialogCount, 3);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"QuickSpinDecayDelay\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_QuickSpinDecayDelay, 30);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MinGameRoundDuration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MinGameRoundDuration, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameRoundMinSpan\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameRoundMinSpan, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FRBGameRoundMinSpan\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FRBGameRoundMinSpan, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UIShowTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UIShowTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIShowSessionTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUIShowSessionTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIShowSessionTimeStartValue\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUIShowSessionTimeStartValue, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseServerTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseServerTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseHtmlAudio\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseHtmlAudio, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FullscreenOnClick\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FullscreenOnClick, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseCoins\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseCoins, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayGambleEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayGambleEnabled, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MaxBetEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MaxBetEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowMaxBetMessage\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowMaxBetMessage, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayMode\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayMode, \"simple\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayCounts\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayCounts, [-1, 1000, 750, 500, 250, 100, 75, 50, 25, 10]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayLossLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayLossLimit, [-1, 5, 20, 50]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplaySingleWinLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplaySingleWinLimit, [-1, 10, 20, 75]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowGameLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowGameLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowRTP\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowRTP, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowGameRoundsHistory\", {\r\n\t        get: function () {\r\n\t            return GameManager_1.GameManager.gameResponse.roundId > -1 && this.getValue(key_ShowGameRoundsHistory, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ExpirationResolveHours\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ExpirationResolveHours, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayModeSpeed\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayModeSpeed, \"standard\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HideAmountsEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HideAmountsEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayModeEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayModeEnabled, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ResetCoinCountOnDenomChange\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ResetCoinCountOnDenomChange, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CollectOnUnCalculatedWin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CollectOnUnCalculatedWin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PluginUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PluginUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PluginOrigin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PluginOrigin, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"Platform\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_Platform, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PollCredit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PollCredit, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowDecimalPlaces\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowDecimalPlaces, 2);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SelectorRolloutDuration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SelectorRolloutDuration, 5);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"DisplayCurrencies\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_DisplayCurrencies, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CanvasFallback\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CanvasFallback, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameRoundIdVisible\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameRoundIdVisible, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MuteOnLostFocus\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MuteOnLostFocus, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowCashierMessage\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowCashierMessage, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CashierMessageShowRefreshBalanceButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CashierMessageShowRefreshBalanceButton, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CashierUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CashierUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"DisableUntrustedClicks\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_DisableUntrustedClicks, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SplashScreen\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SplashScreen, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIHistoryUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUI_HistoryUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIHistoryUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_HistoryUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIInfo\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_Info, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIIntervalInfo\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_IntervalInfo, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIShowHistoryButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_ShowHistoryButton, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FeatureAutoPlay\", {\r\n\t        get: function () {\r\n\t            return (this.getValue(key_FeatureAutoPlay, 0) / 1000) * 60;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FeatureAutoPick\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FeatureAutoPick, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowSimilarGames\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowSimilarGames, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SimilarGamesList\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SimilarGamesList, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowExitGameButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowExitGameButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StaticContentUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StaticContentUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowHomeButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowHomeButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UsePortraitMode\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UsePortraitMode, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FRBShowDenyButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FRBShowDenyButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FRBShowPostponeButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FRBShowPostponeButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StatusBar\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StatusBar, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StatusBarData\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StatusBarData, {});\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusId\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusId, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusContributeOnlyQualified\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusContributeOnlyQualified, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusMinQualifyingBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusMinQualifyingBet, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusMaxQualifyingBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusMaxQualifyingBet, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusVisibleMax\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusVisibleMax, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusHelpShowMaxVisibleLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusHelpShowMaxVisibleLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusHelpShowCumulativeWinLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusHelpShowCumulativeWinLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusTicketConstraint\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusTicketConstraint, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseJackpotLocalization\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseJackpotLocalization, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusTheme\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusTheme, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SessionBalance\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SessionBalance, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"TotalBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_TotalBet, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"TotalWin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_TotalWin, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PlayerTokenId\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PlayerTokenId, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PlayerSessionReconnectionInterval\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PlayerSessionReconnectionInterval, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ApplicationGatewayUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ApplicationGatewayUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableVibration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableVibration, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowGameModuleVersion\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowGameModuleVersion, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"NotifyBetHigherThanMin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_NotifyBetHigherThanMin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowMaxPayoutProbability\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowMaxPayoutProbability, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowMaxPayoutProbabilityFrequency\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowMaxPayoutProbabilityFrequency, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowPaytableAtStart\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowPaytableAtStart, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PaytableUseValue\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PaytableUseValue, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"EventTrackerEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_EventTrackerEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ClientToken\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ClientToken, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return GameConfiguration;\r\n\t}(neo_games_1.GameEngine.GameConfigurationBase));\r\n\texports.GameConfiguration = GameConfiguration;\r\n\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar UserAction_1 = __webpack_require__(49);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar RetentionPanel_1 = __webpack_require__(42);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(51);\r\n\tvar NotificationManager_1 = __webpack_require__(56);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar PlatformsManager = (function () {\r\n\t    function PlatformsManager() {\r\n\t    }\r\n\t    PlatformsManager.create = function () {\r\n\t        var pluginOrigin = \"*\";\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.PluginOrigin != \"\") {\r\n\t                pluginOrigin = AppContext_1.AppContext.gameConfiguration.PluginOrigin;\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.getTimeDataFnc = DataManager_1.DataManager.getTimeData;\r\n\t            neo_games_1.Platforms.Platforms.getGameTimeFnc = DataManager_1.DataManager.getGameTime;\r\n\t            neo_games_1.Platforms.Platforms.createEmitter();\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.AutoplayStop, PlatformsManager.stopAutoplay);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.RestoreAutoplay, function (autoplayData) {\r\n\t                PlatformsManager.restoreAutoplay(autoplayData);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ResizeGame, PlatformsManager.resizeGame);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.RefreshBalance, PlatformsManager.refreshBalance);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayStop, function (disableChannel) {\r\n\t                PlatformsManager.gamePlayStop(disableChannel);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayResume, PlatformsManager.gamePlayResume);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayFreeze, PlatformsManager.gamePlayFreeze);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayUnfreeze, PlatformsManager.gamePlayUnfreeze);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioEnable, PlatformsManager.gameAudioEnable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioMute, PlatformsManager.gameAudioMute);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioSet, function (level) {\r\n\t                PlatformsManager.gameAudioSet(level);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameQuickSpin, function (enabled) {\r\n\t                PlatformsManager.gameQuickSpin(enabled);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ShowHelp, PlatformsManager.showHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.HideHelp, PlatformsManager.hideHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ToggleHelp, PlatformsManager.toggleHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ShowPaytable, PlatformsManager.showPaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.HidePaytable, PlatformsManager.hidePaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.TogglePaytable, PlatformsManager.togglePaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformCloseMenu, PlatformsManager.platformCloseMenu);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformCloseGame, PlatformsManager.platformCloseGame);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformUpdateUI, PlatformsManager.platformUpdateUI);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformErrorMessageDismissed, PlatformsManager.platformErrorMessageDismissed);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.CreateNotification, function (events) {\r\n\t                PlatformsManager.createNotification(events);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.create(AppContext_1.AppContext.gameConfiguration.Platform, AppContext_1.AppContext.gameConfiguration.PluginUrl, pluginOrigin, { gameKey: GameApp_1.GameApp.key, lang: GameApp_1.GameApp.language, clientHub: NotificationManager_1.NotificationManager });\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.stopAutoplay = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t    };\r\n\t    PlatformsManager.restoreAutoplay = function (autoplayData) {\r\n\t        DataManager_1.DataManager.Autoplay = true;\r\n\t        DataManager_1.DataManager.AutoplayCount = autoplayData.autoplayCount;\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = autoplayData.autoplayLossLimit;\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = autoplayData.autoplayWinLimit;\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"AUTOPLAY\");\r\n\t    };\r\n\t    PlatformsManager.resizeGame = function () {\r\n\t        Scaling_1.Scaling.resizeRoot();\r\n\t    };\r\n\t    PlatformsManager.refreshBalance = function () {\r\n\t        BalanceManager_1.BalanceManager.refreshBalance(true);\r\n\t    };\r\n\t    PlatformsManager.gamePlayStop = function (disableChannel) {\r\n\t        if (disableChannel === void 0) { disableChannel = false; }\r\n\t        PlatformsManager.stopAutoplay();\r\n\t        if (disableChannel) {\r\n\t            if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            }\r\n\t            else if (ModuleManager_1.ModuleManager[\"freespinsActive\"] && ModuleManager_1.ModuleManager[\"freespinsActive\"]()) {\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.disableChannelModule(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gamePlayResume = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager[\"freespinsActive\"] && ModuleManager_1.ModuleManager[\"freespinsActive\"]()) {\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gamePlayFreeze = function () {\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            PlatformsManager.stopAutoplay();\r\n\t        }\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        document.body.classList.add(\"freeze\");\r\n\t    };\r\n\t    PlatformsManager.gamePlayUnfreeze = function () {\r\n\t        document.body.classList.remove(\"freeze\");\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = true;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.resumeAll();\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = true;\r\n\t    };\r\n\t    PlatformsManager.gameAudioEnable = function () {\r\n\t        HtmlController_1.HtmlController.setSound(3);\r\n\t    };\r\n\t    PlatformsManager.gameAudioMute = function () {\r\n\t        HtmlController_1.HtmlController.setSound(0);\r\n\t    };\r\n\t    PlatformsManager.gameAudioSet = function (level) {\r\n\t        HtmlController_1.HtmlController.setSound(level);\r\n\t    };\r\n\t    PlatformsManager.showHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.hideHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (!dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.toggleHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOn);\r\n\t                }\r\n\t                else {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.showPaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.hidePaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (!dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.togglePaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t                else {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gameQuickSpin = function (enabled) {\r\n\t        if (DataManager_1.DataManager[\"quickspinSet\"]) {\r\n\t            DataManager_1.DataManager[\"quickspinSet\"](enabled);\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.platformCloseMenu = function () {\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t    };\r\n\t    PlatformsManager.platformCloseGame = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"platformsManager\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    PlatformsManager.platformUpdateUI = function () {\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    PlatformsManager.platformErrorMessageDismissed = function () {\r\n\t    };\r\n\t    PlatformsManager.createNotification = function (events) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.EventTrackerEnabled) {\r\n\t            NotificationManager_1.NotificationManager.sendMessage({\r\n\t                application: \"EventTrackingServer\",\r\n\t                service: \"EventTracker\",\r\n\t                action: \"event/log\",\r\n\t                data: { events: events },\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    return PlatformsManager;\r\n\t}());\r\n\texports.PlatformsManager = PlatformsManager;\r\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ShapeElement_1 = __webpack_require__(13);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar BaseElementParticle = (function (_super) {\r\n\t    __extends(BaseElementParticle, _super);\r\n\t    function BaseElementParticle() {\r\n\t        _super.call(this);\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElementParticle.prototype._create = function (node) {\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Alpha\")) {\r\n\t            this.alpha = parseFloat(node.getAttribute(\"Alpha\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Rotation\")) {\r\n\t            this.rotation = parseInt(node.getAttribute(\"Rotation\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"StartRotation\")) {\r\n\t            if (node.getAttribute(\"StartRotation\") === \"random\") {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"ScaleX\")) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(\"scaleX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ScaleY\")) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(\"ScaleY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Scale\")) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(\"Scale\"));\r\n\t            this.scale.y = parseFloat(node.getAttribute(\"Scale\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"X\")) {\r\n\t            this.position.x = parseInt(node.getAttribute(\"X\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Y\")) {\r\n\t            this.position.y = parseInt(node.getAttribute(\"Y\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PivotX\")) {\r\n\t            this.pivot.x = parseInt(node.getAttribute(\"PivotX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PivotY\")) {\r\n\t            this.pivot.y = parseInt(node.getAttribute(\"PivotY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Visible\")) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"Visible\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Mask\")) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(\"Mask\")) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(\"Mask\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"BitmapMask\")) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(\"BitmapMask\"));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(\"BitmapMaskX\")) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(\"BitmapMaskX\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskY\")) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(\"BitmapMaskY\"));\r\n\t                }\r\n\t                if (!node.hasAttribute(\"BitmapMaskShow\")) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no image with name for mask: \" + node.getAttribute(\"BitmapMask\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._positionTweenOnCreate(node);\r\n\t        this._scaleTweenOnCreate(node);\r\n\t        this._rotationTweenOnCreate(node);\r\n\t        this._alphaTweenOnCreate(node);\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype._positionTweenOnCreate = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y)) {\r\n\t            return;\r\n\t        }\r\n\t        var tweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X));\r\n\t        var tweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y));\r\n\t        if (tweenX == null || tweenY == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for PositionTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\r\n\t            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\r\n\t            : null;\r\n\t        var position = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\r\n\t            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\r\n\t            : null;\r\n\t        if (position == BaseElementParticleAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            tweenX = tweenX.map(function (value) {\r\n\t                return value + _this.position.x;\r\n\t            });\r\n\t            tweenY = tweenY.map(function (value) {\r\n\t                return value + _this.position.y;\r\n\t            });\r\n\t        }\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration });\r\n\t    };\r\n\t    BaseElementParticle.prototype._scaleTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var tweenValues = BaseElementParticle._getPointsFromPointsAttribute(node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN));\r\n\t        var tweenDuration = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\r\n\t            ? node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration });\r\n\t    };\r\n\t    BaseElementParticle.prototype._rotationTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var degrees = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN));\r\n\t        if (degrees == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for RotationTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\r\n\t            ? node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\r\n\t            : null;\r\n\t        var tweenDelay = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY))\r\n\t            : 0;\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay });\r\n\t    };\r\n\t    BaseElementParticle.prototype._alphaTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var alphas = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN));\r\n\t        if (alphas == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for RotationTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenDelay = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY)\r\n\t            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY))\r\n\t            : 0;\r\n\t        var tweenEase = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\r\n\t            ? node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay });\r\n\t    };\r\n\t    BaseElementParticle._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    BaseElementParticle.prototype.create = function (node) {\r\n\t        this._create(node);\r\n\t    };\r\n\t    BaseElementParticle.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElementParticle.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = BaseElementParticle._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    BaseElementParticle.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    BaseElementParticle.prototype.clone = function () {\r\n\t        throw new Error(\"Not implemented\");\r\n\t    };\r\n\t    BaseElementParticle.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    BaseElementParticle.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    BaseElementParticle.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    BaseElementParticle.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    BaseElementParticle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseElementParticle);\r\n\t    return BaseElementParticle;\r\n\t}(PIXI.particles.ParticleContainer));\r\n\texports.BaseElementParticle = BaseElementParticle;\r\n\tvar BaseElementParticleAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    EMIT: \"Emit\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 126 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ImageElement_1 = __webpack_require__(96);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar BGParticleElement = (function (_super) {\r\n\t    __extends(BGParticleElement, _super);\r\n\t    function BGParticleElement() {\r\n\t        _super.call(this);\r\n\t        this.circles = [];\r\n\t        this.circlesData = [];\r\n\t        this.connectionZoneWidth = [];\r\n\t        this.connectionZoneHeight = [];\r\n\t        this._pool = [];\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"bgTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.startUpdate.bind(this));\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._emitOnce = false;\r\n\t        this._startType = \"\";\r\n\t        this.visible = false;\r\n\t        this.counts = 0;\r\n\t    }\r\n\t    BGParticleElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.BGParticleElementAttributes.BLEND_MODE)) {\r\n\t            this._blendMode = parseInt(node.getAttribute(exports.BGParticleElementAttributes.BLEND_MODE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BGParticleElementAttributes.STYLE)) {\r\n\t            this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.BGParticleElementAttributes.STYLE)];\r\n\t            this._styleName = this._style.name;\r\n\t            this.visible = true;\r\n\t            this.connectionZoneHeight = this._style.connectionZoneHeight;\r\n\t            this.connectionZoneWidth = this._style.connectionZoneWidth;\r\n\t            this.createParticles();\r\n\t        }\r\n\t    };\r\n\t    BGParticleElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t    };\r\n\t    BGParticleElement.prototype.createParticles = function () {\r\n\t        var startCount = this._style.count;\r\n\t        var imageElement;\r\n\t        this.counts = this._style.counts[this._style.connected - 1];\r\n\t        for (var i = 0; i < startCount; i++) {\r\n\t            var speedX = 0;\r\n\t            var speedY = 0;\r\n\t            var scale = 1;\r\n\t            var randomX = Math.random() * StageController_1.StageController.Width;\r\n\t            var randomY = Math.random() * StageController_1.StageController.Height;\r\n\t            for (var j = 0; j < this._style.images.length; j++) {\r\n\t                if (i < this._style.counts[j]) {\r\n\t                    imageElement = new ImageElement_1.ImageElement(StageController_1.StageController.getTextureByResourceId(this._style.images[j]));\r\n\t                    speedX =\r\n\t                        Math.random() * (this._style.speedX[j][1] - this._style.speedX[j][0]) +\r\n\t                            this._style.speedX[j][0];\r\n\t                    speedY =\r\n\t                        Math.random() * (this._style.speedY[j][1] - this._style.speedY[j][0]) +\r\n\t                            this._style.speedY[j][0];\r\n\t                    scale =\r\n\t                        Math.random() * (this._style.scale[j][1] - this._style.scale[j][0]) + this._style.scale[j][0];\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t            imageElement.position.x = randomX;\r\n\t            imageElement.position.y = randomY;\r\n\t            imageElement.pivot.x = imageElement.width / 2;\r\n\t            imageElement.pivot.y = imageElement.height / 2;\r\n\t            imageElement.scale.x = scale;\r\n\t            imageElement.scale.y = scale;\r\n\t            if (Math.round(Math.random()) == 0) {\r\n\t                speedX = -speedX;\r\n\t            }\r\n\t            if (Math.round(Math.random()) == 0) {\r\n\t                speedY = -speedY;\r\n\t            }\r\n\t            this.circles.push(imageElement);\r\n\t            this.addChild(imageElement);\r\n\t            this.circlesData.push([speedX, speedY]);\r\n\t        }\r\n\t        this.lines = new PIXI.Graphics();\r\n\t        this.addChildAt(this.lines, 0);\r\n\t        this.startUpdate();\r\n\t    };\r\n\t    BGParticleElement.prototype.startUpdate = function () {\r\n\t        var _this = this;\r\n\t        _this.updateU();\r\n\t        this._timer.start(2);\r\n\t    };\r\n\t    BGParticleElement.prototype.updateU = function () {\r\n\t        this.lines.clear();\r\n\t        for (var i = 0; i < this.circles.length; i++) {\r\n\t            this.circles[i].position.x += this.circlesData[i][0];\r\n\t            this.circles[i].position.y += this.circlesData[i][1];\r\n\t            if (this.circles[i].position.x > 1920) {\r\n\t                this.circlesData[i][0] *= -1;\r\n\t                this.circles[i].position.x = 1920;\r\n\t            }\r\n\t            else if (this.circles[i].position.x < 0) {\r\n\t                this.circlesData[i][0] *= -1;\r\n\t                this.circles[i].position.x = 0;\r\n\t            }\r\n\t            if (this.circles[i].position.y > 1080) {\r\n\t                this.circlesData[i][1] *= -1;\r\n\t                this.circles[i].position.y = 1080;\r\n\t            }\r\n\t            else if (this.circles[i].position.y < 0) {\r\n\t                this.circlesData[i][1] *= -1;\r\n\t                this.circles[i].position.y = 0;\r\n\t            }\r\n\t            var inZone = false;\r\n\t            for (var k = 0; k < this.connectionZoneHeight.length; k++) {\r\n\t                if (this.circles[i].position.y >= this.connectionZoneHeight[k][0] &&\r\n\t                    this.circles[i].position.y <= this.connectionZoneHeight[k][1] &&\r\n\t                    this.circles[i].position.x >= this.connectionZoneWidth[k][0] &&\r\n\t                    this.circles[i].position.x <= this.connectionZoneWidth[k][1]) {\r\n\t                    inZone = true;\r\n\t                }\r\n\t            }\r\n\t            if (inZone) {\r\n\t                if (this.circles[i].alpha < 1) {\r\n\t                    this.circles[i].alpha += 0.0125;\r\n\t                }\r\n\t                for (var j = i; j < this.circles.length; j++) {\r\n\t                    if (i < this.counts && j < this.counts) {\r\n\t                        var distance = Math.sqrt(Math.pow(this.circles[j].x - this.circles[i].x, 2) +\r\n\t                            Math.pow(this.circles[j].y - this.circles[i].y, 2));\r\n\t                        var opacity = 1 - distance / this._style.radius;\r\n\t                        if (opacity > 0) {\r\n\t                            if (opacity > this._style.lineAlpha) {\r\n\t                                opacity = this._style.lineAlpha;\r\n\t                            }\r\n\t                            this.lines\r\n\t                                .lineStyle(this._style.lineWidth, this._style.lineColor, opacity)\r\n\t                                .moveTo(this.circles[i].x, this.circles[i].y)\r\n\t                                .lineTo(this.circles[j].x, this.circles[j].y);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this.circles[i].alpha > 0.3) {\r\n\t                    this.circles[i].alpha -= 0.0125;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BGParticleElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    BGParticleElement.prototype.clone = function () {\r\n\t        var element = new BGParticleElement();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        var node = document.createElement(\"particle\");\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    BGParticleElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BGParticleElement);\r\n\t    return BGParticleElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.BGParticleElement = BGParticleElement;\r\n\texports.BGParticleElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    SPEED_X: \"SpeedX\",\r\n\t    SPEED_Y: \"SpeedY\",\r\n\t    EMIT_ONCE: \"EmitOnce\",\r\n\t    START_TYPE: \"StartType\",\r\n\t    ALPHA: \"Alpha\",\r\n\t    SCALE: \"Scale\",\r\n\t    STYLE: \"Style\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_COUNTS: \"Counts\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    RADIUS: \"Radius\",\r\n\t    CONNECTED: \"Connected\",\r\n\t    CONNECTION_ZONE_HEIGHT: \"ConnectionZoneHeight\",\r\n\t    CONNECTION_ZONE_WIDTH: \"ConnectionZoneWidth\",\r\n\t    LINE_COLOR: \"LineColor\",\r\n\t    LINE_WIDTH: \"LineWidth\",\r\n\t    LINE_ALPHA: \"LineAlpha\",\r\n\t};\r\n\n\n/***/ },\n/* 127 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ActionSet_1 = __webpack_require__(69);\r\n\tvar LinkedElement = (function () {\r\n\t    function LinkedElement() {\r\n\t    }\r\n\t    LinkedElement.prototype.create = function (node, nodeAttributes) {\r\n\t        if (node.hasAttribute(exports.LinkedElementAttributes.LINKED_TO_ID)) {\r\n\t            if (ActionSet_1.ActionSet.ElementsToLink != null &&\r\n\t                ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(exports.LinkedElementAttributes.LINKED_TO_ID)] != null) {\r\n\t                var mainElement = ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(exports.LinkedElementAttributes.LINKED_TO_ID)];\r\n\t                if (nodeAttributes != null) {\r\n\t                    mainElement.updateByNode(nodeAttributes);\r\n\t                }\r\n\t                else {\r\n\t                    mainElement.updateByNode(node);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(LinkedElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    LinkedElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    LinkedElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    LinkedElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.LinkedElement)\r\n\t    ], LinkedElement);\r\n\t    return LinkedElement;\r\n\t}());\r\n\texports.LinkedElement = LinkedElement;\r\n\texports.LinkedElementAttributes = {\r\n\t    LINKED_TO_ID: \"LinkedToId\",\r\n\t};\r\n\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar Vibration_1 = __webpack_require__(129);\r\n\tvar VibrationElement = (function (_super) {\r\n\t    __extends(VibrationElement, _super);\r\n\t    function VibrationElement() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    VibrationElement.prototype.createByNode = function (node) {\r\n\t    };\r\n\t    VibrationElement.prototype.updateByNode = function (node) {\r\n\t        if (node.hasAttribute(exports.VibrationElementAttributes.PATTERN)) {\r\n\t            var pattern = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.VibrationElementAttributes.PATTERN));\r\n\t            Vibration_1.Vibration.vibrate(pattern);\r\n\t        }\r\n\t    };\r\n\t    VibrationElement.prototype.clone = function () {\r\n\t        var element = new VibrationElement();\r\n\t        return element;\r\n\t    };\r\n\t    VibrationElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], VibrationElement);\r\n\t    return VibrationElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.VibrationElement = VibrationElement;\r\n\texports.VibrationElementAttributes = {\r\n\t    PATTERN: \"Pattern\",\r\n\t};\r\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Vibration = (function () {\r\n\t    function Vibration() {\r\n\t    }\r\n\t    Vibration.vibrate = function (pattern) {\r\n\t        if (pattern === void 0) { pattern = 0; }\r\n\t        if (!DataManager_1.DataManager.VibrationEnabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (navigator.vibrate == null) {\r\n\t            return;\r\n\t        }\r\n\t        navigator.vibrate(pattern);\r\n\t    };\r\n\t    return Vibration;\r\n\t}());\r\n\texports.Vibration = Vibration;\r\n\n\n/***/ },\n/* 130 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\n\n/***/ },\n/* 131 */\n130,\n/* 132 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar CustomUtils_1 = __webpack_require__(94);\r\n\tvar AnimationStyle = (function (_super) {\r\n\t    __extends(AnimationStyle, _super);\r\n\t    function AnimationStyle() {\r\n\t        _super.call(this);\r\n\t        this.animation = \"\";\r\n\t        this.startFrame = 0;\r\n\t        this.speed = 1;\r\n\t        this.loop = false;\r\n\t        this.stop = false;\r\n\t    }\r\n\t    AnimationStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.ANIMATION)) {\r\n\t            this.animation = node.getAttribute(exports.AnimationStyleAttributes.ANIMATION);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.START_FRAME)) {\r\n\t            this.startFrame = parseInt(node.getAttribute(exports.AnimationStyleAttributes.START_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.END_FRAME)) {\r\n\t            this.endFrame = parseInt(node.getAttribute(exports.AnimationStyleAttributes.END_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.LOOP)) {\r\n\t            this.loop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationStyleAttributes.LOOP));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.STOP)) {\r\n\t            this.stop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationStyleAttributes.STOP));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.SPEED)) {\r\n\t            this.speed = parseFloat(node.getAttribute(exports.AnimationStyleAttributes.SPEED));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(exports.AnimationStyleAttributes.ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.TINT)) {\r\n\t            this.tint = parseInt(node.getAttribute(exports.AnimationStyleAttributes.TINT), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.BLEND_MODE)) {\r\n\t            this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(exports.AnimationStyleAttributes.BLEND_MODE)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationStyleAttributes.REVERSE)) {\r\n\t            this.reverse = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationStyleAttributes.REVERSE));\r\n\t        }\r\n\t    };\r\n\t    AnimationStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], AnimationStyle);\r\n\t    return AnimationStyle;\r\n\t}(Style_1.Style));\r\n\texports.AnimationStyle = AnimationStyle;\r\n\texports.AnimationStyleAttributes = {\r\n\t    ANIMATION: \"Animation\",\r\n\t    START_FRAME: \"StartFrame\",\r\n\t    END_FRAME: \"EndFrame\",\r\n\t    LOOP: \"Loop\",\r\n\t    STOP: \"Stop\",\r\n\t    SPEED: \"Speed\",\r\n\t    ALPHA: \"Alpha\",\r\n\t    TINT: \"Tint\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    REVERSE: \"Reverse\",\r\n\t};\r\n\n\n/***/ },\n/* 133 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BGParticleElement_1 = __webpack_require__(126);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BGParticleStyle = (function (_super) {\r\n\t    __extends(BGParticleStyle, _super);\r\n\t    function BGParticleStyle() {\r\n\t        _super.call(this);\r\n\t        this._count = 0;\r\n\t        this._counts = [];\r\n\t        this._images = [];\r\n\t        this._scale = [];\r\n\t        this._radius = 200;\r\n\t        this._connected = 0;\r\n\t        this._speedX = [];\r\n\t        this._speedY = [];\r\n\t        this._lineWidth = 1;\r\n\t        this._lineColor = 0x000000;\r\n\t        this._lineAlpha = 1;\r\n\t        this._connectionZoneHeight = [];\r\n\t        this._connectionZoneWidth = [];\r\n\t    }\r\n\t    BGParticleStyle.prototype.create = function (node) {\r\n\t        this.node = node;\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.parseChildrenNodes(node);\r\n\t    };\r\n\t    BGParticleStyle.prototype.parseChildrenNodes = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case BGParticleStyle.NodeImages:\r\n\t                    this.initializeImages(next);\r\n\t                    break;\r\n\t                case BGParticleStyle.NodeBehavior:\r\n\t                    this.initializeBehavior(next);\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"count\", {\r\n\t        get: function () {\r\n\t            return this._count;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"counts\", {\r\n\t        get: function () {\r\n\t            return this._counts;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"images\", {\r\n\t        get: function () {\r\n\t            return this._images;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"scale\", {\r\n\t        get: function () {\r\n\t            return this._scale;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"speedX\", {\r\n\t        get: function () {\r\n\t            return this._speedX;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"speedY\", {\r\n\t        get: function () {\r\n\t            return this._speedY;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"lineAlpha\", {\r\n\t        get: function () {\r\n\t            return this._lineAlpha;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"radius\", {\r\n\t        get: function () {\r\n\t            return this._radius;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"connected\", {\r\n\t        get: function () {\r\n\t            return this._connected;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"lineWidth\", {\r\n\t        get: function () {\r\n\t            return this._lineWidth;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"lineColor\", {\r\n\t        get: function () {\r\n\t            return this._lineColor;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"connectionZoneWidth\", {\r\n\t        get: function () {\r\n\t            return this._connectionZoneWidth;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BGParticleStyle.prototype, \"connectionZoneHeight\", {\r\n\t        get: function () {\r\n\t            return this._connectionZoneHeight;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BGParticleStyle.prototype.initializeImages = function (node) {\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_FROM_FRAME)) {\r\n\t            this._images = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_FROM_FRAME).split(\";\");\r\n\t            for (var i = 0; i < this._images.length; i++) {\r\n\t                this._images[i] = this._images[i] + \"0000\";\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_IMAGES)) {\r\n\t            this._images = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_IMAGES).split(\";\");\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.SCALE)) {\r\n\t            var scales = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.SCALE).split(\"|\");\r\n\t            for (var i = 0; i < scales.length; i++) {\r\n\t                this._scale.push(scales[i].split(\";\").map(Number));\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_COUNTS)) {\r\n\t            var counts = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.ATTR_COUNTS).split(\";\").map(Number);\r\n\t            for (var i = 0; i < counts.length; i++) {\r\n\t                if (i == 0) {\r\n\t                    this._counts.push(counts[i]);\r\n\t                }\r\n\t                else {\r\n\t                    this._counts.push(counts[i] + this._counts[i - 1]);\r\n\t                }\r\n\t            }\r\n\t            this._count = this._counts[this._counts.length - 1];\r\n\t        }\r\n\t    };\r\n\t    BGParticleStyle.prototype.initializeBehavior = function (node) {\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.SPEED_X)) {\r\n\t            var speedX = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.SPEED_X).split(\"|\");\r\n\t            for (var i = 0; i < speedX.length; i++) {\r\n\t                this._speedX.push(speedX[i].split(\";\").map(Number));\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.SPEED_Y)) {\r\n\t            var speedY = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.SPEED_Y).split(\"|\");\r\n\t            for (var i = 0; i < speedY.length; i++) {\r\n\t                this._speedY.push(speedY[i].split(\";\").map(Number));\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.RADIUS)) {\r\n\t            this._radius = parseInt(node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.RADIUS));\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTED)) {\r\n\t            this._connected = parseInt(node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTED));\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_ALPHA)) {\r\n\t            this._lineAlpha = parseFloat(node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_WIDTH)) {\r\n\t            this._lineWidth = parseInt(node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_WIDTH));\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_COLOR)) {\r\n\t            this._lineColor = parseInt(node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.LINE_COLOR), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTION_ZONE_WIDTH)) {\r\n\t            var zoneWidth = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTION_ZONE_WIDTH).split(\"|\");\r\n\t            for (var i = 0; i < zoneWidth.length; i++) {\r\n\t                var width = zoneWidth[i].split(\";\").map(function (width) {\r\n\t                    return (parseFloat(width) / 100) * StageController_1.StageController.Width;\r\n\t                });\r\n\t                this._connectionZoneWidth.push(width);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT)) {\r\n\t            var zoneHeight = node.getAttribute(BGParticleElement_1.BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT).split(\"|\");\r\n\t            for (var i = 0; i < zoneHeight.length; i++) {\r\n\t                var height = zoneHeight[i].split(\";\").map(function (height) {\r\n\t                    return (parseFloat(height) / 100) * StageController_1.StageController.Height;\r\n\t                });\r\n\t                this._connectionZoneHeight.push(height);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BGParticleStyle.ElementsReserve = 0.5;\r\n\t    BGParticleStyle.NodeImages = \"Images\";\r\n\t    BGParticleStyle.NodeBehavior = \"Behavior\";\r\n\t    BGParticleStyle.NodeName = \"Name\";\r\n\t    BGParticleStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], BGParticleStyle);\r\n\t    return BGParticleStyle;\r\n\t}(Style_1.Style));\r\n\texports.BGParticleStyle = BGParticleStyle;\r\n\n\n/***/ },\n/* 134 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ContainerStyle = (function (_super) {\r\n\t    __extends(ContainerStyle, _super);\r\n\t    function ContainerStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ContainerStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    ContainerStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ContainerStyle);\r\n\t    return ContainerStyle;\r\n\t}(Style_1.Style));\r\n\texports.ContainerStyle = ContainerStyle;\r\n\n\n/***/ },\n/* 135 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ProtonStyle = (function (_super) {\r\n\t    __extends(ProtonStyle, _super);\r\n\t    function ProtonStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ProtonStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    ProtonStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ProtonStyle);\r\n\t    return ProtonStyle;\r\n\t}(Style_1.Style));\r\n\texports.ProtonStyle = ProtonStyle;\r\n\n\n/***/ },\n/* 136 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ShapeStyle = (function (_super) {\r\n\t    __extends(ShapeStyle, _super);\r\n\t    function ShapeStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ShapeStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t        if (node.hasAttribute(ShapeStyleAttributes.LINE_WIDTH)) {\r\n\t            this.lineWidth = parseInt(node.getAttribute(ShapeStyleAttributes.LINE_WIDTH));\r\n\t        }\r\n\t    };\r\n\t    ShapeStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ShapeStyle);\r\n\t    return ShapeStyle;\r\n\t}(Style_1.Style));\r\n\texports.ShapeStyle = ShapeStyle;\r\n\tvar ShapeStyleAttributes = {\r\n\t    LINE_WIDTH: \"LineWidth\",\r\n\t};\r\n\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(91);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar TimelineStyle = (function (_super) {\r\n\t    __extends(TimelineStyle, _super);\r\n\t    function TimelineStyle() {\r\n\t        _super.call(this);\r\n\t        this.frames = {};\r\n\t        this.framesSounds = {};\r\n\t    }\r\n\t    TimelineStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    this.container = new ContainerElement_1.ContainerElement();\r\n\t                    this.container.create(next);\r\n\t                    break;\r\n\t                case \"TimeLine\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(\"Frame\")) {\r\n\t                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\r\n\t                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR frame \" +\r\n\t                                        nextCase.getAttribute(\"Frame\") +\r\n\t                                        \" already exist in TimelineStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        if (nextCase.nodeName === \"Outro\") {\r\n\t                            this.outro = nextCase;\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t                case \"SoundTimeline\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(\"Frame\")) {\r\n\t                            if (this.framesSounds[nextCase.getAttribute(\"Frame\")] !== null) {\r\n\t                                this.framesSounds[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR frame \" +\r\n\t                                        nextCase.getAttribute(\"Frame\") +\r\n\t                                        \" already exist in TimelineStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        if (nextCase.nodeName === \"Outro\") {\r\n\t                            this.outroSounds = nextCase;\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    TimelineStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], TimelineStyle);\r\n\t    return TimelineStyle;\r\n\t}(Style_1.Style));\r\n\texports.TimelineStyle = TimelineStyle;\r\n\n\n/***/ },\n/* 138 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Resource_1 = __webpack_require__(67);\r\n\tvar SndResource = (function (_super) {\r\n\t    __extends(SndResource, _super);\r\n\t    function SndResource() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    SndResource.getSongById = function (id) {\r\n\t        if (this.Sounds != null) {\r\n\t            return this.Sounds[id];\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no sounds\");\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            this.log(\"ERROR no song: \" + id);\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SndResource.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"SndResource\", s);\r\n\t        }\r\n\t    };\r\n\t    SndResource.Sounds = {};\r\n\t    return SndResource;\r\n\t}(Resource_1.Resource));\r\n\texports.SndResource = SndResource;\r\n\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar PreloaderProvider_1 = __webpack_require__(65);\r\n\tvar SplashScreen_1 = __webpack_require__(60);\r\n\tvar Strings_1 = __webpack_require__(4);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlSplashScreen = (function (_super) {\r\n\t    __extends(HtmlSplashScreen, _super);\r\n\t    function HtmlSplashScreen() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    HtmlSplashScreen.prototype.create = function (node) {\r\n\t        if (!PreloaderProvider_1.PreloaderProvider.isGroupLoaded(HtmlSplashScreen.RequiredLoadGroup)) {\r\n\t            return;\r\n\t        }\r\n\t        _super.prototype.create.call(this, node);\r\n\t        PreloaderProvider_1.PreloaderProvider.addLoadingElementFunction(this);\r\n\t        this._initialize();\r\n\t        this.instance.offsetWidth;\r\n\t        this.instance.classList.remove(\"_disabled\");\r\n\t        HtmlSplashScreen.suspendInit = true;\r\n\t        HtmlSplashScreen.instance = this;\r\n\t        SplashScreen_1.SplashScreen.createSplashScreen(this);\r\n\t    };\r\n\t    HtmlSplashScreen.prototype._initialize = function () {\r\n\t        this._gameProgressBar = document.getElementById(\"splashProgressBar\");\r\n\t        this._gameProgressNumber = document.getElementById(\"splashProgressNumber\");\r\n\t        this._gameContinueButton = document.getElementById(\"splashScreen\");\r\n\t        if (this._gameProgressBar != null) {\r\n\t            var progressBar = document.getElementById(\"progressBar\");\r\n\t            if (progressBar != null) {\r\n\t                this._gameProgressBar.style.width = progressBar.style.width;\r\n\t            }\r\n\t        }\r\n\t        if (this._gameProgressNumber != null) {\r\n\t            var progressNumber = document.getElementById(\"progressNumber\");\r\n\t            if (progressNumber != null) {\r\n\t                this._gameProgressNumber.textContent = progressNumber.textContent;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.showContinueButton = function (callback) {\r\n\t        this._callback = callback;\r\n\t        if (this._callback != null) {\r\n\t            if (this._gameContinueButton != null) {\r\n\t                this._gameContinueButton.addEventListener(\"click\", this._callback);\r\n\t            }\r\n\t            this._keyboardEvent = this.onKeyUp.bind(this);\r\n\t            document.addEventListener(\"keyup\", this._keyboardEvent);\r\n\t        }\r\n\t        this.instance.classList.add(\"_loaded\");\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.onKeyUp = function (event) {\r\n\t        if (event.keyCode == 32) {\r\n\t            document.removeEventListener(\"keyup\", this._keyboardEvent);\r\n\t            if (this._callback != null) {\r\n\t                this._callback();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.hideSplashScreen = function () {\r\n\t        if (this.instance.parentElement) {\r\n\t            document.removeEventListener(\"keyup\", this._keyboardEvent);\r\n\t            this.instance.parentElement.removeChild(this.instance);\r\n\t        }\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.showError = function () {\r\n\t        this.instance.classList.add(\"_error\");\r\n\t        var progressNumber = document.getElementById(\"splashProgressBar\");\r\n\t        progressNumber.innerHTML = Strings_1.Strings.loaded\r\n\t            ? Languages_1.Languages.getRid(\"ERROR_404\")\r\n\t            : \"Internal error. Please contact support.\";\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.onLoadCompleted = function (success) {\r\n\t    };\r\n\t    HtmlSplashScreen.prototype.onProgressUpdate = function (progress) {\r\n\t        if (this._gameProgressBar != null) {\r\n\t            this._gameProgressBar.style.width = progress + \"%\";\r\n\t        }\r\n\t        if (this._gameProgressNumber != null) {\r\n\t            this._gameProgressNumber.textContent = progress + \"%\";\r\n\t        }\r\n\t    };\r\n\t    HtmlSplashScreen.RequiredLoadGroup = \"SPLASH\";\r\n\t    HtmlSplashScreen.suspendInit = false;\r\n\t    HtmlSplashScreen.instance = null;\r\n\t    HtmlSplashScreen = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlSplashScreen);\r\n\t    return HtmlSplashScreen;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlSplashScreen = HtmlSplashScreen;\r\n\n\n/***/ },\n/* 140 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar UserControls_1 = __webpack_require__(73);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlSvgElement = (function () {\r\n\t    function HtmlSvgElement() {\r\n\t    }\r\n\t    HtmlSvgElement.prototype.create = function (node) {\r\n\t        this.instance = document.createElementNS(\"http://www.w3.org/2000/svg\", node.nodeName);\r\n\t        if (node.childElementCount == 0 && node.textContent != \"\") {\r\n\t            this.instance.textContent = node.textContent;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Rid\")) {\r\n\t            this.rid = node.getAttribute(\"Rid\");\r\n\t            HtmlController_1.HtmlController.RidElements.push(this);\r\n\t            this.setText();\r\n\t        }\r\n\t        this.childs = HtmlSvgElement.parseElements(node, this);\r\n\t        for (var i = 0; i < node.attributes.length; i++) {\r\n\t            var attribute = node.attributes[i];\r\n\t            var attributeName = attribute.name;\r\n\t            if (attributeName == \"Rid\" || attributeName == \"Class\") {\r\n\t                continue;\r\n\t            }\r\n\t            switch (attributeName.toLowerCase()) {\r\n\t                case \"CssClass\".toLowerCase():\r\n\t                    attributeName = \"class\";\r\n\t                    break;\r\n\t            }\r\n\t            this.instance.setAttribute(attributeName, attribute.value);\r\n\t        }\r\n\t    };\r\n\t    HtmlSvgElement.prototype.setText = function (value) {\r\n\t        var text = \"\";\r\n\t        if (value != null) {\r\n\t            text = value;\r\n\t            this.currentValue = value;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSvgElement.prototype.updateText = function () {\r\n\t        var text = \"\";\r\n\t        if (this.currentValue != null) {\r\n\t            text = this.currentValue;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSvgElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlSvgElement.parseElements = function (startNode, parent) {\r\n\t        if (parent === void 0) { parent = null; }\r\n\t        var children = {};\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        HtmlSvgElement.getNodesList(startNode.firstElementChild, [])\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.HtmlElement);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var element = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            var root = document.getElementById(\"root\");\r\n\t            var customRoot;\r\n\t            if (node.hasAttribute(\"RootId\")) {\r\n\t                customRoot = document.getElementById(node.getAttribute(\"RootId\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (!AppContext_1.AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n\t                    return;\r\n\t                }\r\n\t                if (Object.getPrototypeOf(element) instanceof UserControls_1.UserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t            }\r\n\t            if (element.instance != null) {\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t                element.create(node);\r\n\t            }\r\n\t            else {\r\n\t                element.create(node);\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            children[node.nodeName] = element;\r\n\t        });\r\n\t        return children;\r\n\t    };\r\n\t    HtmlSvgElement.getNodesList = function (node, nodeList) {\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = HtmlSvgElement.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    HtmlSvgElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlSvgElement);\r\n\t    return HtmlSvgElement;\r\n\t}());\r\n\texports.HtmlSvgElement = HtmlSvgElement;\r\n\n\n/***/ },\n/* 141 */\n130,\n/* 142 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(104);\r\n\tvar ImageTextElementAdaptive = (function (_super) {\r\n\t    __extends(ImageTextElementAdaptive, _super);\r\n\t    function ImageTextElementAdaptive() {\r\n\t        _super.call(this);\r\n\t        this.maxWidth = -1;\r\n\t        this.maxMultiplier = -1;\r\n\t        this.currentScale = -1;\r\n\t    }\r\n\t    ImageTextElementAdaptive.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ImageTextElementAdaptiveAttributes.MAX_WIDTH)) {\r\n\t            this.maxWidth = parseInt(node.getAttribute(exports.ImageTextElementAdaptiveAttributes.MAX_WIDTH));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextElementAdaptiveAttributes.MAX_MULTIPLIER)) {\r\n\t            this.maxMultiplier = parseInt(node.getAttribute(exports.ImageTextElementAdaptiveAttributes.MAX_MULTIPLIER));\r\n\t        }\r\n\t    };\r\n\t    ImageTextElementAdaptive.prototype.realign = function () {\r\n\t        if (this.maxMultiplier > -1 && this.scale.x != this.currentScale) {\r\n\t            if (this.currentScale == -1) {\r\n\t                this.currentScale = this.getScaleByMaxMultiplier();\r\n\t            }\r\n\t            this.bitmapText.scale.set(this.currentScale);\r\n\t        }\r\n\t        else if (this.maxWidth > -1) {\r\n\t            this.bitmapText.scale.set(1);\r\n\t            if (this.bitmapText.width > 0) {\r\n\t                this.bitmapText.scale.set(this.getAdaptiveScale());\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.realign.call(this);\r\n\t    };\r\n\t    ImageTextElementAdaptive.prototype.getScaleByMaxMultiplier = function () {\r\n\t        if (BetManager_1.BetManager.TotalBets == null) {\r\n\t            return -1;\r\n\t        }\r\n\t        var maxBet = Math.max.apply(null, BetManager_1.BetManager.TotalBets);\r\n\t        var maxSizedValue = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, neo_common_1.NumberUtils.multiply(maxBet, this.maxMultiplier));\r\n\t        var originText = this.bitmapText.text;\r\n\t        var scale = 1;\r\n\t        this.bitmapText.scale.set(1);\r\n\t        this.bitmapText.text = maxSizedValue;\r\n\t        if (this.maxWidth != null) {\r\n\t            scale = this.getAdaptiveScale();\r\n\t            this.bitmapText.text = originText;\r\n\t        }\r\n\t        return scale;\r\n\t    };\r\n\t    ImageTextElementAdaptive.prototype.getAdaptiveScale = function () {\r\n\t        var scale = this.maxWidth / this.bitmapText.width;\r\n\t        return scale < 1 ? scale : 1;\r\n\t    };\r\n\t    ImageTextElementAdaptive.prototype.clone = function () {\r\n\t        var element = new ImageTextElementAdaptive();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.maxWidth = this.maxWidth;\r\n\t        element.currentScale = this.currentScale;\r\n\t        element.maxMultiplier = this.maxMultiplier;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageTextElementAdaptive = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextElementAdaptive);\r\n\t    return ImageTextElementAdaptive;\r\n\t}(ImageTextCounterElement_1.ImageTextCounterElement));\r\n\texports.ImageTextElementAdaptive = ImageTextElementAdaptive;\r\n\texports.ImageTextElementAdaptiveAttributes = {\r\n\t    MAX_WIDTH: \"MaxWidth\",\r\n\t    MAX_MULTIPLIER: \"MaxMultiplier\",\r\n\t};\r\n\n\n/***/ },\n/* 143 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar JavascriptElement = (function () {\r\n\t    function JavascriptElement() {\r\n\t    }\r\n\t    JavascriptElement.prototype.create = function (node) {\r\n\t        this.instance = document.createElement(node.nodeName);\r\n\t        if (node.childElementCount == 0 && node.textContent != \"\") {\r\n\t            this.instance.textContent = node.textContent;\r\n\t        }\r\n\t        for (var i = 0; i < node.attributes.length; i++) {\r\n\t            var attribute = node.attributes[i];\r\n\t            var attributeName = attribute.name;\r\n\t            if (attributeName == \"Class\") {\r\n\t                continue;\r\n\t            }\r\n\t            switch (attributeName) {\r\n\t                case \"CssClass\":\r\n\t                    attributeName = \"class\";\r\n\t                    break;\r\n\t            }\r\n\t            this.instance.setAttribute(attributeName, attribute.value);\r\n\t        }\r\n\t    };\r\n\t    JavascriptElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    JavascriptElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], JavascriptElement);\r\n\t    return JavascriptElement;\r\n\t}());\r\n\texports.JavascriptElement = JavascriptElement;\r\n\n\n/***/ },\n/* 144 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar LayoutManager_1 = __webpack_require__(109);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ImageElement_1 = __webpack_require__(96);\r\n\tvar LayoutImageElement = (function (_super) {\r\n\t    __extends(LayoutImageElement, _super);\r\n\t    function LayoutImageElement(texture) {\r\n\t        _super.call(this, texture);\r\n\t        this.verticalAlign = exports.LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP;\r\n\t        LayoutManager_1.LayoutManager.addLayoutElement(this);\r\n\t    }\r\n\t    LayoutImageElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.LayoutImageElementAttributes.V_ALIGN)) {\r\n\t            this.verticalAlign = node.getAttribute(exports.LayoutImageElementAttributes.V_ALIGN);\r\n\t        }\r\n\t        this.updatePosition();\r\n\t        return this;\r\n\t    };\r\n\t    LayoutImageElement.prototype.onLayoutChange = function (isPortrait) {\r\n\t        this.updatePosition();\r\n\t    };\r\n\t    LayoutImageElement.prototype.updatePosition = function () {\r\n\t        this.updateVerticalPosition();\r\n\t    };\r\n\t    LayoutImageElement.prototype.updateVerticalPosition = function () {\r\n\t        var y = 0;\r\n\t        var height = this.getBounds().height;\r\n\t        var screenHeight = StageController_1.StageController.Renderer.screen.height;\r\n\t        switch (this.verticalAlign) {\r\n\t            case exports.LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP:\r\n\t                break;\r\n\t            case exports.LayoutImageElementAttributes.V_ALIGN_OPTIONS.CENTER:\r\n\t                if (screenHeight < height) {\r\n\t                    y = parseInt(neo_common_1.NumberUtils.devide(screenHeight - height, 2));\r\n\t                }\r\n\t                break;\r\n\t            case exports.LayoutImageElementAttributes.V_ALIGN_OPTIONS.BOTTOM:\r\n\t                y = screenHeight - height;\r\n\t                break;\r\n\t        }\r\n\t        this.y = y;\r\n\t    };\r\n\t    LayoutImageElement.prototype.clone = function () {\r\n\t        var element = new LayoutImageElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.anchor = this.anchor;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element.verticalAlign = this.verticalAlign;\r\n\t        if (this.texture != null) {\r\n\t            element.texture = this.texture;\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        else if (this.maskGraphics != null) {\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    LayoutImageElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], LayoutImageElement);\r\n\t    return LayoutImageElement;\r\n\t}(ImageElement_1.ImageElement));\r\n\texports.LayoutImageElement = LayoutImageElement;\r\n\texports.LayoutImageElementAttributes = {\r\n\t    V_ALIGN: \"VAlign\",\r\n\t    V_ALIGN_OPTIONS: {\r\n\t        TOP: \"top\",\r\n\t        CENTER: \"center\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t};\r\n\n\n/***/ },\n/* 145 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ShapeElement_1 = __webpack_require__(13);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar LayoutManager_1 = __webpack_require__(109);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar LayoutShapeElement = (function (_super) {\r\n\t    __extends(LayoutShapeElement, _super);\r\n\t    function LayoutShapeElement() {\r\n\t        _super.call(this);\r\n\t        this.relativeWidth = -1;\r\n\t        this.relativeHeight = -1;\r\n\t        LayoutManager_1.LayoutManager.addLayoutElement(this);\r\n\t    }\r\n\t    LayoutShapeElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(ShapeElement_1.ShapeElementAttributes.WIDTH)) {\r\n\t            var width = node.getAttribute(ShapeElement_1.ShapeElementAttributes.WIDTH);\r\n\t            this._width = parseInt(width);\r\n\t            this.relativeWidth = width.indexOf(\"%\") > -1 ? parseInt(width) : -1;\r\n\t            if (this.relativeWidth > -1) {\r\n\t                this._width = StageController_1.StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\r\n\t            }\r\n\t            this.redrawRect();\r\n\t        }\r\n\t        if (node.hasAttribute(ShapeElement_1.ShapeElementAttributes.HEIGHT)) {\r\n\t            var height = node.getAttribute(ShapeElement_1.ShapeElementAttributes.HEIGHT);\r\n\t            this._height = parseInt(height);\r\n\t            this.relativeHeight = height.indexOf(\"%\") > -1 ? parseInt(height) : -1;\r\n\t            if (this.relativeHeight > -1) {\r\n\t                this._height = StageController_1.StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\r\n\t            }\r\n\t            this.redrawRect();\r\n\t        }\r\n\t    };\r\n\t    LayoutShapeElement.prototype.redrawRect = function () {\r\n\t        this.clear();\r\n\t        this.beginFill(this._color, this._fillAlpha);\r\n\t        this.lineStyle(this._lineWidth, this._lineColor);\r\n\t        this.drawRect(0, 0, this._width, this._height);\r\n\t        this.endFill();\r\n\t    };\r\n\t    LayoutShapeElement.prototype.onLayoutChange = function (isPortrait) {\r\n\t        if (this.relativeWidth > -1) {\r\n\t            this._width = StageController_1.StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\r\n\t        }\r\n\t        if (this.relativeHeight > -1) {\r\n\t            this._height = StageController_1.StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\r\n\t        }\r\n\t        this.redrawRect();\r\n\t    };\r\n\t    LayoutShapeElement.prototype.clone = function () {\r\n\t        var element = new LayoutShapeElement();\r\n\t        element.create(this._nodeDefinition);\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.relativeWidth = this.relativeWidth;\r\n\t        element.relativeHeight = this.relativeHeight;\r\n\t        return element;\r\n\t    };\r\n\t    LayoutShapeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], LayoutShapeElement);\r\n\t    return LayoutShapeElement;\r\n\t}(ShapeElement_1.ShapeElement));\r\n\texports.LayoutShapeElement = LayoutShapeElement;\r\n\n\n/***/ },\n/* 146 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SwitchElement_1 = __webpack_require__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar LayoutManager_1 = __webpack_require__(109);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar Tweens_1 = __webpack_require__(15);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar LayoutSwitchElement = (function (_super) {\r\n\t    __extends(LayoutSwitchElement, _super);\r\n\t    function LayoutSwitchElement() {\r\n\t        _super.call(this);\r\n\t        this.inPortraitMode = false;\r\n\t        LayoutManager_1.LayoutManager.addLayoutElement(this);\r\n\t    }\r\n\t    LayoutSwitchElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)) {\r\n\t            this.portraitStyle = (StyleManager_1.StyleManager.Styles[node.getAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)]);\r\n\t        }\r\n\t        if (this.style != null) {\r\n\t            this.baseStyle = this.style;\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Width\")) {\r\n\t            this.sizeWidth = parseInt(node.getAttribute(\"Width\"));\r\n\t            this.updateSize();\r\n\t        }\r\n\t        if (node.hasAttribute(\"Height\")) {\r\n\t            this.sizeHeight = parseInt(node.getAttribute(\"Height\"));\r\n\t            this.updateSize();\r\n\t        }\r\n\t        if (node.hasAttribute(\"Size\")) {\r\n\t            this.size = node.getAttribute(\"Size\");\r\n\t            this.updateSize();\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.updateSize = function () {\r\n\t        if (this.size != null) {\r\n\t            switch (this.size) {\r\n\t                case \"cover\":\r\n\t                    this.calculateCoverScale();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.calculateCoverScale = function () {\r\n\t        if (this.sizeWidth > 0 && this.sizeHeight > 0) {\r\n\t            var screenWidth = StageController_1.StageController.Renderer.screen.width;\r\n\t            var screenHeight = StageController_1.StageController.Renderer.screen.height;\r\n\t            var screenWRatio = screenWidth / this.sizeWidth;\r\n\t            var screenHRatio = screenHeight / this.sizeHeight;\r\n\t            if (screenWRatio > screenHRatio) {\r\n\t                this.scale.set(screenWRatio);\r\n\t            }\r\n\t            else {\r\n\t                this.scale.set(screenHRatio);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.onLayoutChange = function (isPortrait) {\r\n\t        this.updateSize();\r\n\t        if (isPortrait == this.inPortraitMode) {\r\n\t            return;\r\n\t        }\r\n\t        var currentCase = this.clearCaseLayoutPrefix(this.getCurrentCase());\r\n\t        var style = isPortrait ? this.portraitStyle : this.baseStyle;\r\n\t        if (style != null) {\r\n\t            var caseType = LayoutManager_1.LayoutManager.getSwitchPrefix() + currentCase;\r\n\t            this.case = \"\";\r\n\t            this.style = style;\r\n\t            this.storeData(caseType);\r\n\t            this.goToCase(caseType);\r\n\t            this.restoreData(caseType);\r\n\t            this.inPortraitMode = isPortrait;\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.clearCaseLayoutPrefix = function (caseType) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(LayoutManager_1.LayoutManager.getSwitchPrefix())) {\r\n\t            caseType = caseType.replace(LayoutManager_1.LayoutManager.getPreviousSwitchPrefix(), \"\");\r\n\t        }\r\n\t        return caseType;\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.storeData = function (caseType) {\r\n\t        this.tweenProgress = {};\r\n\t        var node = this.style.cases[caseType];\r\n\t        if (node != null) {\r\n\t            var next = node.firstElementChild;\r\n\t            while (next != null) {\r\n\t                var elem = this.elements.childs[next.nodeName];\r\n\t                if (elem != null) {\r\n\t                    var tweensArray = Tweens_1.Tweens.getRegisteredTweens(elem.uid);\r\n\t                    if (tweensArray != null && tweensArray.length > 0) {\r\n\t                        this.tweenProgress[elem.uid] = [];\r\n\t                        for (var i = 0; i < tweensArray.length; i++) {\r\n\t                            this.tweenProgress[elem.uid].push(tweensArray[\"tweens\"][i].progress());\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t        }\r\n\t        this.tempTimer = this.timer;\r\n\t        this.timer = null;\r\n\t        if (this.style.cases[caseType].hasAttribute(\"NextCase\")) {\r\n\t            this.tempNextCase = this.style.cases[caseType].getAttribute(\"NextCase\");\r\n\t            this.style.cases[caseType].removeAttribute(\"NextCase\");\r\n\t        }\r\n\t        if (this.style.cases[caseType].hasAttribute(\"Timer\")) {\r\n\t            this.tempTimerData = this.style.cases[caseType].getAttribute(\"Timer\");\r\n\t            this.style.cases[caseType].removeAttribute(\"Timer\");\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.restoreData = function (caseType) {\r\n\t        if (this.tweenProgress != null) {\r\n\t            for (var key in this.tweenProgress) {\r\n\t                var tweensArray = Tweens_1.Tweens.getRegisteredTweens(key);\r\n\t                if (tweensArray != null && tweensArray.length > 0) {\r\n\t                    for (var i = 0; i < tweensArray.length; i++) {\r\n\t                        if (tweensArray[\"tweens\"][i] != null) {\r\n\t                            tweensArray[\"tweens\"][i].progress(this.tweenProgress[key][i]);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.tweenProgress = null;\r\n\t        }\r\n\t        this.timer = this.tempTimer;\r\n\t        this.tempTimer = null;\r\n\t        if (this.tempNextCase != null) {\r\n\t            this.style.cases[caseType].setAttribute(\"NextCase\", this.tempNextCase);\r\n\t            this.tempNextCase = null;\r\n\t        }\r\n\t        if (this.tempTimerData != null) {\r\n\t            this.style.cases[caseType].setAttribute(\"Timer\", this.tempTimerData);\r\n\t            this.tempTimerData = null;\r\n\t        }\r\n\t    };\r\n\t    LayoutSwitchElement.prototype.clone = function () {\r\n\t        var element = new LayoutSwitchElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.case = this.case;\r\n\t        element.baseStyle = this.baseStyle;\r\n\t        element.portraitStyle = this.portraitStyle;\r\n\t        element.inPortraitMode = this.inPortraitMode;\r\n\t        element.size = this.size;\r\n\t        element.sizeWidth = this.sizeWidth;\r\n\t        element.sizeHeight = this.sizeHeight;\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        else if (this.maskGraphics != null) {\r\n\t            var elementMask = this.maskGraphics.clone();\r\n\t            elementMask.position.x = this.maskGraphics.position.x;\r\n\t            elementMask.position.y = this.maskGraphics.position.y;\r\n\t            element.maskGraphics = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    LayoutSwitchElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], LayoutSwitchElement);\r\n\t    return LayoutSwitchElement;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.LayoutSwitchElement = LayoutSwitchElement;\r\n\tvar LayoutSwitchElementAttributes = {\r\n\t    PORTRAIT_STYLE: \"PortraitStyle\",\r\n\t};\r\n\n\n/***/ },\n/* 147 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar PortraitLayout = (function (_super) {\r\n\t    __extends(PortraitLayout, _super);\r\n\t    function PortraitLayout() {\r\n\t        _super.call(this);\r\n\t        this.portraitProperties = {};\r\n\t        this.landscapeProperties = {};\r\n\t        this.inPortrait = false;\r\n\t    }\r\n\t    PortraitLayout.prototype.create = function (node) {\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(\"Style\")];\r\n\t            if (this.style != null) {\r\n\t                this.parsePortraitLayoutStyles(this.style.node);\r\n\t            }\r\n\t            node.removeAttribute(\"Style\");\r\n\t        }\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    PortraitLayout.prototype.init = function (parent) {\r\n\t        var self = this;\r\n\t        this.parseLandscapeLayoutStyles(parent);\r\n\t        Scaling_1.Scaling.Emitter.on(Scaling_1.Scaling.EventResize, function (isPortrait) {\r\n\t            self.updateLayout(isPortrait, parent);\r\n\t        });\r\n\t        this.updateLayout(Scaling_1.Scaling.isPortrait(), parent);\r\n\t    };\r\n\t    PortraitLayout.prototype.updateLayout = function (isPortrait, parent) {\r\n\t        if (isPortrait && !this.inPortrait) {\r\n\t            this.inPortrait = true;\r\n\t            for (var key in this.portraitProperties) {\r\n\t                var element = parent.childs[key];\r\n\t                this.updateContainer(this.portraitProperties[key].getAttribute(PortraitLayoutAttributes.MOVE_TO), element, parent, this.inPortrait);\r\n\t            }\r\n\t            for (var key in this.portraitProperties) {\r\n\t                var element = parent.childs[key];\r\n\t                element.updateByNode(this.portraitProperties[key]);\r\n\t            }\r\n\t        }\r\n\t        else if (!isPortrait && this.inPortrait) {\r\n\t            this.inPortrait = false;\r\n\t            for (var key in this.landscapeProperties) {\r\n\t                var element = parent.childs[key];\r\n\t                element.updateByNode(this.landscapeProperties[key]);\r\n\t            }\r\n\t            for (var key in this.landscapeProperties) {\r\n\t                var element = parent.childs[key];\r\n\t                this.updateContainer(this.landscapeProperties[key].getAttribute(PortraitLayoutAttributes.MOVE_TO), element, parent, this.inPortrait);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PortraitLayout.prototype.parsePortraitLayoutStyles = function (node) {\r\n\t        if (node != null && node[\"children\"] != null) {\r\n\t            var children = node[\"children\"];\r\n\t            for (var i = 0; i < children.length; i++) {\r\n\t                var child = children.item(i);\r\n\t                if (child != null) {\r\n\t                    var elementNode = document.createElement(child.nodeName);\r\n\t                    for (var j = 0; j < child.attributes.length; j++) {\r\n\t                        elementNode.setAttribute(child.attributes[j].name, child.attributes[j].value);\r\n\t                    }\r\n\t                    this.portraitProperties[child.nodeName] = elementNode;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PortraitLayout.prototype.updateContainer = function (containerId, element, parent, inPortrait) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(containerId)) {\r\n\t            var container = parent.childs[containerId];\r\n\t            if (container != null) {\r\n\t                if (inPortrait) {\r\n\t                    container.addChild(element);\r\n\t                }\r\n\t                else {\r\n\t                    var containerIndex = parent.getChildIndex(container);\r\n\t                    parent.addChildAt(element, containerIndex - 1);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PortraitLayout.prototype.parseLandscapeLayoutStyles = function (parent) {\r\n\t        for (var key in this.portraitProperties) {\r\n\t            this.landscapeProperties[key] = this.portraitProperties[key].cloneNode(true);\r\n\t            var node = this.landscapeProperties[key];\r\n\t            var element = parent.childs[key];\r\n\t            if (node != null && element != null) {\r\n\t                for (var i = 0; i < node.attributes.length; i++) {\r\n\t                    switch (node.attributes[i].name) {\r\n\t                        case \"x\":\r\n\t                            node.attributes[i].value = element.x.toString();\r\n\t                            break;\r\n\t                        case \"y\":\r\n\t                            node.attributes[i].value = element.y.toString();\r\n\t                            break;\r\n\t                        case \"pivotx\":\r\n\t                            node.attributes[i].value = element.pivot.x.toString();\r\n\t                            break;\r\n\t                        case \"pivoty\":\r\n\t                            node.attributes[i].value = element.pivot.y.toString();\r\n\t                            break;\r\n\t                        case \"scale\":\r\n\t                            node.attributes[i].value = element.scale.x.toString();\r\n\t                            break;\r\n\t                        case \"scalex\":\r\n\t                            node.attributes[i].value = element.scale.x.toString();\r\n\t                            break;\r\n\t                        case \"scaley\":\r\n\t                            node.attributes[i].value = element.scale.y.toString();\r\n\t                            break;\r\n\t                        case \"visible\":\r\n\t                            node.attributes[i].value = element.visible.toString();\r\n\t                            break;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PortraitLayout = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PortraitLayout);\r\n\t    return PortraitLayout;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.PortraitLayout = PortraitLayout;\r\n\tvar PortraitLayoutAttributes = {\r\n\t    MOVE_TO: \"MoveTo\",\r\n\t};\r\n\n\n/***/ },\n/* 148 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar SceneHolderElement = (function (_super) {\r\n\t    __extends(SceneHolderElement, _super);\r\n\t    function SceneHolderElement() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.elementsHolder = [];\r\n\t        this.parentContainer = null;\r\n\t    }\r\n\t    SceneHolderElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.HighWinSceneAttributes.USE_PARENT)) {\r\n\t            if (this.parentContainer) {\r\n\t                this.parentContainer.addChild(this);\r\n\t            }\r\n\t        }\r\n\t        this.blackList = [];\r\n\t        if (node.hasAttribute(exports.HighWinSceneAttributes.BLACK_LIST)) {\r\n\t            this.blackList = neo_common_1.ArrayUtils.stringArray(node.getAttribute(exports.HighWinSceneAttributes.BLACK_LIST));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.HighWinSceneAttributes.ADD_CHILDS)) {\r\n\t            this.addChildsToElement();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.HighWinSceneAttributes.RETURN_CHILDS)) {\r\n\t            this.addChildsToOriginalParent();\r\n\t        }\r\n\t    };\r\n\t    SceneHolderElement.prototype.addChildsToElement = function () {\r\n\t        if (!this.hasAdded) {\r\n\t            for (var i = 0; i < this.elementsHolder.length; i++) {\r\n\t                var elem = this.elementsHolder[i];\r\n\t                if (elem != null) {\r\n\t                    if (this.blackList.indexOf(elem[\"element\"][\"name\"]) == -1) {\r\n\t                        this.addChild(elem[\"element\"]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.hasAdded = true;\r\n\t        }\r\n\t    };\r\n\t    SceneHolderElement.prototype.addElement = function (elem) {\r\n\t        this.elementsHolder.push(elem);\r\n\t    };\r\n\t    SceneHolderElement.prototype.addChildsToOriginalParent = function () {\r\n\t        if (this.hasAdded) {\r\n\t            for (var i = 0; i < this.elementsHolder.length; i++) {\r\n\t                var elem = this.elementsHolder[i];\r\n\t                if (elem != null) {\r\n\t                    var origElement = elem[\"parent\"];\r\n\t                    var element = elem[\"element\"];\r\n\t                    origElement.addChildAt(element, elem[\"index\"]);\r\n\t                }\r\n\t            }\r\n\t            this.hasAdded = false;\r\n\t        }\r\n\t    };\r\n\t    SceneHolderElement.prototype.setHolderParent = function (elem) {\r\n\t        this.parentContainer = elem;\r\n\t    };\r\n\t    SceneHolderElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SceneHolderElement);\r\n\t    return SceneHolderElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SceneHolderElement = SceneHolderElement;\r\n\texports.HighWinSceneAttributes = {\r\n\t    ADD_CHILDS: \"AddChilds\",\r\n\t    BLACK_LIST: \"BlackList\",\r\n\t    RETURN_CHILDS: \"ReturnChilds\",\r\n\t    USE_PARENT: \"UseParent\",\r\n\t};\r\n\n\n/***/ },\n/* 149 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(12);\r\n\tvar FrameTimer_1 = __webpack_require__(9);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar SoundElement = (function (_super) {\r\n\t    __extends(SoundElement, _super);\r\n\t    function SoundElement() {\r\n\t        _super.call(this);\r\n\t        this.soundName = null;\r\n\t        this._loop = false;\r\n\t        this._reset = false;\r\n\t        this._playing = false;\r\n\t        this._scheduledPlay = false;\r\n\t        this._scheduledStop = false;\r\n\t        this._fadeInTime = 0;\r\n\t        this._fadeOutTime = 0;\r\n\t        this._startTimer = FrameTimer_1.CreateFrameTimer(\"SoundElementStart\");\r\n\t        this._stopTimer = FrameTimer_1.CreateFrameTimer(\"SoundElementStop\");\r\n\t    }\r\n\t    SoundElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t    };\r\n\t    SoundElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.SoundElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.SoundElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.LOOP)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.LOOP);\r\n\t            var intValue = parseInt(value);\r\n\t            this._loop = true;\r\n\t            if (value === \"true\") {\r\n\t                this.schedulePlay(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.schedulePlay(intValue);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.RESET)) {\r\n\t            this._reset = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.SoundElementAttributes.RESET));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.FADE_IN)) {\r\n\t            this._fadeInTime = parseInt(node.getAttribute(exports.SoundElementAttributes.FADE_IN));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.FADE_OUT)) {\r\n\t            this._fadeOutTime = parseInt(node.getAttribute(exports.SoundElementAttributes.FADE_OUT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.NAME)) {\r\n\t            var newName = node.getAttribute(exports.SoundElementAttributes.NAME);\r\n\t            if (this.soundName != newName) {\r\n\t                this.stop();\r\n\t                this.soundName = node.getAttribute(exports.SoundElementAttributes.NAME);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.STOP)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.STOP);\r\n\t            var intValue = parseInt(value);\r\n\t            if (value === \"true\") {\r\n\t                this.scheduleStop(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.scheduleStop(intValue);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.PLAY)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.PLAY);\r\n\t            var intValue = parseInt(value);\r\n\t            if (value === \"true\") {\r\n\t                this.schedulePlay(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.schedulePlay(intValue);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.internalDestroy = function (options) { };\r\n\t    SoundElement.prototype.clone = function () {\r\n\t        var element = new SoundElement();\r\n\t        element.soundName = this.soundName;\r\n\t        element._fadeInTime = this._fadeInTime;\r\n\t        element._fadeOutTime = this._fadeOutTime;\r\n\t        element._loop = this._loop;\r\n\t        element._reset = this._reset;\r\n\t        element._playing = this._playing;\r\n\t        element._scheduledPlay = this._scheduledPlay;\r\n\t        element._scheduledStop = this._scheduledStop;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SoundElement.prototype.schedulePlay = function (delay) {\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        this._startTimer.stop();\r\n\t        this._startTimer.removeAllListeners();\r\n\t        if (delay > 0) {\r\n\t            this._scheduledPlay = true;\r\n\t            this._startTimer.once(FrameTimer_1.FrameTimerEvents.Complete, this.play.bind(this));\r\n\t            this._startTimer.start(delay);\r\n\t        }\r\n\t        else {\r\n\t            this.play();\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.scheduleStop = function (delay) {\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        this._stopTimer.stop();\r\n\t        this._stopTimer.removeAllListeners();\r\n\t        if (delay > 0) {\r\n\t            this._scheduledStop = true;\r\n\t            this._stopTimer.once(FrameTimer_1.FrameTimerEvents.Complete, this.stop.bind(this));\r\n\t            this._stopTimer.start(delay);\r\n\t        }\r\n\t        else {\r\n\t            this.stop();\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.play = function () {\r\n\t        if (this.soundName == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (PlayList_1.PlayList.isPlaying(this.soundName)) {\r\n\t            if (this._reset) {\r\n\t                this.stop();\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._startTimer.stop();\r\n\t        this._startTimer.removeAllListeners();\r\n\t        this._playing = true;\r\n\t        this._scheduledPlay = false;\r\n\t        if (this._loop) {\r\n\t            PlayList_1.PlayList.loop(this.soundName, this._fadeInTime, this._reset);\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(this.soundName, this._fadeInTime, this._reset);\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.stop = function () {\r\n\t        if (this.soundName == null) {\r\n\t            return;\r\n\t        }\r\n\t        this._stopTimer.stop();\r\n\t        this._stopTimer.removeAllListeners();\r\n\t        PlayList_1.PlayList.stop(this.soundName, this._fadeOutTime);\r\n\t        if (this._fadeOutTime) {\r\n\t            this._stopTimer.once(FrameTimer_1.FrameTimerEvents.Complete, this.reset.bind(this));\r\n\t            this._stopTimer.start(this._fadeOutTime);\r\n\t        }\r\n\t        else {\r\n\t            this.reset();\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.reset = function () {\r\n\t        this._startTimer.stop();\r\n\t        this._startTimer.removeAllListeners();\r\n\t        this._stopTimer.stop();\r\n\t        this._stopTimer.removeAllListeners();\r\n\t        this._playing = false;\r\n\t        this._scheduledPlay = false;\r\n\t        this._scheduledStop = false;\r\n\t        if (this.soundName && PlayList_1.PlayList.isPlaying(this.soundName)) {\r\n\t            PlayList_1.PlayList.stop(this.soundName);\r\n\t        }\r\n\t    };\r\n\t    SoundElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SoundElement);\r\n\t    return SoundElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SoundElement = SoundElement;\r\n\texports.SoundElementAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    NAME: \"Name\",\r\n\t    LOOP: \"Loop\",\r\n\t    RESET: \"Reset\",\r\n\t    FADE_IN: \"FadeIn\",\r\n\t    FADE_OUT: \"FadeOut\",\r\n\t    PLAY: \"Play\",\r\n\t    STOP: \"Stop\",\r\n\t};\r\n\n\n/***/ },\n/* 150 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(100);\r\n\tvar Payline_1 = __webpack_require__(88);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Paylines = (function (_super) {\r\n\t    __extends(Paylines, _super);\r\n\t    function Paylines() {\r\n\t        _super.call(this);\r\n\t        this._paylines = [];\r\n\t    }\r\n\t    Paylines.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Configs\")) {\r\n\t            var configs = node.getAttribute(\"Configs\").split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Payline_1.Payline) {\r\n\t                    this._paylines.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t            this.children.sort(function (a, b) {\r\n\t                if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\r\n\t                    a.zIndex = a.zIndex || 0;\r\n\t                    b.zIndex = b.zIndex || 0;\r\n\t                    return a.zIndex - b.zIndex;\r\n\t                }\r\n\t                return 0;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.setSpecialContainer = function (container) {\r\n\t        this._specialContainer = container;\r\n\t    };\r\n\t    Paylines.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"PaylineIDs\")) {\r\n\t            this._paylineIDs = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PaylineDefinition\")) {\r\n\t            this.paylineDefinition = node.getAttribute(\"PaylineDefinition\");\r\n\t            PaylinesDefinitions_1.PaylinesDefinitions.initializePaylineDefinitions(node.getAttribute(\"PaylineDefinition\"));\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.showPaylinesLabel = function () { };\r\n\t    Paylines.prototype.goToWin = function (id) {\r\n\t        if (this._paylines[id - 1] != null) {\r\n\t            this.addChild(this._paylines[id - 1]);\r\n\t            this._paylines[id - 1].goToCase(Payline_1.Payline.CaseWin);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no payline with id: \" + (id - 1));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.reset = function () {\r\n\t        for (var i = 0; i < this._paylines.length; i++) {\r\n\t            if (this._specialContainer != null) {\r\n\t                this._specialContainer.addChild(this._paylines[i]);\r\n\t            }\r\n\t            this._paylines[i].goToCase(Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.getPaylines = function () {\r\n\t        return this._paylines;\r\n\t    };\r\n\t    Paylines.prototype.goToCase = function (caseType, id) {\r\n\t        if (id) {\r\n\t            if (this._paylines[id - 1] != null) {\r\n\t                if (caseType === Payline_1.Payline.CaseWin) {\r\n\t                    this.addChild(this._paylines[id - 1]);\r\n\t                }\r\n\t                else {\r\n\t                    if (this._specialContainer != null) {\r\n\t                        this._specialContainer.addChild(this._paylines[id - 1]);\r\n\t                    }\r\n\t                }\r\n\t                this._paylines[id - 1].goToCase(caseType);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no payline with id: \" + (id - 1));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < this._paylines.length; i++) {\r\n\t                if (caseType === Payline_1.Payline.CaseWin) {\r\n\t                    this.addChild(this._paylines[i]);\r\n\t                }\r\n\t                else {\r\n\t                    if (this._specialContainer != null) {\r\n\t                        this._specialContainer.addChild(this._paylines[i]);\r\n\t                    }\r\n\t                }\r\n\t                this._paylines[i].goToCase(caseType);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paylines = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Paylines);\r\n\t    return Paylines;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.Paylines = Paylines;\r\n\n\n/***/ },\n/* 151 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar Payline_1 = __webpack_require__(88);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar PaylinesSelector = (function (_super) {\r\n\t    __extends(PaylinesSelector, _super);\r\n\t    function PaylinesSelector() {\r\n\t        _super.call(this);\r\n\t        this._paylines = [];\r\n\t    }\r\n\t    PaylinesSelector.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Configs\")) {\r\n\t            var configs = node.getAttribute(\"Configs\").split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Payline_1.Payline) {\r\n\t                    this._paylines.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"PaylineIDs\")) {\r\n\t            this._paylineIDs = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector.prototype.reset = function () {\r\n\t        this.visible = false;\r\n\t    };\r\n\t    PaylinesSelector.prototype.select = function () {\r\n\t        this.visible = true;\r\n\t        for (var i = 0; i < this._paylines.length; i++) {\r\n\t            this._paylines[i].goToCase(Payline_1.Payline.CaseSelect);\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PaylinesSelector);\r\n\t    return PaylinesSelector;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.PaylinesSelector = PaylinesSelector;\r\n\n\n/***/ },\n/* 152 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(82);\r\n\tvar Symbol_1 = __webpack_require__(101);\r\n\tvar StyleManager_1 = __webpack_require__(20);\r\n\tvar Configuration_1 = __webpack_require__(53);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Symbols = (function (_super) {\r\n\t    __extends(Symbols, _super);\r\n\t    function Symbols() {\r\n\t        _super.call(this);\r\n\t        this.symbols = [];\r\n\t        this.symbolsData = [];\r\n\t    }\r\n\t    Symbols.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        var configs;\r\n\t        if (node.hasAttribute(SymbolsAttributes.CONFIGS)) {\r\n\t            configs = node.getAttribute(SymbolsAttributes.CONFIGS).split(\";\");\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Symbol_1.Symbol) {\r\n\t                    if (configs != null) {\r\n\t                        for (var i = 0; i < configs.length; i++) {\r\n\t                            this.childs[key].configurate(Configuration_1.Configuration.Configurations[configs[i]]);\r\n\t                        }\r\n\t                    }\r\n\t                    this.symbols.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.symbols != null) {\r\n\t            this.createSymbolsData();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t        this.visible = false;\r\n\t        this.createObjectPool();\r\n\t    };\r\n\t    Symbols.prototype.createSymbolsData = function () {\r\n\t        if (false) {\r\n\t            this.log(\"createSymbolsData\");\r\n\t        }\r\n\t        for (var i = 1; i <= this.symbols.length; i++) {\r\n\t            if (this.symbols[i - 1].hasElements) {\r\n\t                var caseElement = void 0;\r\n\t                var rotationBitmap = null;\r\n\t                var blurBitmap = null;\r\n\t                if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseRotation)) {\r\n\t                    caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseRotation);\r\n\t                }\r\n\t                else {\r\n\t                    if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseBlur)) {\r\n\t                        caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseBlur);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseNormal)) {\r\n\t                            caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseNormal);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"ERROR Symbol has no CaseRotation, CaseBlur nor CaseNormal. Symbol ID: \" + i);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                rotationBitmap = this._getBitmapByCaseElement(caseElement);\r\n\t                if (rotationBitmap == null) {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no style, animation or image of symbol with ID: \" +\r\n\t                            i +\r\n\t                            \" case: \" +\r\n\t                            Symbol_1.Symbol.CaseRotation);\r\n\t                    }\r\n\t                }\r\n\t                if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseBlur)) {\r\n\t                    caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseBlur);\r\n\t                }\r\n\t                blurBitmap = this._getBitmapByCaseElement(caseElement);\r\n\t                if (blurBitmap == null) {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no style, animation or image of symbol with ID: \" + i + \" case: \" + Symbol_1.Symbol.CaseBlur);\r\n\t                    }\r\n\t                }\r\n\t                var object = {};\r\n\t                if (rotationBitmap != null) {\r\n\t                    object[Symbol_1.Symbol.CaseRotation] = rotationBitmap;\r\n\t                }\r\n\t                if (blurBitmap != null) {\r\n\t                    object[Symbol_1.Symbol.CaseBlur] = blurBitmap;\r\n\t                }\r\n\t                else {\r\n\t                    if (rotationBitmap != null) {\r\n\t                        object[Symbol_1.Symbol.CaseBlur] = rotationBitmap;\r\n\t                    }\r\n\t                }\r\n\t                if (object != null) {\r\n\t                    object[\"zIndex\"] = this.symbols[i - 1].zIndex;\r\n\t                    this.symbolsData.push(object);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Symbols.prototype._getBitmapByCaseElement = function (caseElement) {\r\n\t        if (caseElement != null) {\r\n\t            if (caseElement.firstElementChild.hasAttribute(\"Style\")) {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Please use Animation attribute! Node: \" +\r\n\t                        caseElement.parentNode.parentNode.nodeName +\r\n\t                        \", Case: \" +\r\n\t                        caseElement.getAttribute(\"Case\"));\r\n\t                }\r\n\t                if (StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")] != null) {\r\n\t                    if ((StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation) != null) {\r\n\t                        return StageController_1.StageController.getTextureByResourceId((StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation) + \"0000\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else if (caseElement.firstElementChild.hasAttribute(\"FromFrame\")) {\r\n\t                if (caseElement.firstElementChild.getAttribute(\"FromFrame\") != null) {\r\n\t                    return StageController_1.StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"FromFrame\"));\r\n\t                }\r\n\t            }\r\n\t            else if (caseElement.firstElementChild.hasAttribute(\"Image\")) {\r\n\t                return StageController_1.StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"Image\"));\r\n\t            }\r\n\t            else {\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Symbols.prototype.createObjectPool = function () {\r\n\t        this.objectPool = [];\r\n\t        for (var i = 0; i < this.symbols.length; i++) {\r\n\t            this.objectPool.push([]);\r\n\t        }\r\n\t        this.objectContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.objectContainer.name = \"ObjectContainer\";\r\n\t    };\r\n\t    Symbols.prototype.getSymbol = function (id, caseType) {\r\n\t        var symbol;\r\n\t        if (this.objectPool[id].length === 0) {\r\n\t            symbol = this.symbols[id].clone();\r\n\t            symbol.name = \"Symbol\" + id;\r\n\t            symbol.id = id;\r\n\t        }\r\n\t        else {\r\n\t            symbol = this.objectPool[id].pop();\r\n\t        }\r\n\t        symbol.switchAmounts();\r\n\t        symbol.visible = true;\r\n\t        symbol.alpha = 1;\r\n\t        symbol.goToCase(caseType);\r\n\t        return symbol;\r\n\t    };\r\n\t    Symbols.prototype.returnSymbol = function (symbol) {\r\n\t        symbol.visible = false;\r\n\t        symbol.goToCase(Symbol_1.Symbol.CaseEmpty);\r\n\t        symbol.resetAmount();\r\n\t        this.objectContainer.addChild(symbol);\r\n\t        this.objectPool[symbol.id].push(symbol);\r\n\t    };\r\n\t    Symbols = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Symbols);\r\n\t    return Symbols;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.Symbols = Symbols;\r\n\tvar SymbolsAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 153 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar HtmlBetSelectorContainerElement = (function (_super) {\r\n\t    __extends(HtmlBetSelectorContainerElement, _super);\r\n\t    function HtmlBetSelectorContainerElement() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.CoinCountContainer = this;\r\n\t    }\r\n\t    HtmlBetSelectorContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.addValues = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t            BetManager_1.BetManager.Coins != null &&\r\n\t            BetManager_1.BetManager.CoinSize != null &&\r\n\t            this._popup != null) {\r\n\t            this._values = [];\r\n\t            this._popup.innerHTML = \"\";\r\n\t            var i = 0;\r\n\t            for (var key in BetManager_1.BetManager.Coins) {\r\n\t                if (BetManager_1.BetManager.CoinSize === parseFloat(key)) {\r\n\t                    for (var j = 0; j < BetManager_1.BetManager.Coins[key].length; j++) {\r\n\t                        BetManager_1.BetManager.Coins[key].sort(BetManager_1.BetManager.sortNumber);\r\n\t                        BetManager_1.BetManager.Coins[key].reverse();\r\n\t                        var popupItem = document.createElement(\"div\");\r\n\t                        popupItem.classList.add(\"popupItem\");\r\n\t                        popupItem.onclick = this.onValueClick.bind(this);\r\n\t                        popupItem.setAttribute(\"CoinCount\", BetManager_1.BetManager.Coins[key][j].toString());\r\n\t                        if (BetManager_1.BetManager.CoinCount != null && BetManager_1.BetManager.CoinCount == BetManager_1.BetManager.Coins[key][j]) {\r\n\t                            popupItem.classList.add(\"_active\");\r\n\t                        }\r\n\t                        var popupItemValue = document.createElement(\"div\");\r\n\t                        popupItemValue.classList.add(\"popupValue\");\r\n\t                        popupItemValue.innerText = BetManager_1.BetManager.Coins[key][j].toString();\r\n\t                        popupItem.appendChild(popupItemValue);\r\n\t                        this._values.push(popupItem);\r\n\t                        this._popup.appendChild(popupItem);\r\n\t                        i++;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this._height = 60 * i + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"CoinCount\") &&\r\n\t            BetManager_1.BetManager.CoinCount != null) {\r\n\t            var coinCount = parseFloat(e.currentTarget.getAttribute(\"CoinCount\"));\r\n\t            if (coinCount === BetManager_1.BetManager.CoinCount) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === coinCount) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionCoinCountSelectValue + coinCount);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.changeValue = function () {\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n\t                    if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === BetManager_1.BetManager.CoinCount) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this._values[i].classList.remove(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlBetSelectorContainerElement);\r\n\t    return HtmlBetSelectorContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlBetSelectorContainerElement = HtmlBetSelectorContainerElement;\r\n\n\n/***/ },\n/* 154 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlBetSelectorContainerElement2 = (function (_super) {\r\n\t    __extends(HtmlBetSelectorContainerElement2, _super);\r\n\t    function HtmlBetSelectorContainerElement2() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.BetContainer = this;\r\n\t    }\r\n\t    HtmlBetSelectorContainerElement2.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.addValues = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.TotalBets != null && this._popup != null) {\r\n\t            this._values = [];\r\n\t            this._popup.innerHTML = \"\";\r\n\t            var count = 0;\r\n\t            for (var i = BetManager_1.BetManager.TotalBets.length - 1; i >= 0; i--) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"Bet\", BetManager_1.BetManager.TotalBets[i].toString());\r\n\t                if (BetManager_1.BetManager.Bet != null && BetManager_1.BetManager.Bet == BetManager_1.BetManager.TotalBets[i]) {\r\n\t                    popupItem.classList.add(\"_active\");\r\n\t                }\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, BetManager_1.BetManager.TotalBets[i].toString());\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t                count++;\r\n\t            }\r\n\t            this._height = 60 * count + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Bet\") && BetManager_1.BetManager.Bet != null) {\r\n\t            var bet = parseFloat(e.currentTarget.getAttribute(\"Bet\"));\r\n\t            if (bet === BetManager_1.BetManager.Bet) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"Bet\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"Bet\")) === bet) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionBetSelectValue + bet);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.changeValue = function () {\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (this._values[i].hasAttribute(\"Bet\")) {\r\n\t                    if (parseFloat(this._values[i].getAttribute(\"Bet\")) === BetManager_1.BetManager.Bet) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this._values[i].classList.remove(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlBetSelectorContainerElement2);\r\n\t    return HtmlBetSelectorContainerElement2;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlBetSelectorContainerElement2 = HtmlBetSelectorContainerElement2;\r\n\n\n/***/ },\n/* 155 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar BaseActions_1 = __webpack_require__(47);\r\n\tvar HtmlDenomContainerElement = (function (_super) {\r\n\t    __extends(HtmlDenomContainerElement, _super);\r\n\t    function HtmlDenomContainerElement() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.DenomContainer = this;\r\n\t    }\r\n\t    HtmlDenomContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.addValues = function () {\r\n\t        if (this._values == null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t            BetManager_1.BetManager.Coins != null &&\r\n\t            this._popup != null) {\r\n\t            this._values = [];\r\n\t            var i = 0;\r\n\t            var coinSizes = [];\r\n\t            for (var key in BetManager_1.BetManager.Coins) {\r\n\t                coinSizes.push(key);\r\n\t            }\r\n\t            coinSizes.sort(BetManager_1.BetManager.sortNumber);\r\n\t            coinSizes.reverse();\r\n\t            for (i = 0; i < coinSizes.length; i++) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"CoinSize\", coinSizes[i]);\r\n\t                if (BetManager_1.BetManager.CoinSize != null && BetManager_1.BetManager.CoinSize == parseFloat(coinSizes[i])) {\r\n\t                    popupItem.classList.add(\"_active\");\r\n\t                }\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = coinSizes[i];\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t            }\r\n\t            this._height = 60 * i + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"CoinSize\") &&\r\n\t            BetManager_1.BetManager.CoinSize != null) {\r\n\t            var coinSize = parseFloat(e.currentTarget.getAttribute(\"CoinSize\"));\r\n\t            if (coinSize === BetManager_1.BetManager.CoinSize) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"CoinSize\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"CoinSize\")) === coinSize) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionDenomSelectValue + coinSize);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlDenomContainerElement);\r\n\t    return HtmlDenomContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlDenomContainerElement = HtmlDenomContainerElement;\r\n\n\n/***/ },\n/* 156 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(157);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar HtmlHideButtonElement = (function (_super) {\r\n\t    __extends(HtmlHideButtonElement, _super);\r\n\t    function HtmlHideButtonElement() {\r\n\t        _super.call(this);\r\n\t        this._hideClass = \"\";\r\n\t    }\r\n\t    HtmlHideButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        HtmlController_1.HtmlController.HideButtons.push(this);\r\n\t        if (node.hasAttribute(\"HideClass\")) {\r\n\t            this._hideClass = node.getAttribute(\"HideClass\");\r\n\t            if (HtmlHideButtonElement.Buttons[this._hideClass] == null) {\r\n\t                HtmlHideButtonElement.Buttons[this._hideClass] = [];\r\n\t            }\r\n\t            HtmlHideButtonElement.Buttons[this._hideClass].push(this);\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                this.instance.classList.add(\"_hidden\");\r\n\t            }\r\n\t            this.instance.onclick = this.toggle.bind(this);\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.prototype.unHide = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        if (this.instance != null &&\r\n\t            this._hideClass != \"\" &&\r\n\t            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))) {\r\n\t            var elements = document.getElementsByClassName(this._hideClass);\r\n\t            var display = \"block\";\r\n\t            if (HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n\t                HtmlHideButtonElement.Buttons[this._hideClass].length > 0) {\r\n\t                for (var j = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n\t                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n\t                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")) {\r\n\t                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\r\n\t                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n\t                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.style.display = display;\r\n\t                }\r\n\t            }\r\n\t            if (this._hideClass === \"_hideCredit\") {\r\n\t                if (display === \"block\") {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(false);\r\n\t                }\r\n\t                else {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.prototype.hide = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        if (this.instance != null &&\r\n\t            this._hideClass != \"\" &&\r\n\t            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))) {\r\n\t            var elements = document.getElementsByClassName(this._hideClass);\r\n\t            var display = \"none\";\r\n\t            if (HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n\t                HtmlHideButtonElement.Buttons[this._hideClass].length > 0) {\r\n\t                for (var j = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n\t                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n\t                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n\t                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\r\n\t                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")) {\r\n\t                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.style.display = display;\r\n\t                }\r\n\t            }\r\n\t            if (this._hideClass === \"_hideCredit\") {\r\n\t                if (display === \"block\") {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(false);\r\n\t                }\r\n\t                else {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.prototype.toggle = function () {\r\n\t        if (this.instance != null && this._hideClass != \"\") {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var elements = document.getElementsByClassName(this._hideClass);\r\n\t            var display = \"none\";\r\n\t            if (HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n\t                HtmlHideButtonElement.Buttons[this._hideClass].length > 0) {\r\n\t                for (var j = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n\t                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n\t                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n\t                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\r\n\t                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")) {\r\n\t                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\r\n\t                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n\t                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\r\n\t                                display = \"block\";\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.style.display = display;\r\n\t                }\r\n\t            }\r\n\t            if (this._hideClass === \"_hideCredit\") {\r\n\t                if (display === \"block\") {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(false);\r\n\t                }\r\n\t                else {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.Buttons = {};\r\n\t    HtmlHideButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlHideButtonElement);\r\n\t    return HtmlHideButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlHideButtonElement = HtmlHideButtonElement;\r\n\n\n/***/ },\n/* 157 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar Scaling_1 = __webpack_require__(8);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlButtonElement = (function (_super) {\r\n\t    __extends(HtmlButtonElement, _super);\r\n\t    function HtmlButtonElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"UIAction\")) {\r\n\t            this.uiaction = node.getAttribute(\"UIAction\").split(\";\");\r\n\t            if (!node.hasAttribute(\"Test\")) {\r\n\t                this.setTestAttributes(node.getAttribute(\"UIAction\"));\r\n\t            }\r\n\t            else {\r\n\t                this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t            }\r\n\t            for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                HtmlController_1.HtmlController.registerUiActionElement(this.uiaction[i], this);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Action\")) {\r\n\t            this.action = node.getAttribute(\"Action\");\r\n\t            this.setTestAttributes(node.getAttribute(\"Action\"));\r\n\t            HtmlController_1.HtmlController.registerActionElement(node.getAttribute(\"Action\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (this.action != null || this.uiaction != null) {\r\n\t            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n\t            if (this.action != null) {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            this.instance.addEventListener(HtmlButtonElement.TouchStart, this.onTouchStart.bind(this));\r\n\t            this.instance.addEventListener(HtmlButtonElement.TouchEnd, this.onTouchEnd.bind(this));\r\n\t            this.instance.addEventListener(\"gesturestart\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"gesturechange\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"gestureend\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"touchmove\", Scaling_1.Scaling.preventPropagation);\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                this.instance.addEventListener(HtmlButtonElement.MouseOver, this.onMouseOver.bind(this));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.setTestAttributes = function (action) {\r\n\t        this.instance.dataset[\"test\"] = this.renameTestAttributeValue(action);\r\n\t    };\r\n\t    HtmlButtonElement.prototype.renameTestAttributeValue = function (action) {\r\n\t        var isGamblePortraitButton = action.indexOf(\"GAMBLE_\") != -1 && this.instance.classList.contains(\"btnGamble\");\r\n\t        action = isGamblePortraitButton ? action + \"_PORTRAIT\" : action;\r\n\t        switch (action) {\r\n\t            case \"QUICKSPIN_DIALOG_OFF\":\r\n\t                if (this.instance.classList.contains(\"smallCloseBtn\"))\r\n\t                    return \"QUICKSPIN_DIALOG_CLOSE\";\r\n\t                return \"QUICKSPIN_DIALOG_NO\";\r\n\t            case \"QUICKSPIN_TOGGLE;QUICKSPIN_DIALOG_OFF\":\r\n\t                return \"QUICKSPIN_DIALOG_YES\";\r\n\t            case \"SETTINGS_OFF\":\r\n\t                if (this.instance.classList.contains(\"smallCloseBtn\"))\r\n\t                    return \"SETTINGS_CLOSE\";\r\n\t                if (this.instance.classList.contains(\"dialogBtn\") ||\r\n\t                    this.instance.classList.contains(\"settingsPageBtn\"))\r\n\t                    return \"SETTINGS_OK\";\r\n\t                return \"SETTINGS_BACK\";\r\n\t            case \"QUICKSPIN_TOGGLE\":\r\n\t                return \"SETTINGS_TOGGLE\";\r\n\t            case \"EMPTY\":\r\n\t                return \"SIMILAR_GAMES_EXIT\";\r\n\t            case \"EXIT2\":\r\n\t                return \"EXIT_GAME\";\r\n\t            case \"EXIT\":\r\n\t                return \"HOME\";\r\n\t            case \"HELP_OFF\":\r\n\t                if (this.instance.classList.contains(\"closeBtn\"))\r\n\t                    return \"HELP_CLOSE\";\r\n\t                return \"HELP_BACK\";\r\n\t            case \"PAYTABLE_OFF\":\r\n\t                if (this.instance.classList.contains(\"closeBtn\"))\r\n\t                    return \"PAYTABLE_CLOSE\";\r\n\t                return \"PAYTABLE_BACK\";\r\n\t            case \"SETTINGS_ON\":\r\n\t                return \"SETTINGS\";\r\n\t            case \"HELP_ON\":\r\n\t                return \"HELP\";\r\n\t            case \"PAYTABLE_ON\":\r\n\t                return \"PAYTABLE\";\r\n\t            default:\r\n\t                return action;\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.registerEvents = function () {\r\n\t        if (this.action != null || this.uiaction != null) {\r\n\t            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n\t            if (this.action != null) {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onClick = function (e) {\r\n\t        if (false) {\r\n\t            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\r\n\t        }\r\n\t        if (this.instance != null && !this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            if (e && !e.isTrusted && AppContext_1.AppContext.gameConfiguration.DisableUntrustedClicks) {\r\n\t                if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                    this.log(\"Untrusted action: \" + this.action + \", ui: \" + this.action);\r\n\t                    return;\r\n\t                }\r\n\t            }\r\n\t            if (e && e.isTrusted) {\r\n\t                DataManager_1.DataManager.addTrustedUserAction(this.action);\r\n\t            }\r\n\t            if (this.action != null) {\r\n\t                HtmlController_1.HtmlController.dispatchAction(this.action);\r\n\t            }\r\n\t            if (this.uiaction != null) {\r\n\t                for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(this.uiaction[i]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onTouchStart = function () {\r\n\t        clearTimeout(this.touchLockTimer);\r\n\t        this.touchLock = true;\r\n\t        if (this.instance != null && !this.instance.classList.contains(\"noHover\")) {\r\n\t            this.instance.classList.add(\"noHover\");\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onTouchEnd = function () {\r\n\t        var _this = this;\r\n\t        this.touchLockTimer = setTimeout(function () {\r\n\t            _this.touchLock = false;\r\n\t        }, 20);\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onMouseOver = function () {\r\n\t        if (this.instance != null && this.instance.classList.contains(\"noHover\") && !this.touchLock) {\r\n\t            this.instance.classList.remove(\"noHover\");\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.changeState = function (value) {\r\n\t        if (this.instance != null) {\r\n\t            if (value) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            else {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.Click = \"click\";\r\n\t    HtmlButtonElement.TouchStart = \"touchstart\";\r\n\t    HtmlButtonElement.TouchEnd = \"touchend\";\r\n\t    HtmlButtonElement.MouseOver = \"mouseover\";\r\n\t    HtmlButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlButtonElement);\r\n\t    return HtmlButtonElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlButtonElement = HtmlButtonElement;\r\n\n\n/***/ },\n/* 158 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar HtmlLanuageContainerElement = (function (_super) {\r\n\t    __extends(HtmlLanuageContainerElement, _super);\r\n\t    function HtmlLanuageContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._flags = {};\r\n\t        this._values = {};\r\n\t    }\r\n\t    HtmlLanuageContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.addValues();\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.addValues = function () {\r\n\t        var languages = AppContext_1.AppContext.current.getAllowedLanguages();\r\n\t        if (this.instance != null && languages != null) {\r\n\t            for (var i = 0; i < languages.length; i++) {\r\n\t                var flag = document.createElement(\"div\");\r\n\t                flag.classList.add(\"flag\");\r\n\t                flag.classList.add(languages[i]);\r\n\t                flag.style.display = \"none\";\r\n\t                flag.setAttribute(\"Lng\", languages[i]);\r\n\t                flag.onclick = this.onValueClick.bind(this);\r\n\t                var value = document.createElement(\"div\");\r\n\t                value.classList.add(\"value\");\r\n\t                value.style.display = \"none\";\r\n\t                value.setAttribute(\"Lng\", languages[i]);\r\n\t                value.onclick = this.onValueClick.bind(this);\r\n\t                if (AppContext_1.AppContext.current.getCurrentLanguage() != null &&\r\n\t                    languages[i] == AppContext_1.AppContext.current.getCurrentLanguage()) {\r\n\t                    flag.style.display = \"block\";\r\n\t                    value.style.display = \"block\";\r\n\t                }\r\n\t                this._flags[languages[i]] = flag;\r\n\t                this._values[languages[i]] = value;\r\n\t                this.instance.appendChild(flag);\r\n\t                this.instance.appendChild(value);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Lng\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var lang = e.currentTarget.getAttribute(\"Lng\");\r\n\t            if (this._flags != null) {\r\n\t                for (var key in this._flags) {\r\n\t                    this._flags[key].style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            if (this._values != null) {\r\n\t                for (var key in this._values) {\r\n\t                    this._values[key].style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this.changeLanguage();\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.changeLanguage = function () {\r\n\t        var actual = AppContext_1.AppContext.current.getCurrentLanguage();\r\n\t        var languages = AppContext_1.AppContext.current.getAllowedLanguages();\r\n\t        var next = \"\";\r\n\t        if (actual != null && languages != null) {\r\n\t            var index = 0;\r\n\t            for (var i = 0; i < languages.length; i++) {\r\n\t                if (languages[i] === actual) {\r\n\t                    index = i;\r\n\t                }\r\n\t            }\r\n\t            if (languages[index + 1] != null) {\r\n\t                next = languages[index + 1];\r\n\t            }\r\n\t            else {\r\n\t                next = languages[0];\r\n\t            }\r\n\t        }\r\n\t        if (this._flags[next] != null) {\r\n\t            this._flags[next].style.display = \"block\";\r\n\t        }\r\n\t        if (this._values[next] != null) {\r\n\t            this._values[next].style.display = \"block\";\r\n\t        }\r\n\t        AppContext_1.AppContext.current.setLanguage(next);\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlLanuageContainerElement);\r\n\t    return HtmlLanuageContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlLanuageContainerElement = HtmlLanuageContainerElement;\r\n\n\n/***/ },\n/* 159 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar HtmlSoundContainerElement = (function (_super) {\r\n\t    __extends(HtmlSoundContainerElement, _super);\r\n\t    function HtmlSoundContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._levels = [\"\", \"\", \"\", \"\"];\r\n\t        this._levelsClasses = [\"_off\", \"_on1\", \"_on2\", \"_on3\"];\r\n\t        this._index = 3;\r\n\t        HtmlController_1.HtmlController.SoundContainer = this;\r\n\t    }\r\n\t    HtmlSoundContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._soundButton = document.getElementById(\"soundButton\");\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupSmall\");\r\n\t        if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t            this._backgroundSound = document.createElement(\"div\");\r\n\t            this._backgroundSound.classList.add(\"popupItem\");\r\n\t            var backgroundSoundChild = document.createElement(\"div\");\r\n\t            backgroundSoundChild.classList.add(\"popupValue\");\r\n\t            backgroundSoundChild.classList.add(\"bgSound\");\r\n\t            if (AppContext_1.AppContext.current.getBackgroundMusic()) {\r\n\t                backgroundSoundChild.classList.add(\"_on\");\r\n\t            }\r\n\t            else {\r\n\t                backgroundSoundChild.classList.add(\"_off\");\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = false;\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n\t            }\r\n\t            backgroundSoundChild.onclick = this.onBackgroundClick.bind(this);\r\n\t            this._backgroundSound.appendChild(backgroundSoundChild);\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t            if (this._backgroundSound != null) {\r\n\t                this._popup.appendChild(this._backgroundSound);\r\n\t            }\r\n\t            if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                this._popup.parentElement.classList.add(\"bgOn\");\r\n\t            }\r\n\t        }\r\n\t        this.addValues();\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.addValues = function () {\r\n\t        if (this._values == null && this._popup != null) {\r\n\t            this._values = [];\r\n\t            for (var i = 0; i < this._levels.length; i++) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"Level\", i.toString());\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = this._levels[i];\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                if (i == 0 && !AppContext_1.AppContext.current.isMuteVolumeAllowed) {\r\n\t                    popupItem.style.display = \"none\";\r\n\t                }\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.current.isMuteVolumeAllowed) {\r\n\t                if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                    this._height = 60 + ((this._levels.length - 1) * 60 + 48) + \"px\";\r\n\t                }\r\n\t                else {\r\n\t                    this._height = (this._levels.length - 1) * 60 + 48 + \"px\";\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                    this._height = 60 + (this._levels.length * 60 + 48) + \"px\";\r\n\t                }\r\n\t                else {\r\n\t                    this._height = this._levels.length * 60 + 48 + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Level\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var level = parseFloat(e.currentTarget.getAttribute(\"Level\"));\r\n\t            if (level === this._index) {\r\n\t            }\r\n\t            else {\r\n\t                this._index = level;\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"Level\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"Level\")) === level) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                AppContext_1.AppContext.current.setVolume(level);\r\n\t            }\r\n\t        }\r\n\t        this.changeSoundButton();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.onBackgroundClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            if (e.currentTarget.classList.contains(\"_on\")) {\r\n\t                e.currentTarget.classList.remove(\"_on\");\r\n\t                if (!e.currentTarget.classList.contains(\"_off\")) {\r\n\t                    e.currentTarget.classList.add(\"_off\");\r\n\t                }\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = false;\r\n\t                AppContext_1.AppContext.current.setBackgroundMusic(false);\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n\t            }\r\n\t            else {\r\n\t                e.currentTarget.classList.remove(\"_off\");\r\n\t                if (!e.currentTarget.classList.contains(\"_on\")) {\r\n\t                    e.currentTarget.classList.add(\"_on\");\r\n\t                }\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = true;\r\n\t                AppContext_1.AppContext.current.setBackgroundMusic(true);\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.setLevel = function (level) {\r\n\t        this._index = level;\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (i === level) {\r\n\t                    if (!this._values[i].classList.contains(\"_active\")) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    this._values[i].classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.changeSoundButton();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.changeSoundButton = function () {\r\n\t        if (this._soundButton != null) {\r\n\t            if (this._levelsClasses[this._index] != null) {\r\n\t                for (var i = 0; i < this._levelsClasses.length; i++) {\r\n\t                    this._soundButton.classList.remove(this._levelsClasses[i]);\r\n\t                }\r\n\t                this._soundButton.classList.add(this._levelsClasses[this._index]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.toggle = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlSoundContainerElement);\r\n\t    return HtmlSoundContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlSoundContainerElement = HtmlSoundContainerElement;\r\n\n\n/***/ },\n/* 160 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(157);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar HtmlAutoplayItemButtonElement_1 = __webpack_require__(161);\r\n\tvar HtmlAutoplayButtonElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayButtonElement, _super);\r\n\t    function HtmlAutoplayButtonElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlAutoplayButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"basic\") {\r\n\t            this.createBasicMode();\r\n\t        }\r\n\t        else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n\t            this.createSimpleMode();\r\n\t        }\r\n\t        else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n\t            this.createAdvancedMode();\r\n\t        }\r\n\t        else {\r\n\t            this.createBasicMode();\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            this.instance.parentElement.removeChild(this.instance);\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createBasicMode = function () {\r\n\t        this.removeOtherMode(\"simpleAutoplayButton\");\r\n\t        this.removeOtherMode(\"advancedAutoplayButton\");\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createSimpleMode = function () {\r\n\t        this.removeOtherMode(\"basicAutoplayButton\");\r\n\t        this.removeOtherMode(\"advancedAutoplayButton\");\r\n\t        this._simpleAutoplayCounts = [];\r\n\t        var holder = document.getElementById(\"autoplaySelectorHolder\");\r\n\t        if (holder != null) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length > 0) {\r\n\t                AppContext_1.AppContext.gameConfiguration.AutoplayCounts.reverse();\r\n\t                for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n\t                    var button = new HtmlAutoplayItemButtonElement_1.HtmlAutoplayItemButtonElement();\r\n\t                    var text = document.createElement(\"div\");\r\n\t                    button.action = \"AUTOPLAY\";\r\n\t                    button.registerEvents();\r\n\t                    text.classList.add(\"autoplayCnt\");\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n\t                        text.innerText = \"∞\";\r\n\t                        button.autoplayCount = \"∞\";\r\n\t                    }\r\n\t                    else {\r\n\t                        text.innerText = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                        button.autoplayCount = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                    }\r\n\t                    button.instance.dataset[\"test\"] = \"AUTOPLAY_WIN_CNT_\" + (i + 1);\r\n\t                    if (button.instance != null) {\r\n\t                        button.instance.classList.add(\"autoplayItem\");\r\n\t                        button.instance.appendChild(text);\r\n\t                        HtmlController_1.HtmlController.registerActionElement(\"AUTOPLAY\", button);\r\n\t                        if (holder != null) {\r\n\t                            holder.appendChild(button.instance);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createAdvancedMode = function () {\r\n\t        this.removeOtherMode(\"basicAutoplayButton\");\r\n\t        this.removeOtherMode(\"simpleAutoplayButton\");\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.removeOtherMode = function (cls) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.remove();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayButtonElement);\r\n\t    return HtmlAutoplayButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlAutoplayButtonElement = HtmlAutoplayButtonElement;\r\n\n\n/***/ },\n/* 161 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(157);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlAutoplayItemButtonElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayItemButtonElement, _super);\r\n\t    function HtmlAutoplayItemButtonElement() {\r\n\t        _super.call(this);\r\n\t        this.autoplayCount = \"∞\";\r\n\t    }\r\n\t    HtmlAutoplayItemButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"AUTOPLAY_COUNT\")) {\r\n\t            this.autoplayCount = node.getAttribute(\"AUTOPLAY_COUNT\");\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayItemButtonElement.prototype.onClick = function () {\r\n\t        if (this.autoplayCount != null) {\r\n\t            DataManager_1.DataManager.AutoplayCount = this.autoplayCount;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        _super.prototype.onClick.call(this);\r\n\t    };\r\n\t    HtmlAutoplayItemButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayItemButtonElement);\r\n\t    return HtmlAutoplayItemButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlAutoplayItemButtonElement = HtmlAutoplayItemButtonElement;\r\n\n\n/***/ },\n/* 162 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(40);\r\n\tvar HtmlAutoplayDialogContainerElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayDialogContainerElement, _super);\r\n\t    function HtmlAutoplayDialogContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._autoplayDialogCounts = [];\r\n\t        this._autoplayDialogLossLimit = [];\r\n\t        this._autoplayDialogWinLimit = [];\r\n\t        this._count = \"∞\";\r\n\t        this._loss = \"∞\";\r\n\t        this._win = \"∞\";\r\n\t    }\r\n\t    HtmlAutoplayDialogContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.createCounts();\r\n\t        this.createLossLimits();\r\n\t        this.createWinLimits();\r\n\t        this._lossValueElement = document.getElementById(\"autoplayDialogLossLimitValue\");\r\n\t        this._winValueElement = document.getElementById(\"autoplayDialogWinLimitValue\");\r\n\t        this._button = document.getElementById(\"autoplayDialogButton\");\r\n\t        this._button.onclick = this.runAutoplay.bind(this);\r\n\t        this.reset();\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createCounts = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogCounts\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogCounts\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onCountClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogCounts.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createLossLimits = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = \"x\" + AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_LOSS_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onLossClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogLossLimit.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createWinLimits = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = \"x\" + AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_WIN_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onWinClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogWinLimit.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.reset = function () {\r\n\t        this.resetCounts();\r\n\t        this.resetLossLimits();\r\n\t        this.resetWinLimits();\r\n\t        this.enableCounts();\r\n\t        if (this._lossValueElement != null) {\r\n\t            this._lossValueElement.innerText = \"\";\r\n\t        }\r\n\t        if (this._winValueElement != null) {\r\n\t            this._winValueElement.innerText = \"\";\r\n\t        }\r\n\t        if (this._button != null && !this._button.classList.contains(\"_disabled\")) {\r\n\t            this._button.classList.add(\"_disabled\");\r\n\t        }\r\n\t        this._count = \"∞\";\r\n\t        this._loss = \"∞\";\r\n\t        this._win = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetCounts = function () {\r\n\t        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogCounts.length; i++) {\r\n\t                if (this._autoplayDialogCounts[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetLossLimits = function () {\r\n\t        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n\t                if (this._autoplayDialogLossLimit[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetWinLimits = function () {\r\n\t        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableCounts = function () {\r\n\t        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogCounts.length; i++) {\r\n\t                if (this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableLossLimits = function () {\r\n\t        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n\t                if (this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableWinLimits = function (removeNoLimit) {\r\n\t        if (removeNoLimit === void 0) { removeNoLimit = false; }\r\n\t        var enabledNoLimit = true;\r\n\t        var noLimit;\r\n\t        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n\t                    enabledNoLimit = false;\r\n\t                }\r\n\t                if (this._autoplayDialogWinLimit[i].getAttribute(\"Val\") == \"∞\") {\r\n\t                    noLimit = this._autoplayDialogWinLimit[i];\r\n\t                }\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (enabledNoLimit && !removeNoLimit) {\r\n\t            if (noLimit != null) {\r\n\t                if (!noLimit.classList.contains(\"_active\")) {\r\n\t                    noLimit.classList.add(\"_active\");\r\n\t                    if (this._winValueElement != null) {\r\n\t                        this._winValueElement.innerText = \"∞\";\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (removeNoLimit) {\r\n\t            if (noLimit != null) {\r\n\t                if (noLimit.classList.contains(\"_active\")) {\r\n\t                    noLimit.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onCountClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            this.resetCounts();\r\n\t            this.enableCounts();\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._count = val;\r\n\t            this.enableLossLimits();\r\n\t            if (document.getElementById(\"autoplayDialogLossLimitView\") != null) {\r\n\t                document.getElementById(\"autoplayDialogLossLimitView\").scrollIntoView(true);\r\n\t                if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                    document.getElementById(\"screen\").scrollTop = 0;\r\n\t                    document.getElementById(\"root\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onLossClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            if (this._lossValueElement != null) {\r\n\t                if (val != \"∞\" && BetManager_1.BetManager.Bet != null) {\r\n\t                    var calculatedValue = neo_common_1.NumberUtils.multiply(val, BetManager_1.BetManager.Bet);\r\n\t                    this._lossValueElement.innerText =\r\n\t                        calculatedValue + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                }\r\n\t                else {\r\n\t                    this._lossValueElement.innerText = \"∞\";\r\n\t                }\r\n\t            }\r\n\t            this.resetLossLimits();\r\n\t            this.enableLossLimits();\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (this._button != null && this._button.classList.contains(\"_disabled\")) {\r\n\t                this._button.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._loss = val;\r\n\t            this.enableWinLimits();\r\n\t            if (document.getElementById(\"autoplayDialogWinLimitView\") != null) {\r\n\t                document.getElementById(\"autoplayDialogWinLimitView\").scrollIntoView(true);\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                document.getElementById(\"screen\").scrollTop = 0;\r\n\t                document.getElementById(\"root\").scrollTop = 0;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onWinClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            if (this._winValueElement != null) {\r\n\t                if (val != \"∞\" && BetManager_1.BetManager.Bet != null) {\r\n\t                    var calculatedValue = neo_common_1.NumberUtils.multiply(val, BetManager_1.BetManager.Bet);\r\n\t                    this._winValueElement.innerText =\r\n\t                        calculatedValue + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                }\r\n\t                else {\r\n\t                    this._winValueElement.innerText = \"∞\";\r\n\t                }\r\n\t            }\r\n\t            this.resetWinLimits();\r\n\t            this.enableWinLimits(true);\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._win = val;\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                if (document.getElementById(\"autoplayDialogButton\") != null) {\r\n\t                    document.getElementById(\"autoplayDialogButton\").scrollIntoView(true);\r\n\t                    document.getElementById(\"screen\").scrollTop = 0;\r\n\t                    document.getElementById(\"root\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.runAutoplay = function (e) {\r\n\t        if (e != null && e.currentTarget != null && !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n\t                document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n\t            }\r\n\t            if (this._count != null) {\r\n\t                DataManager_1.DataManager.AutoplayCount = this._count;\r\n\t            }\r\n\t            if (this._loss != null && BetManager_1.BetManager.Bet != null) {\r\n\t                if (this._loss == \"∞\") {\r\n\t                    DataManager_1.DataManager.AutoplayLossLimit = this._loss;\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.AutoplayLossLimit = neo_common_1.NumberUtils.multiply(this._loss, BetManager_1.BetManager.Bet);\r\n\t                }\r\n\t            }\r\n\t            if (this._win != null && BetManager_1.BetManager.Bet != null) {\r\n\t                if (this._win == \"∞\") {\r\n\t                    DataManager_1.DataManager.AutoplayWinLimit = this._win;\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.AutoplayWinLimit = neo_common_1.NumberUtils.multiply(this._win, BetManager_1.BetManager.Bet);\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.dispatchAction(\"AUTOPLAY\");\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayDialogContainerElement);\r\n\t    return HtmlAutoplayDialogContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlAutoplayDialogContainerElement = HtmlAutoplayDialogContainerElement;\r\n\n\n/***/ },\n/* 163 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(75);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlCanvasElement = (function (_super) {\r\n\t    __extends(HtmlCanvasElement, _super);\r\n\t    function HtmlCanvasElement() {\r\n\t        _super.call(this, \"\");\r\n\t    }\r\n\t    HtmlCanvasElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"CanvasId\")) {\r\n\t            this.instance = document.getElementById(node.getAttribute(\"CanvasId\"));\r\n\t            if (this.instance == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with id: \" + node.getAttribute(\"CanvasId\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no CanvasId\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCanvasElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCanvasElement);\r\n\t    return HtmlCanvasElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlCanvasElement = HtmlCanvasElement;\r\n\n\n/***/ },\n/* 164 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar HtmlButtonElement_1 = __webpack_require__(157);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar HtmlCheckboxElement = (function (_super) {\r\n\t    __extends(HtmlCheckboxElement, _super);\r\n\t    function HtmlCheckboxElement() {\r\n\t        _super.call(this);\r\n\t        this.checkbox = null;\r\n\t    }\r\n\t    HtmlCheckboxElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.createCheckBox();\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.createCheckBox = function () {\r\n\t        this.checkbox = document.createElement(\"input\");\r\n\t        this.checkbox.type = \"checkbox\";\r\n\t        this.checkbox.classList.add(\"checkbox\");\r\n\t        this.checkbox.addEventListener(\"input\", this.onCheckbox.bind(this));\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this.checkbox);\r\n\t        }\r\n\t        this.instance.classList.add(\"checkboxButton\");\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.onClick = function () {\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.onCheckbox = function () {\r\n\t        if (false) {\r\n\t            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\r\n\t        }\r\n\t        if (this.instance != null && !this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            if (this.action != null) {\r\n\t                HtmlController_1.HtmlController.dispatchAction(this.action);\r\n\t            }\r\n\t            if (this.uiaction != null) {\r\n\t                for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(this.uiaction[i]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.setText = function (value) {\r\n\t        if (value === undefined || value === null) {\r\n\t            this.checkbox.checked = !this.checkbox.checked;\r\n\t            return;\r\n\t        }\r\n\t        if (value == \"true\") {\r\n\t            if (this.checkbox.checked) {\r\n\t                return;\r\n\t            }\r\n\t            this.checkbox.checked = true;\r\n\t        }\r\n\t        else {\r\n\t            if (!this.checkbox.checked) {\r\n\t                return;\r\n\t            }\r\n\t            this.checkbox.checked = false;\r\n\t        }\r\n\t    };\r\n\t    HtmlCheckboxElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCheckboxElement);\r\n\t    return HtmlCheckboxElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlCheckboxElement = HtmlCheckboxElement;\r\n\n\n/***/ },\n/* 165 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(48);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(74);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlCustomContainerElement = (function (_super) {\r\n\t    __extends(HtmlCustomContainerElement, _super);\r\n\t    function HtmlCustomContainerElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlCustomContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlCustomContainerElement.prototype.changeState = function (value) {\r\n\t        if (this._withGamble == null) {\r\n\t            this._withGamble = document.getElementById(\"withGamble\");\r\n\t        }\r\n\t        if (this._withoutGamble == null) {\r\n\t            this._withoutGamble = document.getElementById(\"withoutGamble\");\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (value && DataManager_1.DataManager.Autoplay) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                if (AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t                    if (this._withGamble != null) {\r\n\t                        this._withGamble.style.display = \"block\";\r\n\t                    }\r\n\t                    if (this._withoutGamble != null) {\r\n\t                        this._withoutGamble.style.display = \"none\";\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (this._withGamble != null) {\r\n\t                        this._withGamble.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._withoutGamble != null) {\r\n\t                        this._withoutGamble.style.display = \"block\";\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCustomContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCustomContainerElement);\r\n\t    return HtmlCustomContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlCustomContainerElement = HtmlCustomContainerElement;\r\n\n\n/***/ },\n/* 166 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(75);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlDataSliderElement = (function (_super) {\r\n\t    __extends(HtmlDataSliderElement, _super);\r\n\t    function HtmlDataSliderElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlDataSliderElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlDataSliderElement.prototype.setText = function (value) {\r\n\t        if (value != null) {\r\n\t            var parsedValue = value.split(\"/\");\r\n\t            if (this.instance != null && parsedValue.length === 2) {\r\n\t                this.instance.style.width = (parseInt(parsedValue[0]) / parseInt(parsedValue[1])) * 100 + \"%\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDataSliderElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlDataSliderElement);\r\n\t    return HtmlDataSliderElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlDataSliderElement = HtmlDataSliderElement;\r\n\n\n/***/ },\n/* 167 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlElement_1 = __webpack_require__(75);\r\n\tvar HtmlLabelElement = (function (_super) {\r\n\t    __extends(HtmlLabelElement, _super);\r\n\t    function HtmlLabelElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlLabelElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"For\")) {\r\n\t            this.for = node.getAttribute(\"For\");\r\n\t        }\r\n\t        this.createLabel();\r\n\t        if (this.instance != null) {\r\n\t            this.instance.parentElement.removeChild(this.instance);\r\n\t        }\r\n\t    };\r\n\t    HtmlLabelElement.prototype.createLabel = function () {\r\n\t        var holder = this.instance.parentElement;\r\n\t        var toggleSwitch = document.createElement(\"div\");\r\n\t        var label = document.createElement(\"label\");\r\n\t        toggleSwitch.classList.add(\"toggleSwitch\");\r\n\t        label.htmlFor = this.for;\r\n\t        label.innerHTML = this.instance.innerHTML;\r\n\t        toggleSwitch.appendChild(label);\r\n\t        if (this.instance != null) {\r\n\t            holder.firstChild.appendChild(toggleSwitch);\r\n\t        }\r\n\t    };\r\n\t    HtmlLabelElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlLabelElement);\r\n\t    return HtmlLabelElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlLabelElement = HtmlLabelElement;\r\n\n\n/***/ },\n/* 168 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(75);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlText = (function (_super) {\r\n\t    __extends(HtmlText, _super);\r\n\t    function HtmlText() {\r\n\t        _super.call(this, \"\");\r\n\t    }\r\n\t    HtmlText.prototype.create = function (node) {\r\n\t        this.instance = document.createElement(node.nodeName);\r\n\t        if (node.textContent != null) {\r\n\t            this.instance.textContent = node.textContent;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Prefix\")) {\r\n\t            this._prefix = node.getAttribute(\"Prefix\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlText.prototype.setText = function (value) {\r\n\t        _super.prototype.setText.call(this, value);\r\n\t        if (this._prefix != null && this.instance.innerHTML != null && this.instance.innerHTML != \"\") {\r\n\t            this.instance.innerHTML = \"+\" + this.instance.innerHTML;\r\n\t        }\r\n\t    };\r\n\t    HtmlText = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlText);\r\n\t    return HtmlText;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlText = HtmlText;\r\n\n\n/***/ },\n/* 169 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlStyle_1 = __webpack_require__(170);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlContainerStyle = (function (_super) {\r\n\t    __extends(HtmlContainerStyle, _super);\r\n\t    function HtmlContainerStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlContainerStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    HtmlContainerStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlStyle)\r\n\t    ], HtmlContainerStyle);\r\n\t    return HtmlContainerStyle;\r\n\t}(HtmlStyle_1.HtmlStyle));\r\n\texports.HtmlContainerStyle = HtmlContainerStyle;\r\n\n\n/***/ },\n/* 170 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(14);\r\n\tvar HtmlStyle = (function () {\r\n\t    function HtmlStyle() {\r\n\t    }\r\n\t    HtmlStyle.prototype.create = function (node) { };\r\n\t    HtmlStyle.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlStyle)\r\n\t    ], HtmlStyle);\r\n\t    return HtmlStyle;\r\n\t}());\r\n\texports.HtmlStyle = HtmlStyle;\r\n\n\n/***/ },\n/* 171 */\n/***/ function(module, exports) {\n\n\tconsole.log(\"pixiInitialize\");\r\n\tvar ios = !!navigator.platform && /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\tif (ios) {\r\n\t    PIXI.settings.PRECISION = PIXI.PRECISION.HIGH;\r\n\t}\r\n\tPIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\n\n/***/ }\n/******/ ])))));\n\n\n/** WEBPACK FOOTER **\n ** ./wwwroot/scripts/neo-mastersOfEclipse.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 8fe29e5705dd8e914b87\n **/","import {\n    Utils,\n    Logger,\n    PreloaderInfo,\n    Preloader,\n    libraryInitialize as neoCommonInitialize,\n    PreloaderProviderBase,\n} from \"neo-common\";\n\nneoCommonInitialize();\n\nimport { UriHelper, StringUtils } from \"neo-common\";\nimport { GameEngine, ClientHost, Communication, Platforms } from \"neo-games\";\nimport { Strings } from \"../Common/Strings\";\nimport { StageController } from \"./Components/StageController\";\nimport { PreloaderProvider } from \"./Components/Managers/PreloaderProvider\";\nimport { Languages } from \"./Utils/Languages\";\nimport { GameClientHostConsumer } from \"./ClientHost/ClientHostConsumer\";\nimport { GameDefinition } from \"../Common/GameDefinition\";\nimport { GameConfiguration } from \"../Common/GameConfiguration\";\nimport { AppContext } from \"../Common/AppContext\";\nimport { GameData } from \"./Channels/Common/Datas/GameData\";\nimport { HtmlController } from \"./HTMLComponents/HtmlController\";\nimport { GameManager } from \"./Managers/GameManager\";\nimport { DataManager } from \"./Managers/DataManager\";\nimport { PlatformsManager } from \"./Managers/PlatformsManager\";\nimport { FreeRoundBonusExtended } from \"./Channels/Common/Bonuses/FreeRoundBonusExtended\";\nimport { Scaling } from \"./Utils/Scaling\";\nimport { RetentionPanel } from \"./Utils/RetentionPanel\";\nimport { SplashScreen } from \"./CustomComponents/SplashScreen\";\n\nif (DEBUG) {\n    require(\"./Utils/PerfDebug/PerfDebug\");\n    require(\"./Utils/PerfDebug/PerfDebugWindow\");\n}\n\nvar gameApp: GameApp;\n\nexport class GameApp extends GameEngine.GameAppBase<GameConfiguration, GameDefinition, GameClientHostConsumer> {\n    public static language: string = \"en-US\";\n    public static key: string = \"MastersOfEclipse\";\n\n    public static main(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Application\", \"start main\");\n        }\n\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo[\"query\"][\"lang\"] != null) {\n            GameApp.language = urlInfo[\"query\"][\"lang\"];\n        }\n\n        RetentionPanel.initialize();\n        gameApp = new GameApp();\n        gameApp.load();\n    }\n\n    public static get gameClient(): Communication.Game.GameClient {\n        return gameApp._gameClient;\n    }\n\n    public static exit(): Promise<any> {\n        Platforms.Platforms.gameClosing();\n        if (AppContext.gameConfiguration.ExitUrl != \"\") {\n            Platforms.Platforms.userAction(\"exit\", { url: AppContext.gameConfiguration.ExitUrl });\n        }\n        return gameApp.exit();\n    }\n\n    public static history(): Promise<any> {\n        return gameApp.history();\n    }\n\n    public static continue(): Promise<any> {\n        return gameApp.continue();\n    }\n\n    public static closeRealityCheck(): Promise<any> {\n        return gameApp.closeRealityCheck();\n    }\n\n    protected createGameClient(options: Communication.Game.GameClientOptions): Communication.Game.GameClient {\n        let gameClient: Communication.Game.GameClient = new Communication.Game.GameClient(GameApp.key, options);\n        FreeRoundBonusExtended.initialize(gameClient);\n        return gameClient;\n    }\n\n    protected pauseAnimations(): void {\n        StageController.pauseAnimations();\n    }\n\n    protected resumeAnimations(): void {\n        StageController.resumeAnimations();\n    }\n\n    protected createPreloaderProvider(): PreloaderProviderBase {\n        return new PreloaderProvider();\n    }\n\n    protected createGameDefinition(definition: Object): GameDefinition {\n        return new GameDefinition(definition);\n    }\n\n    protected createGameConfiguration(configuration: Object): GameConfiguration {\n        return new GameConfiguration(configuration);\n    }\n\n    protected createAppContext(): GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\n        return new AppContext(this.gameConfiguration, this.gameDefinition);\n    }\n\n    protected createClientHostConsumer(): GameClientHostConsumer {\n        return new GameClientHostConsumer(this);\n    }\n\n    protected requireStrings(): void {\n        require(\"../Common/Strings\");\n    }\n\n    protected createStage(quality: string, size: GameEngine.Types.GameQualitySize): void {\n        let color = 0x000000;\n        StageController.createStage(size.width, size.height, color, \"canvas\");\n    }\n\n    protected initClientHost(): Promise<any> {\n        PlatformsManager.create();\n\n        return Promise.resolve();\n    }\n\n    protected parseLoadResult(loadResult: GameEngine.Types.AppLoadResult): Object {\n        let result: Object = null;\n\n        if (loadResult != null) {\n            if (loadResult.status == GameEngine.Types.AppLoadStatus.Failure) {\n                if (loadResult.error != null) {\n                    result = {\n                        message: loadResult.error.message,\n                        stack: loadResult.error.stack,\n                    };\n                }\n            }\n        }\n\n        return result;\n    }\n\n    protected finalizeLoad(): void {\n        if (this.loadingSucceed) {\n            if (AppContext != null && AppContext.current != null) {\n                let volume = AppContext.current.getVolume();\n                if (!Utils.isNullOrUndefined(volume)) {\n                    if (!Utils.isNullOrUndefined(volume.CurrentStepNo)) {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                this.loggerGroup,\n                                `Updating sound volume by step ${volume.CurrentStepNo}.`,\n                            );\n                        }\n\n                        HtmlController.setSound(volume.CurrentStepNo);\n                    } else {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                this.loggerGroup,\n                                `client host does not return valid value for volume 'CurrentStepNo'!`,\n                            );\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        Logger.debugGroup(\n                            this.loggerGroup,\n                            `client host does not returns volume data, sound volume was not updated.`,\n                        );\n                    }\n                }\n\n                Scaling.resizeRoot();\n            }\n\n            // Updating build version (for DEBUG only, for RELEASE an empty string is used)\n            let versionBuild = \"\";\n            if (DEBUG) {\n                let versionBuildValues: Array<string> = Preloader.getVersionBuild().split(\"_\");\n                versionBuild = Utils.valueOrDefault(\n                    versionBuildValues && versionBuildValues.length > 0\n                        ? versionBuildValues[versionBuildValues.length - 1]\n                        : \"\",\n                    \"\",\n                );\n            }\n            DataManager.updateGameDataFromModule(GameData.DataBuildVersion, versionBuild);\n            DataManager.configureGameData();\n\n            if (Platforms.Platforms.canPlay) {\n                GameManager.startGame(this._gameClient, this);\n                Platforms.Platforms.gameReady();\n            } else {\n                var loadingScreen = document.getElementById(\"loading\");\n                var element: HTMLElement = document.getElementById(\"progressNumber\");\n\n                if (loadingScreen != null) {\n                    loadingScreen.classList.add(\"_error\");\n                }\n                if (element != null) {\n                    element.innerHTML = Strings.loaded\n                        ? Languages.getRid(\"ERROR_404\")\n                        : \"Internal error. Please contact support.\";\n                    GameApp.gameClient.sendPlayerLogError(\n                        \"ERROR - Loading game\",\n                        this.parseLoadResult(this._loadResult),\n                    );\n                }\n\n                SplashScreen.showError();\n            }\n        } else {\n            Platforms.Platforms.gameFailed();\n            window.onblur = null;\n            window.onfocus = null;\n            PIXI.sound.muteAll();\n\n            var loadingScreen = document.getElementById(\"loading\");\n            var element: HTMLElement = document.getElementById(\"progressNumber\");\n\n            if (loadingScreen != null) {\n                loadingScreen.classList.add(\"_error\");\n            }\n            if (element != null) {\n                element.innerHTML = Strings.loaded\n                    ? Languages.getRid(\"ERROR_404\")\n                    : \"Internal error. Please contact support.\";\n                GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\n            }\n\n            SplashScreen.showError();\n\n            if (DEBUG) {\n                var err = \"\";\n                if (!PreloaderInfo.instance.loadSucceed) {\n                    err += \" Preloader does not load successfully!\";\n                }\n\n                Logger.errorGroup(this.loggerGroup, err);\n            }\n        }\n\n        if (DEBUG) {\n            PerfDebug.setup(StageController.Stage);\n        }\n    }\n\n    static openGameRoundHistory(isGUI: boolean = false): void {\n        if (isGUI) {\n            if (\n                !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.GUIHistoryUrl) &&\n                AppContext.gameConfiguration.GUIHistoryUrl !== \"\"\n            ) {\n                if (\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\n                    !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\n                ) {\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\n                        return;\n                    }\n                    window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\n                } else if (\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\n                ) {\n                    GameApp.openGameRoundHistoryHome();\n                } else {\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.GUIHistoryUrl });\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\n                        return;\n                    }\n                    window.open(AppContext.gameConfiguration.GUIHistoryUrl, \"_blank\");\n                }\n            } else {\n                GameApp.openGameRoundHistoryHome();\n            }\n        } else {\n            GameApp.openGameRoundHistoryHome();\n        }\n    }\n\n    static openGameRoundHistoryHome(): void {\n        let gameKey: string = UriHelper.getGameKey();\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        let timeZoneOffset: Number = new Date().getTimezoneOffset();\n\n        if (gameKey != null && urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n            let token: string = urlInfo[\"hash\"].substring(1);\n            let lang: string = urlInfo[\"query\"][\"lang\"] ? urlInfo[\"query\"][\"lang\"] : GameApp.language;\n            const historyUrl =\n                serverUrl + \"GameRounds/\" + GameApp.key + \"?culture=\" + lang + \"&tzo=\" + timeZoneOffset + \"&\" + token;\n            Platforms.Platforms.gotoHistory({ target: historyUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(historyUrl, \"_blank\");\n        }\n    }\n\n    static openGameRoundHistoryFromUrl(): void {\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.HistoryUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.HistoryUrl, \"_blank\");\n        }\n    }\n\n    /**\n     * Before exist do reguler 'leave game' request against server\n     * @returns {Promise<any>}\n     */\n    protected beforeExit(): Promise<any> {\n        return this._gameClient.leaveGame();\n    }\n\n    protected handleStringsLoadCompleted(lang: string): void {\n        if (HtmlController.RidElements != null && HtmlController.RidElements.length > 0) {\n            for (let i: number = 0; i < HtmlController.RidElements.length; i++) {\n                HtmlController.RidElements[i].updateText();\n            }\n        }\n\n        let languageElements: NodeListOf<Element> = document.querySelectorAll(\"[language]\");\n        for (let i: number = 0; i < languageElements.length; i++) {\n            languageElements[i].setAttribute(\"language\", lang);\n        }\n    }\n}\n\nGameApp.main();\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameApp.ts\n **/","(function() { module.exports = this[\"NeoCommon\"]; }());\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"NeoCommon\"\n ** module id = 2\n ** module chunks = 0\n **/","(function() { module.exports = this[\"NeoGames\"]; }());\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"NeoGames\"\n ** module id = 3\n ** module chunks = 0\n **/","import { Utils, NumberUtils, ArgValidator, StringUtils, StringsFactory } from \"neo-common\";\nimport { AppContext } from \"./AppContext\";\n\nfunction checkInitialized() {\n    StringsFactory.checkInitialized();\n}\n\nexport class Strings {\n    private static _json: Object;\n\n    constructor(json: Object) {\n        ArgValidator.ensureIsNotNullOrUndefined(json, \"json\");\n        Strings._json = json;\n    }\n\n    public static get loaded(): boolean {\n        return !Utils.isNullOrUndefined(Strings._json);\n    }\n\n    public static get(key: string): string {\n        return Strings._json && Strings._json.hasOwnProperty(key) ? Strings._json[key] : `@@${key}@@`;\n    }\n\n    public static getWithValues(key: string, ...tmpl: Array<any>): string {\n        if (Strings._json && Strings._json.hasOwnProperty(key)) {\n            var value = Strings._json[key];\n            var regexFormat = /(\\%m|\\%s)/gm;\n            var matchCnt = 0;\n            while (regexFormat.exec(value)) {\n                matchCnt++;\n            }\n\n            var args = tmpl;\n            if (matchCnt !== args.length) {\n                throw `Provided argument count (${args.length}) does not match required string params count (${matchCnt})`;\n            }\n\n            var idx = -1;\n            return value.replace(regexFormat, function (match: string) {\n                var val = args[++idx];\n                if (StringUtils.equals(match, \"%m\", true)) {\n                    val = NumberUtils.valueToNumber(\n                        val,\n                        AppContext.gameConfiguration.UseCoins ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\n                    );\n                } else if (!StringUtils.equals(match, \"%s\", true)) {\n                    throw `Unknown formatter \"${match} !\"`;\n                }\n                return val;\n            });\n        }\n\n        return `@@${key}@@`;\n    }\n\n    /* SECTION FOR STRINGS GENERATOR - BEGIN (DO NOT MODIFY) */\n    // public static get GAMBLE() { checkInitialized(); return this.get(\"GAMBLE\"); }\n    /* SECTION FOR STRINGS GENERATOR - END */\n}\n\nwindow[\"Strings\"] = Strings;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/Strings.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\nimport { GameEngine, ClientHost } from \"neo-games\";\nimport { GameConfiguration } from \"./GameConfiguration\";\nimport { GameDefinition } from \"./GameDefinition\";\nimport { GameApp } from \"../Game/GameApp\";\n\nexport class AppContext extends GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\n    private static _current: AppContext = null;\n\n    constructor(gameConfiguration: GameConfiguration, gameDefinition: GameDefinition) {\n        super(gameConfiguration, gameDefinition, GameApp.key);\n\n        AppContext._current = this;\n    }\n\n    public static get current(): AppContext {\n        return AppContext._current;\n    }\n\n    public static get gameConfiguration(): GameConfiguration {\n        return AppContext._current == null ? null : AppContext._current.gameConfiguration;\n    }\n\n    public static get gameDefinition(): GameDefinition {\n        return AppContext._current.gameDefinition;\n    }\n\n    public static get clientHost(): ClientHost.IClientHost {\n        return AppContext._current.clientHost;\n    }\n\n    public setHideAmounts(hideAmounts: boolean): void {\n        if (AppContext.clientHost != null) {\n            AppContext.clientHost.updateSharedSetting(\"HideAmounts\", hideAmounts.toString());\n        }\n    }\n\n    public getHideAmounts(): boolean {\n        if (AppContext.clientHost != null) {\n            if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                const hideAmounts = AppContext.clientHost.getSharedSetting(\"HideAmounts\");\n\n                if (!Utils.isNullOrUndefined(hideAmounts)) {\n                    return StringUtils.parseBoolean(hideAmounts);\n                }\n            }\n        }\n\n        return false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/AppContext.ts\n **/","import { Utils, Logger, PreloaderInfo } from \"neo-common\";\nimport { AnimationFramePool } from \"../AnimationFrame/Pool\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { Communication } from \"neo-games\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { Focus } from \"../Utils/Focus\";\nimport { Languages } from \"../Utils/Languages\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\n\n/**\n * StageController creates stage for webgl rendering (with fallback to canvas).\n * Also handle redrawing stage based on tick with requestAnimationFrame.\n * @class StageController\n */\nexport class StageController {\n    static Renderer: any;\n    static Stage: PIXI.Container;\n    static UpdatedTextures: Object = {};\n    static Width: number;\n    static Height: number;\n    static FPS: number = 60;\n    static baseStageContainer: PIXI.Container;\n    static freespinsStageContainer: PIXI.Container;\n    static baseStage: boolean = false;\n    static freespinStage: boolean = false;\n\n    private static _noWebGL: boolean = false;\n    private static _pauseAnimations = false;\n    private static _contextLost = false;\n\n    public static pauseAnimations() {\n        if (DEBUG) {\n            StageController._pauseAnimations = true;\n            Logger.debugGroup(\"StageController\", \"Animations was paused\");\n        }\n    }\n\n    public static resumeAnimations() {\n        if (DEBUG) {\n            if (StageController._pauseAnimations) {\n                StageController._pauseAnimations = false;\n                StageController.redrawStage();\n\n                Logger.debugGroup(\"StageController\", \"Animations was resumed\");\n            }\n        }\n    }\n\n    public static get textureManager(): PIXI.TextureManager {\n        return StageController.Renderer.textureManager;\n    }\n\n    public static updateTexture(texture: PIXI.BaseTexture | PIXI.Texture): WebGLTexture {\n        return this._noWebGL ? null : StageController.Renderer.textureManager.updateTexture(texture);\n    }\n\n    public static getTextureByResourceId(id: string): PIXI.Texture {\n        let texture: PIXI.Texture = PIXI.utils.TextureCache[id];\n        let resourcePath: string = \"\";\n\n        if (Utils.isNullOrUndefined(texture)) {\n            resourcePath = PreloaderInfo.instance.getResourcePathById(id);\n            if (resourcePath) {\n                texture = PIXI.utils.TextureCache[resourcePath];\n\n                if (Utils.isNullOrUndefined(texture)) {\n                    Logger.errorGroup(\n                        \"StageController\",\n                        `Could not find texture by id '${id}' (resourcePath: ${resourcePath})`,\n                    );\n                }\n            } else {\n                Logger.errorGroup(\"StageController\", `Could not find resource path for id '${id}' !`);\n            }\n        }\n\n        return texture;\n    }\n\n    private static handleLostWebGLContext(): void {\n        if (StageController._contextLost) {\n            return;\n        }\n        DataManager.Autoplay = false;\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n\n        let modules = Communication.Game.GameModules;\n        for (let key in modules) {\n            if (modules.hasOwnProperty(key)) {\n                ModuleManager.disableChannelModule(modules[key]);\n            }\n        }\n        GameManager.gameClient.sendPlayerLogError(\"ERROR - WebGL\");\n        AppContext.current.showDialog(Languages.getRid(\"ERROR_WEBGL\"), false, \"\", \"\", \"\", { special: true });\n        StageController._contextLost = true;\n    }\n\n    /**\n     * Create stage, detect renderer, set size and color of stage, start rendering.\n     * @method createStage\n     * @param width number\n     * @param height number\n     * @param color number (background color of canvas)\n     * @param canvasId string\n     * @return void\n     */\n    public static createStage(width: number, height: number, color: number, canvasId: string): void {\n        StageController.Width = width;\n        StageController.Height = height;\n\n        // get canvas from html document\n        const canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(canvasId);\n        const loading: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(\"loading\");\n\n        // create rendered\n        const rendererOptions: PIXI.WebGLRendererOptions = { view: canvas, roundPixels: false };\n        (rendererOptions as any).backgroundColor = color;\n        this.Renderer = PIXI.autoDetectRenderer(width, height, rendererOptions, this._noWebGL);\n\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\n            StageController._noWebGL = true;\n        }\n\n        PIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\n\n        // append canvas to html document\n        document.body.appendChild(this.Renderer.view);\n\n        // create first conatiner to renderer\n        this.Stage = new PIXI.Container();\n\n        Scaling.scale();\n        Focus.focus();\n        PageVisibilityHandler.handle();\n\n        loading.style.display = \"block\";\n        canvas.style.display = \"none\";\n        canvas.addEventListener(\"webglcontextlost\", StageController.handleLostWebGLContext);\n\n        window[\"__PIXI_STAGE__\"] = this.Stage;\n        window[\"__PIXI_RENDERER__\"] = this.Renderer;\n        this.redrawStage();\n    }\n\n    /**\n     * Method addChild append new containers to stage on top layer.\n     * @method addChild\n     * @param element PIXI.DisplayObject\n     * @return void\n     */\n    public static addChild(element: PIXI.DisplayObject): void {\n        this.Stage.addChild(element);\n    }\n\n    /**\n     * Redraw stage based on requestAnimationFrame.\n     * @method redrawStage\n     * @return void\n     */\n    private static redrawStage(): void {\n        if (StageController._pauseAnimations) {\n            return;\n        }\n\n        AnimationFramePool.draw();\n\n        StageController.Renderer.render(StageController.Stage);\n\n        requestAnimationFrame(StageController.redrawStage);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/StageController.ts\n **/","import { IAnimationFrame } from \"./Types\";\n\nexport class AnimationFramePool {\n    private static framesPool: Array<IAnimationFrame> = [];\n\n    static registerFrame(frame: IAnimationFrame): boolean {\n        var pool = AnimationFramePool.framesPool;\n        for (var i = 0; i < pool.length; i++) {\n            if (pool[i].frame_uid === frame.frame_uid) {\n                //frame.log(`already registered on Stage controller frame pool!`, true);\n                return false;\n            }\n        }\n\n        pool.push(frame);\n        return true;\n    }\n\n    static unregisterFrame(frame: IAnimationFrame): boolean {\n        var pool = AnimationFramePool.framesPool;\n        var idx = -1;\n        for (var i = 0; i < pool.length; i++) {\n            if (pool[i].frame_uid === frame.frame_uid) {\n                idx = i;\n                break;\n            }\n        }\n\n        var result = idx > -1;\n        if (result) {\n            // fail safe check\n            if (pool[idx].frame_uid === frame.frame_uid) {\n                pool.splice(idx, 1);\n            } else {\n                result = false;\n            }\n        }\n\n        return result;\n    }\n\n    static draw(): void {\n        // loop and paint all animation frames from pool\n        var pool = AnimationFramePool.framesPool;\n        for (var i = 0; i < pool.length; i++) {\n            var frame = pool[i];\n            frame.frame_draw();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Pool.ts\n **/","import { Logger } from \"neo-common\";\nimport { Platforms, Plugins } from \"neo-games\";\nimport { StageController } from \"../Components/StageController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"./FrameTimer\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport EventEmitter = PIXI.utils.EventEmitter;\n\n/**\n * @class Scaling\n */\nexport class Scaling {\n    static EventResize: string = \"eventResize\";\n\n    static Root: HTMLElement;\n    static Screen: HTMLElement;\n    static Canvas: HTMLElement;\n    static lastTouch: number;\n\n    static PortraitRatio = 0.9;\n    static PortraitMobileRatio = 0.72;\n\n    static LeftPanelWidth = 0;\n\n    static IsIOs: boolean = false;\n    static IsIOsTablet: boolean = false;\n    static IsIOsWebview: boolean = false;\n\n    static IOsResizeTimer: FrameTimerEventEmitter;\n    static IOsResizeDelay = 60;\n\n    static Emitter: EventEmitter;\n\n    static scale(): void {\n        Scaling.Root = document.getElementById(\"root\");\n        Scaling.Screen = document.getElementById(\"screen\");\n        Scaling.IsIOs = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n        Scaling.IsIOsTablet = /iPad/.test(navigator.platform);\n        Scaling.IsIOsWebview = Scaling.IsIOs && window.indexedDB !== null;\n        Scaling.IOsResizeTimer = CreateFrameTimer(\"scalingTimer\");\n        Scaling.IOsResizeTimer.on(FrameTimerEvents.Complete, Scaling.resizeRoot.bind(this, true));\n\n        Scaling.Emitter = new EventEmitter();\n\n        Scaling.resizeRoot();\n        window.onresize = Scaling.onResizeRoot;\n\n        document.body.classList.add(window[\"CHANNEL\"] === \"mobile\" ? \"mobile\" : \"desktop\");\n        document.body.classList.add(`ui-v${window[\"UI-VERSION\"]}`);\n\n        if (Scaling.isSafari()) {\n            document.body.classList.add(\"safari\");\n        }\n\n        if (Scaling.isIosChrome()) {\n            document.body.classList.add(\"iOsChrome\");\n        }\n\n        if (Scaling.IsIOs) {\n            Scaling.setupIOs();\n        }\n\n        /**\n         * Fast Touchstart events replaced by click event.\n         */\n        document.addEventListener(\n            \"touchend\",\n            function (event) {\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                    return;\n                }\n\n                let diff = event.timeStamp - Scaling.lastTouch;\n                Scaling.lastTouch = event.timeStamp;\n                if (!diff || diff > 400) {\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n\n                let evt = new MouseEvent(\"click\");\n                event.target.dispatchEvent(evt);\n            },\n            false,\n        );\n    }\n\n    static onResizeRoot(): void {\n        Scaling.resizeRoot();\n        if (Scaling.IsIOsWebview) {\n            setTimeout(() => Scaling.resizeRoot(), 500);\n        }\n    }\n\n    static resizeRoot(delayed: boolean = false, preventEmitEvent: boolean = true): void {\n        if (!delayed && Scaling.IsIOs && Scaling.IOsResizeTimer && (Scaling.inIframe() || Scaling.isIosChrome())) {\n            Scaling.IOsResizeTimer.stop();\n            Scaling.IOsResizeTimer.start(Scaling.IOsResizeDelay);\n        }\n\n        document.body.style.overflow = \"hidden\"; //calculate clientHeight without scrollbars\n        Plugins.StatusBar.updateHeight();\n\n        var sab = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\") || \"0\"); //safe area bottom\n        var innerHeight: number = window.innerHeight + Plugins.StatusBar.StatusBarHeight - sab;\n        var innerWidth: number = window.innerWidth + Plugins.StatusBar.StatusBarWidth;\n\n        if (Scaling.IsIOs && Plugins.StatusBar.StatusBarHeight != 0) {\n            //to prevent StatusBar from being positioned below game\n            document.documentElement.style.width = sab > 0 ? window.innerWidth + \"px\" : \"\";\n            document.documentElement.style.height = sab > 0 ? window.innerHeight - sab + \"px\" : \"\";\n            document.documentElement.style.overflow = sab > 0 ? \"visible\" : \"\";\n        }\n\n        var ratioWidth: number = innerWidth / (StageController.Width + Scaling.LeftPanelWidth);\n        var ratioHeight: number = innerHeight / (StageController.Height + Jackpot.Height);\n        var top: number = -(StageController.Height + Jackpot.Height - innerHeight) / 2;\n        var left: number = -(StageController.Width - innerWidth) / 2;\n\n        if (ratioWidth < ratioHeight) {\n            Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\n            left += (Scaling.LeftPanelWidth / 2) * ratioWidth;\n        } else {\n            Scaling.Root.style.transform = \"scale(\" + ratioHeight + \")\";\n            left += (Scaling.LeftPanelWidth / 2) * ratioHeight;\n        }\n\n        Scaling.Root.style.top = top.toString() + \"px\";\n        Scaling.Root.style.left = left.toString() + \"px\";\n\n        let enabledPortrait = true;\n        if (AppContext != null && AppContext.current != null) {\n            enabledPortrait = AppContext.gameConfiguration.UsePortraitMode;\n\n            //disable portrait for ipads\n            if (Scaling.IsIOsTablet) {\n                enabledPortrait = false;\n            }\n\n            if (!enabledPortrait) {\n                document.body.classList.remove(\"portrait\", \"mobile-xs\", \"tablet\", \"tablet-xs\");\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            }\n        }\n\n        if (enabledPortrait && window[\"CHANNEL\"] === \"mobile\") {\n            let portraitRatio = innerWidth / innerHeight;\n            if (innerHeight > innerWidth && portraitRatio < Scaling.PortraitRatio) {\n                document.body.classList.add(\"portrait\");\n                document.body.classList.remove(\"mobile-xs\", \"tablet\", \"tablet-xs\");\n\n                if (portraitRatio > Scaling.PortraitMobileRatio && portraitRatio < Scaling.PortraitRatio) {\n                    document.body.classList.add(\"tablet\");\n\n                    if (portraitRatio > 0.85) {\n                        document.body.classList.add(\"tablet-xs\");\n                    }\n                } else {\n                    if (portraitRatio > 0.61) {\n                        document.body.classList.add(\"mobile-xs\");\n                    }\n                }\n\n                ratioWidth = innerWidth / StageController.Height;\n                left = -(StageController.Height - innerWidth) / 2;\n\n                Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\n                Scaling.Root.style.top = \"0\";\n                Scaling.Root.style.left = left.toString() + \"px\";\n                Scaling.Root.style.height = (StageController.Height / innerWidth) * innerHeight + \"px\";\n            } else {\n                document.body.classList.remove(\"portrait\", \"tablet\");\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            }\n\n            if (document.body.classList.contains(\"portrait\")) {\n                Scaling.Root.classList.remove(\"gameShadow\");\n                Scaling.Screen.classList.add(\"gameShadow\");\n            } else {\n                Scaling.Root.classList.add(\"gameShadow\");\n                Scaling.Screen.classList.remove(\"gameShadow\");\n            }\n        } else {\n            Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            Scaling.Root.classList.add(\"gameShadow\");\n        }\n\n        if (document.documentElement.scrollTop != 0) {\n            document.documentElement.scrollTop = 0;\n        }\n\n        document.body.style.overflow = \"\";\n\n        if (Scaling.Emitter && preventEmitEvent) {\n            Scaling.Emitter.emit(\n                Scaling.EventResize,\n                Scaling.isPortrait(),\n                innerWidth / (innerHeight - Jackpot.Height),\n                innerWidth,\n                innerHeight,\n                ratioWidth,\n                ratioHeight,\n            );\n        }\n    }\n\n    static setupIOs(): void {\n        document.addEventListener(\"gesturestart\", this.preventPropagation, true);\n        document.addEventListener(\"gesturechange\", this.preventPropagation, true);\n        document.addEventListener(\"gestureend\", this.preventPropagation, true);\n        document.addEventListener(\"touchmove\", this.preventMovePropagation, true);\n    }\n\n    public static preventPropagation(e: Event): void {\n        e.stopPropagation();\n        e.preventDefault();\n    }\n\n    public static preventMovePropagation(e: Event): void {\n        var target = <HTMLElement>e.target;\n        while (target) {\n            if (target == document.documentElement) {\n                target = null;\n            } else if (target.classList.contains(\"mask\") || target.classList.contains(\"dialogContent\")) {\n                return;\n            } else {\n                if (target.parentElement != null) {\n                    target = target.parentElement;\n                }\n            }\n        }\n\n        e.stopPropagation();\n        e.preventDefault();\n    }\n\n    private static isSafari(): boolean {\n        const ua = navigator.userAgent;\n        const vendor = navigator.vendor;\n\n        return /Safari/i.test(ua) && /Apple Computer/.test(vendor);\n    }\n\n    private static isIosChrome(): boolean {\n        return !!(Scaling.IsIOs && (navigator.userAgent.match(\"CriOS\") || navigator.userAgent.match(\"FxiOS\")));\n    }\n\n    private static inIframe(): boolean {\n        try {\n            return window.self !== window.top;\n        } catch (e) {\n            return true;\n        }\n    }\n\n    static onLoadComplete(): void {\n        document.body.classList.add(\"loaded\");\n    }\n\n    public static isPortrait(): boolean {\n        return document.body.classList.contains(\"portrait\");\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Scaling\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Scaling.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { AnimationFrameEventEmitter } from \"../AnimationFrame/AnimationFrame\";\nimport { FrameTimerPool } from \"./FrameTimerPool\";\n\nexport const FrameTimerEvents = {\n    Progress: \"progress\",\n    Complete: \"complete\",\n};\n\n/**\n * FrameTimer is class to count time in frames.\n * FrameTimer is used instead of window.interval or window.timeout.\n * FrameTimer doesnt use miliseconds but count with frames.\n * @class FrameTimer\n */\nexport class FrameTimer extends AnimationFrameEventEmitter {\n    private _timerCounter: number;\n    private _finalTimerCounter: number;\n    private _timerName: string;\n    private _useFrames: boolean = false;\n    private _timer: number;\n    private _playing: boolean = false;\n    private _paused: boolean = false;\n\n    private _uid: string;\n\n    private _startTime: number;\n\n    constructor(timerName: string) {\n        super();\n\n        timerName = Utils.valueOrDefault(timerName, Utils.generateUuid());\n\n        this._timerName = `FrameTimer-${timerName}`;\n\n        this._uid = `FrameTimer_${timerName}_${Utils.generateUuid()}`;\n\n        // default values\n        this._timerCounter = 0;\n        this._finalTimerCounter = 0;\n    }\n\n    protected frame_onFrame(): void {\n        if (this._timerCounter === this._finalTimerCounter) {\n            this.stop();\n            this.conclude();\n        } else {\n            this.super2.emit(FrameTimerEvents.Progress);\n            this._timerCounter++;\n        }\n    }\n\n    protected get frame_name(): string {\n        return this._timerName;\n    }\n\n    /**\n     * Set counter to zero and set duration for counter.\n     * Start counting.\n     * @method start\n     * @param duration - number (frames)\n     * @return void\n     */\n    start(duration: number): void {\n        if (!this._playing) {\n            FrameTimerPool.add(this._uid, this);\n        }\n        this._playing = true;\n        if (this._useFrames) {\n            this._timerCounter = 0;\n            this._finalTimerCounter = duration;\n            this.frame_stop();\n\n            // start counting\n            this.count();\n        } else {\n            /*\n            if(this._timer != null) {\n                clearTimeout(this._timer);\n            }\n            */\n            // finalTimerCounter is target time\n            this._startTime = new Date().getTime();\n            this._finalTimerCounter = duration * 16.7;\n\n            // TODO method\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\n\n            if (FrameTimerPool.paused) {\n                this.pause();\n            }\n        }\n    }\n\n    /**\n     * Stop counting.\n     * @method stop\n     * @return void\n     */\n    stop(): void {\n        if (this._playing) {\n            FrameTimerPool.remove(this._uid);\n        }\n        this._playing = false;\n        if (this._useFrames) {\n            this.frame_stop();\n        } else {\n            if (this._timer != null) {\n                clearTimeout(this._timer);\n            }\n        }\n    }\n\n    private conclude(): void {\n        clearTimeout(this._timer);\n        FrameTimerPool.remove(this._uid);\n        this._playing = false;\n        this.super2.emit(FrameTimerEvents.Complete);\n    }\n\n    pause(): void {\n        if (!this._playing || this._paused) {\n            return;\n        }\n        if (this._useFrames) {\n            this.frame_stop();\n        } else {\n            // frameTimerCounter becomes remaining time\n            clearTimeout(this._timer);\n            let currentTime = new Date().getTime();\n            this._finalTimerCounter -= currentTime - this._startTime;\n        }\n        this._paused = true;\n    }\n\n    isPlaying(): boolean {\n        return this._playing;\n    }\n\n    unpause(): void {\n        if (!this._playing || !this._paused) {\n            return;\n        }\n        if (this._useFrames) {\n            this.count();\n        } else {\n            this._startTime = new Date().getTime();\n            window.clearTimeout(this._timer);\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\n        }\n        this._paused = false;\n    }\n\n    /**\n     * Count method emit Complete and Progress event while counting with requesrtAnimationFrame.\n     * @method count\n     * @retutn void\n     */\n    count(): void {\n        this.frame_start();\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @retutn void\n     */\n    log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"FrameTimer\", s);\n        }\n    }\n}\n\nexport type FrameTimerEventEmitter = FrameTimer & PIXI.utils.EventEmitter;\n\nexport const CreateFrameTimer = (timerName: string): FrameTimerEventEmitter => {\n    return new FrameTimer(timerName) as FrameTimerEventEmitter;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimer.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { IAnimationFrame, EventEmmiterClass, BaseElementClass } from \"./Types\";\nimport { AnimationFramePool } from \"./Pool\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\n\nexport function AnimationFrameClass(Superclass?: FunctionConstructor) {\n    var sc: FunctionConstructor = (Superclass || Object) as any;\n\n    return class AnimationFrame extends sc implements IAnimationFrame {\n        private _frame_stopped: boolean;\n        private _frame_starting: boolean;\n        private _frame_stopping: boolean;\n        private _frame_uid: string;\n\n        constructor() {\n            super();\n            this._frame_stopped = true;\n            this._frame_starting = null;\n            this._frame_stopping = null;\n            this._frame_uid = null;\n\n            this.frame_draw = this.frame_draw.bind(this);\n        }\n\n        protected frame_onFrame(): void {\n            throw new Error(`method \"frame_onFrame\" is not implemented!`);\n        }\n\n        protected get frame_name(): string {\n            throw new Error(`property \"frame_name\" is not implemented!`);\n        }\n\n        protected get isFrameStopped(): boolean {\n            return this._frame_stopped;\n        }\n\n        public get frame_uid(): string {\n            if (this._frame_uid === null) {\n                this._frame_uid = this.frame_name + Utils.generateUuid();\n            }\n\n            return this._frame_uid;\n        }\n\n        public frame_draw(): void {\n            if (this._frame_stopped) {\n                return;\n            }\n\n            this.frame_onFrame();\n        }\n\n        private frame_log(msg: string, isError?: boolean): void {\n            isError = Utils.valueOrDefault(isError, false);\n\n            if (DEBUG && !isError) {\n                Logger.debugGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\n            }\n\n            if (isError) {\n                Logger.errorGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\n            }\n        }\n\n        public frame_start(): void {\n            if (!this._frame_stopped) {\n                return;\n            }\n\n            if (this._frame_starting) {\n                return;\n            }\n\n            this._frame_starting = true;\n\n            try {\n                if (AnimationFramePool.registerFrame(this)) {\n                    this._frame_stopped = false;\n                    //this.frame_log('was started and registered to stage pool');\n                } else {\n                    this.frame_log(\"failed to start (already registered in stage pool!)\", true);\n                }\n            } finally {\n                this._frame_starting = null;\n            }\n\n            // this will do possible precalculations before actual method is called from 'requestAnimationFrame' from StageController\n            this.frame_draw();\n        }\n\n        public frame_stop(): void {\n            if (this._frame_stopped) {\n                return;\n            }\n\n            if (this._frame_stopping) {\n                return;\n            }\n\n            this._frame_stopping = true;\n\n            try {\n                if (AnimationFramePool.unregisterFrame(this)) {\n                    this._frame_stopped = true;\n                    //this.frame_log('was stopped and unregistered from stage pool');\n                } else {\n                    this.frame_log(\"failed to stop (not registered in stage pool!)\", true);\n                }\n            } finally {\n                this._frame_stopping = null;\n            }\n        }\n    };\n}\n\n/**\n * abstract class AnimationFrameEventEmitter, extends both 'PIXI.utils.EventEmitter' and 'AnimationFrame' classes\n */\nexport abstract class AnimationFrameEventEmitter extends AnimationFrameClass(EventEmmiterClass() as any) {\n    protected get super2(): PIXI.utils.EventEmitter {\n        return this as any as PIXI.utils.EventEmitter;\n    }\n}\n\n/**\n * abstract class AnimationFrameBaseElement, extends both 'BaseElement' and 'AnimationFrame' classes\n */\nexport abstract class AnimationFrameBaseElement extends AnimationFrameClass(BaseElementClass() as any) {\n    protected get super2(): BaseElement {\n        return this as any as BaseElement;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/AnimationFrame.ts\n **/","import { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\n\nexport interface IAnimationFrame {\n    frame_uid: string;\n    frame_draw(): void;\n}\n\nexport function EventEmmiterClass() {\n    return class EventEmmiterDescendant extends PIXI.utils.EventEmitter {};\n}\n\nexport function BaseElementClass() {\n    return class BaseElementDescendant extends BaseElement {};\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Types.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, TweensAttributes } from \"../../Effects/Tweens\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\n\n/**\n * BaseElement class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\n * @class BaseElement\n * @extends PIXI.Container\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseElement extends PIXI.Container implements IElement {\n    /**\n     * Unique component identifier\n     */\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    maskSprite: PIXI.Sprite;\n    maskGraphics: ShapeElement;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    private _tweenEngine: string;\n\n    public scaleTween: Array<PIXI.Point>;\n    public rotationTween: Array<number>;\n    public alphaTween: Array<number>;\n\n    constructor() {\n        super();\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    set tweenEngine(engine: string) {\n        this._tweenEngine = engine;\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = BaseElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * todo Destroy tweens by used tween engine\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    public clone(): any {\n        throw new Error(\"Not implemented\");\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     *\n     * @method _create - setup element from xml node\n     * @param node\n     * @private\n     */\n    public createByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        this.assertDestroyed(\"_create()\");\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\n\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\n                //this.rotation = Math.floor(Math.random() * 360);\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        /* todo Move scale.x && scale.y into SCALE attribute condition ? */\n        this.scale.x = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_X, this.scale.x);\n        this.scale.y = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_Y, this.scale.y);\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\n\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\n\n        if (node.hasAttribute(BaseElementAttributes.MASK)) {\n            this.maskGraphics = new ShapeElement();\n            let shapeNode: Element = document.createElement(node.getAttribute(BaseElementAttributes.MASK));\n            shapeNode.setAttribute(\"FillAlpha\", \"1\");\n            shapeNode.setAttribute(\"Color\", \"FF0000\");\n\n            if (node.hasAttribute(BaseElementAttributes.MASK_DRAW)) {\n                shapeNode.setAttribute(\"Draw\", node.getAttribute(BaseElementAttributes.MASK_DRAW));\n            }\n            if (node.hasAttribute(BaseElementAttributes.MASK_X)) {\n                shapeNode.setAttribute(\"X\", node.getAttribute(BaseElementAttributes.MASK_X));\n            }\n            if (node.hasAttribute(BaseElementAttributes.MASK_Y)) {\n                shapeNode.setAttribute(\"Y\", node.getAttribute(BaseElementAttributes.MASK_Y));\n            }\n            if (node.hasAttribute(BaseElementAttributes.MASK_WIDTH)) {\n                shapeNode.setAttribute(\"Width\", node.getAttribute(BaseElementAttributes.MASK_WIDTH));\n            }\n            if (node.hasAttribute(BaseElementAttributes.MASK_HEIGHT)) {\n                shapeNode.setAttribute(\"Height\", node.getAttribute(BaseElementAttributes.MASK_HEIGHT));\n            }\n            if (node.hasAttribute(BaseElementAttributes.MASK_PATH)) {\n                shapeNode.setAttribute(\"Path\", node.getAttribute(BaseElementAttributes.MASK_PATH));\n            }\n\n            this.maskGraphics.create(shapeNode);\n            this.mask = this.maskGraphics;\n            this.addChild(this.mask);\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(BaseElementAttributes.MASK));\n                }\n            }\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(node.getAttribute(BaseElementAttributes.BITMAP_MASK));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_X));\n                }\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_Y));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\n                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\n                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\n                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\n                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\n                }\n                if (!node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(BaseElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.TWEEN_ENGINE)) {\n            this._tweenEngine = node.getAttribute(BaseElementAttributes.TWEEN_ENGINE);\n        }\n\n        if (this.maskGraphics != null) {\n            if (node.hasAttribute(\"MaskScaleX\")) {\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\n            }\n\n            if (node.hasAttribute(\"MaskScaleY\")) {\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\n            }\n\n            if (node.hasAttribute(\"MaskX\")) {\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\n            }\n\n            if (node.hasAttribute(\"MaskY\")) {\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\n            }\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (\n            !node.hasAttribute(\"RemoveTweens\") ||\n            StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false\n        ) {\n            Tweens.removeTweens(this);\n        }\n\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\n\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n        }\n\n        this.runAlphaTween(node);\n        this.runPositionTween(node);\n        this.runRotationTween(node);\n        this.runScaleTween(node);\n        this.runTween(node);\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n\n        if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.ALPHA_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.POSITION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop }); // , callbackFunction: () => {this.emit('positionTweenFinished')}\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(BaseElementAttributes.ROTATION_TWEEN),\n        );\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.ROTATION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)) {\n            scaleTween = BaseElement._getPointsFromPointsAttribute(\n                node.getAttribute(BaseElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        if (scaleTween && scaleTween.length) {\n            tweenValues = scaleTween;\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: scaleTweenY[i],\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenX) {\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                return {\n                    x: scaleXValue,\n                    y: this.scale.y,\n                } as PIXI.Point;\n            });\n        } else if (scaleTweenY) {\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                return {\n                    x: this.scale.x,\n                    y: scaleYValue,\n                } as PIXI.Point;\n            });\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.SCALE_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    public formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"~\":\n                    value = parseFloat(current.slice(0, -1));\n\n                    if (property[0] == \"position\") {\n                        if (property[1] == \"x\") {\n                            value = this.position.x + (value - this.getGlobalPosition().x);\n                        } else if (property[1] == \"y\") {\n                            value = this.position.y + (value - this.getGlobalPosition().y);\n                        }\n                    }\n\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    public maskEnabled(enable: boolean): void {\n        if (enable) {\n            if (this.maskGraphics) {\n                this.mask = this.maskGraphics;\n                this.addChild(this.maskGraphics);\n            }\n        } else {\n            this.removeChild(this.maskGraphics);\n            this.mask = null;\n        }\n    }\n}\n\nexport const BaseElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    DEBUG: \"Debug\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    MASK_X: \"MaskX\",\n    MASK_Y: \"MaskY\",\n    MASK_WIDTH: \"MaskWidth\",\n    MASK_HEIGHT: \"MaskHeight\",\n    MASK_PATH: \"MaskPath\",\n    MASK_DRAW: \"MaskDraw\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /*\n     *\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    /**\n     * @deprecated Use ROTATION_TWEEN instead ROTATION_TWEEN_DEGREES\n     */\n    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    /**\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\n     */\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    TWEEN_ENGINE: \"TweenEngine\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElement.ts\n **/","import { Logger, Utils, StringUtils, ArrayUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ITweenable, Tweens, TweensAttributes } from \"../../Effects/Tweens\";\nimport { SwitchStyle } from \"../Styles/SwitchStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\n\n/**\n * ShapeElement allows you to display vector art in the display list.\n * Example:\n *   <ShapeElement Class=\"ShapeElement\" X=\"0\" Y=\"0\" Width=\"100\" Height=\"100\" Color=\"FF0000\" Mask=\"ShapeElement\" />\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Circle\" X=\"0\" Y=\"0\" Radius=\"500\" Color=\"FF0000\"/>\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Ellipse\" X=\"0\" Y=\"0\" Width=\"300\" Height=\"500\" Color=\"FF0000\"/>\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Polygon\" X=\"0\" Y=\"0\" Color=\"FF0000\" Path=\"1373;76|1374;85|1375;97|1377;114|1378;130|1379;145|1286;71|1316;72\"/>\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Rect\" X=\"110\" Y=\"0\" Width=\"500\" Height=\"500\" Color=\"FF0000\"/>\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"RoundedRect\" X=\"0\" Y=\"0\" Width=\"500\" Height=\"500\" Radius=\"50\" Color=\"FF0000\"/>\n *\n * @class ShapeElement\n * @extends PIXI.Graphics\n * @implements IElement\n *\n * @date 7.1.2019\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ShapeElement extends PIXI.Graphics implements IElement, ITweenable {\n    public _uid: string;\n    public _color: number = 0xff0000;\n    public _width: number;\n    public _height: number;\n    public _lineWidth: number;\n    public _lineColor: number;\n    public _fillAlpha: number;\n    public _radius: number;\n    public _draw: string = \"Rect\";\n    protected style: SwitchStyle;\n\n    private _tweenEngine: string;\n\n    //used for clone method\n    protected _nodeDefinition: Element;\n\n    constructor() {\n        super();\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    set tweenEngine(engine: string) {\n        this._tweenEngine = engine;\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ShapeElementAttributes.DEBUG) &&\n                node.getAttribute(ShapeElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        this._nodeDefinition = node;\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.STYLE)) {\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(ShapeElementAttributes.STYLE)];\n            if (this.style != null) {\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(ShapeElementAttributes.STYLE));\n                }\n            }\n        }\n\n        this._color = Attributes.assignIntAttribute(node, ShapeElementAttributes.COLOR, this._color, 16);\n        this._fillAlpha = Attributes.assignFloatAttribute(node, ShapeElementAttributes.FILL_ALPHA, this._fillAlpha);\n        this._lineWidth = Attributes.assignIntAttribute(node, ShapeElementAttributes.LINE_WIDTH, this._lineWidth);\n        this._lineColor = Attributes.assignIntAttribute(node, ShapeElementAttributes.LINE_COLOR, this._lineColor, 16);\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.X)) {\n            this.position.x = parseInt(node.getAttribute(ShapeElementAttributes.X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.Y)) {\n            this.position.y = parseInt(node.getAttribute(ShapeElementAttributes.Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\n            this._width = parseInt(node.getAttribute(ShapeElementAttributes.WIDTH));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\n            this._height = parseInt(node.getAttribute(ShapeElementAttributes.HEIGHT));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.RADIUS)) {\n            this._radius = parseInt(node.getAttribute(ShapeElementAttributes.RADIUS));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.DRAW)) {\n            this.clear();\n            this.beginFill(this._color, this._fillAlpha);\n            this.lineStyle(this._lineWidth, this._lineColor);\n            this.draw(node, node.getAttribute(ShapeElementAttributes.DRAW));\n            this.endFill();\n        } else {\n            // This block is for backwards compatibility\n            if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\n                this._width = parseInt(node.getAttribute(ShapeElementAttributes.WIDTH));\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR \" + ShapeElementAttributes.WIDTH + \" attribute doesn't exits\");\n                }\n            }\n\n            if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\n                this._height = parseInt(node.getAttribute(ShapeElementAttributes.HEIGHT));\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR \" + ShapeElementAttributes.HEIGHT + \" attribute doesn't exits\");\n                }\n            }\n\n            if (this._width != null && this._height != null) {\n                this.clear();\n                this.beginFill(this._color, this._fillAlpha);\n                this.lineStyle(this._lineWidth, this._lineColor);\n                this.drawRect(0, 0, this._width, this._height);\n                this.endFill();\n            }\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.VISIBLE)) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(ShapeElementAttributes.VISIBLE));\n        }\n\n        /*if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }*/\n    }\n\n    /**\n     * Draw object by type.\n     * @param node\n     * @param {string} objectType\n     */\n    private draw(node: Element, objectType: string) {\n        this._draw = objectType;\n        switch (objectType) {\n            case \"Circle\":\n                this.drawCircle(0, 0, this._radius);\n                break;\n            case \"Ellipse\":\n                this.drawEllipse(0, 0, this._width, this._height);\n                break;\n            case \"Polygon\":\n                const path = node.hasAttribute(\"Path\") ? ArrayUtils.stringArray(node.getAttribute(\"Path\"), \"|\") : [];\n                let points: PIXI.Point[] = [];\n                for (let i = 0; i < path.length; i++) {\n                    const point = ArrayUtils.numberArray(path[i]);\n                    points.push(new PIXI.Point(point[0], point[1]));\n                }\n                this.drawPolygon(points);\n                break;\n            case \"Rect\":\n                this.drawRect(0, 0, this._width, this._height);\n                break;\n            case \"RoundedRect\":\n                const multiple = node.hasAttribute(\"Path\")\n                    ? ArrayUtils.arraysNumbers(node.getAttribute(\"Path\"), \"|\")\n                    : [];\n                if (multiple.length == 0) {\n                    this.drawRoundedRect(0, 0, this._width, this._height, this._radius);\n                } else {\n                    for (let i = 0; i < multiple.length; i++) {\n                        this.drawRoundedRect(multiple[i][0], multiple[i][1], this._width, this._height, this._radius);\n                    }\n                }\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR objectType: \" + objectType + \" not supported.\");\n                }\n                break;\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ShapeElementAttributes.DEBUG) &&\n                node.getAttribute(ShapeElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        Tweens.removeTweens(this);\n\n        if (node.hasAttribute(ShapeElementAttributes.VISIBLE)) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(ShapeElementAttributes.VISIBLE));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(ShapeElementAttributes.ALPHA));\n        }\n\n        this.pivot.x = Attributes.assignIntAttribute(node, ShapeElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, ShapeElementAttributes.PIVOT_Y, this.pivot.y);\n\n        if (node.hasAttribute(ShapeElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(ShapeElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.X)) {\n            this.position.x = parseInt(node.getAttribute(ShapeElementAttributes.X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.Y)) {\n            this.position.y = parseInt(node.getAttribute(ShapeElementAttributes.Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(ShapeElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ShapeElementAttributes.MASK));\n                }\n            }\n        }\n\n        this.runAlphaTween(node);\n        this.runPositionTween(node);\n        this.runRotationTween(node);\n        this.runScaleTween(node);\n        this.runTween(node);\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        /*if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }*/\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(ShapeElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        let alphaTween: Array<number> = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.ALPHA_TWEEN));\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ShapeElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ShapeElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.ALPHA_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ShapeElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(ShapeElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(ShapeElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ShapeElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == ShapeElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ShapeElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ShapeElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.POSITION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ShapeElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(ShapeElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(ShapeElementAttributes.ROTATION_TWEEN),\n        );\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ShapeElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ShapeElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.ROTATION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ShapeElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN)) {\n            scaleTween = ShapeElement._getPointsFromPointsAttribute(\n                node.getAttribute(ShapeElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        if (scaleTween && scaleTween.length) {\n            tweenValues = scaleTween;\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: scaleTweenY[i],\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenX) {\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                return {\n                    x: scaleXValue,\n                    y: this.scale.y,\n                } as PIXI.Point;\n            });\n        } else if (scaleTweenY) {\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                return {\n                    x: this.scale.x,\n                    y: scaleYValue,\n                } as PIXI.Point;\n            });\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ShapeElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ShapeElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.SCALE_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ShapeElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     *\n     * @param {Element} node\n     * @returns {boolean}\n     */\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ImageElement\n     */\n    clone(): ShapeElement {\n        let element: ShapeElement = new ShapeElement();\n        element.create(this._nodeDefinition);\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n\n        element._color = this._color;\n        element._fillAlpha = this._fillAlpha;\n        element._draw = this._draw;\n\n        if (this._draw === \"Rect\") {\n            element.clear();\n            element.beginFill(this._color, this._fillAlpha);\n            element.drawRect(0, 0, this._width, this._height);\n            element.endFill();\n        }\n\n        return element;\n    }\n\n    protected formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nexport const ShapeElementAttributes = {\n    /**\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    /**\n     * Shape's fill color.\n     * @property Color\n     * @type hexadecimal\n     * @default ff0000\n     */\n    COLOR: \"Color\",\n    DRAW: \"Draw\",\n    DEBUG: \"Debug\",\n    FILL_ALPHA: \"FillAlpha\",\n    /**\n     * Shape's height.\n     * @property Height\n     * @type number\n     * @default null\n     */\n    HEIGHT: \"Height\",\n    LINE_COLOR: \"LineColor\",\n    LINE_WIDTH: \"LineWidth\",\n    /**\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type string\n     * @default null\n     */\n    MASK: \"Mask\",\n    /**\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /**\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /**\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    RADIUS: \"Radius\",\n    /**\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /**\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    /**\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\n     */\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    STYLE: \"Style\",\n    /**\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /**\n     * Shape's width.\n     * @property Width\n     * @type number\n     * @default null\n     */\n    WIDTH: \"Width\",\n    /**\n     * The X (horizontal) position of the shape, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /**\n     * The Y (vertical) position of the shape, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ShapeElement.ts\n **/","export const ComponentTypes = {\n    Element: \"Element\",\n    DisplayObject: \"DisplayObject\",\n    HtmlElement: \"HtmlElement\",\n    PlayList: \"PlayList\",\n    Song: \"Song\",\n    Style: \"Style\",\n    HtmlStyle: \"HtmlStyle\",\n    Controller: \"Controller\",\n    LinkedElement: \"LinkedElement\",\n    ActionSet: \"ActionSet\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ComponentTypes.ts\n **/","import { Logger } from \"neo-common\";\nimport { GsapEffects } from \"./GsapEffects\";\nimport { TweenLite, TimelineLite } from \"gsap\";\nimport roundColor = PIXI.CanvasTinter.roundColor;\n\n/**\n * Interface for alpha tween arguments\n */\nexport interface IAlphaTweenOptions {\n    alphas: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for rotation tween arguments\n */\nexport interface IRotationTweenOptions {\n    degrees: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for scale tween arguments\n *\n * todo Implement increment/decrement/... for tween values. E.g.: {'x': '+1.5'}\n */\nexport interface IScaleTweenOptions {\n    tweenValues: Array<PIXI.Point>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for position tween arguments\n */\nexport interface IPositionTweenOptions {\n    tweenX: Array<number>;\n    tweenY: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for tween arguments\n */\nexport interface ITweenOptions {\n    tween: string;\n    tweenValues: Array<number>;\n    tweenEase?: Array<string>;\n    tweenDuration?: Array<number>;\n    tweenDelay?: Array<number>;\n    tweenLoop?: boolean;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\nexport interface ITweenable {\n    uid: string;\n    name?: string;\n    tweenEngine: string;\n    position: PIXI.Point | PIXI.ObservablePoint;\n    scale: PIXI.Point | PIXI.ObservablePoint;\n    alpha: number;\n    rotation: number;\n    skew: PIXI.ObservablePoint;\n}\n\n/**\n *  Tweening elements\n *\n *  todo Remove return types of tween methods (Use void) ? Or return type Tweens for chaining methods?\n *  todo Add timestamp of start into tween?\n *  todo Add check for specific properties of objects?\n *\n *  Example:\n *      Tweens.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *      Tweens.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *      Tweens.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\n *\n *  @class Tweens\n */\nexport class Tweens {\n    private static RemoveAllTweensExclude: Array<String> = [\"currentValue\", \"_frame\"];\n    static tweenArray: Array<TimelineLite> | Array<TweenLite> = [];\n    static uid: string;\n\n    /**\n     * Record tween of object. Used for removing tweens applied on object.\n     *\n     * @param uid\n     * @param tween\n     */\n    static registerTween(uid: string, tween: any): void {\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                Tweens.tweenArray[uid].push(tween);\n            } else {\n                Tweens.tweenArray[uid] = [tween];\n            }\n        }\n    }\n\n    /**\n     *\n     * @returns {any}\n     * @param uid\n     */\n    static getRegisteredTweens(uid?: string): any {\n        // Array<createjs.Tween> | Array<TimelineLite> | Array<TweenLite>\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                return {\n                    tweens: Tweens.tweenArray[uid],\n                    length: Tweens.tweenArray[uid].length,\n                };\n            }\n            return null;\n        } else {\n            return {\n                tweens: Tweens.tweenArray,\n                length: Object.keys(Tweens.tweenArray).length,\n            };\n        }\n    }\n\n    /**\n     * Only remove tween from registry\n     * @param uid\n     * @param property\n     */\n    static removeTweenFromRegistry(uid: string, property: string = \"all\"): any {\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                for (let i: number = Tweens.tweenArray[uid].length - 1; i >= 0; i--) {\n                    let tween: any = Tweens.tweenArray[uid][i];\n\n                    if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (\n                        tween.name === property + \"Tween\" &&\n                        property !== \"alpha\" &&\n                        property !== \"position\" &&\n                        property !== \"scale\" &&\n                        property !== \"rotation\"\n                    ) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                }\n            }\n        }\n    }\n\n    // TODO add comment\n    static restartTweens(uid: string): any {\n        if (Tweens.tweenArray[uid] != null) {\n            for (let i: number = 0; i < Tweens.tweenArray[uid].length; i++) {\n                Tweens.tweenArray[uid][i].restart();\n            }\n        }\n    }\n\n    /**\n     * Removes tweens of object.\n     *\n     * Kills tween of object when property is specified.\n     * If no property is specified, all tweens of object will be killed.\n     *\n     * @param object\n     * @param property\n     */\n    static removeTweens<T extends ITweenable>(object: T, property: string = \"all\"): any {\n        if (object !== undefined) {\n            if (object.uid != null) {\n                if (Tweens.tweenArray[object.uid] != null) {\n                    if (Tweens.tweenArray[object.uid].length > 0) {\n                        for (let i: number = Tweens.tweenArray[object.uid].length - 1; i >= 0; i--) {\n                            let tween: any = Tweens.tweenArray[object.uid][i];\n\n                            if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\n                                tween.kill({ alpha: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            } else if (\n                                tween.name === \"positionTween\" &&\n                                (property === \"position\" || property === \"all\")\n                            ) {\n                                tween.kill(null, object.position);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            } else if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\n                                tween.kill(null, object.scale);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            } else if (\n                                tween.name === \"rotationTween\" &&\n                                (property === \"rotation\" || property === \"all\")\n                            ) {\n                                tween.kill({ rotation: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            } else if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\n                                tween.kill(null, object.skew);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            } else if (tween.name === property + \"Tween\" || property === \"all\") {\n                                let customProperty = property;\n\n                                if (\n                                    property == \"all\" &&\n                                    Tweens.RemoveAllTweensExclude.indexOf(tween.name.slice(0, -5)) > -1\n                                ) {\n                                    continue;\n                                }\n\n                                if (customProperty == \"all\") {\n                                    customProperty = tween.name.replace(\"Tween\", \"\");\n                                }\n\n                                tween.kill({ [customProperty]: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Applies alpha tween on object.\n     *\n     * @param object\n     * @param options\n     */\n    static alphaTween<T extends ITweenable>(object: T, options: IAlphaTweenOptions): any {\n        if (options.alphas.length < 2) {\n            return;\n        }\n\n        object.alpha = options.alphas.shift();\n\n        let tween: any;\n        if (options.alphas.length === 1) {\n            tween = GsapEffects.alphaTween_Tweenlite(object, options);\n        } else if (options.alphas.length > 1) {\n            tween = GsapEffects.alphaTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"alphaTween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies position tween on object.\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * todo Add check if object is not null\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: PositionTweenOptions\n     */\n    static positionTween<T extends ITweenable>(object: T, options: IPositionTweenOptions): any {\n        /* Todo Implement ability have only one position option. X or Y. */\n        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\n            if (DEBUG) {\n                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\n            }\n            return;\n        }\n\n        // if values for one of the axes are not specified or in valid length, we use default axes value\n        if (options.tweenX.length !== options.tweenY.length) {\n            if (options.tweenX.length > options.tweenY.length) {\n                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(\n                    (value: any) => object.position.y || 0,\n                );\n            } else {\n                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(\n                    (value: any) => object.position.x || 0,\n                );\n            }\n        }\n\n        object.position.x = options.tweenX.shift();\n        object.position.y = options.tweenY.shift();\n\n        let tween: any;\n        if (options.tweenX.length === 1) {\n            tween = GsapEffects.positionTween_Tweenlite(object, options);\n        } else if (options.tweenX.length > 1) {\n            tween = GsapEffects.positionTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"positionTween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies rotation tween on object.\n     * Number of degrees is variable.\n     *\n     * @param object\n     * @param options\n     */\n    // TODO marek bug\n    static rotationTween(object: ITweenable, options: IRotationTweenOptions): any {\n        if (options.degrees.length < 2) {\n            return;\n        }\n\n        object.rotation = Tweens.degrees2radians(options.degrees.shift());\n\n        let tween: any;\n        if (options.degrees.length === 1) {\n            tween = GsapEffects.rotationTween_Tweenlite(object, options);\n        } else if (options.degrees.length > 1) {\n            tween = GsapEffects.rotationTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"rotationTween\";\n        tween.objectName = object.name;\n\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies scale tween on object.\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: ScaleTweenOptions\n     */\n    static scaleTween<T extends ITweenable>(object: T, options: IScaleTweenOptions): any {\n        if (options.tweenValues.length < 2) {\n            if (DEBUG) {\n                this.log(\n                    \"ERROR No ScaleTweenX or ScaleTweenY or ScaleTween option for \" +\n                        (object.name ? object.name : \"object\"),\n                );\n            }\n            return;\n        }\n\n        object.scale.x = options.tweenValues[0].x;\n        object.scale.y = options.tweenValues[0].y;\n        options.tweenValues.shift();\n\n        let tween: any;\n        if (options.tweenValues.length === 1) {\n            tween = GsapEffects.scaleTween_Tweenlite(object, options);\n        } else if (options.tweenValues.length > 1) {\n            tween = GsapEffects.scaleTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"scaleTween\";\n        tween.objectName = object.name;\n\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies position tween on object.\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * todo Add check if object is not null\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: PositionTweenOptions\n     */\n    static customTween<T extends ITweenable>(object: T, options: ITweenOptions): any {\n        let property: Array<string> = options.tween.split(\".\");\n        options = Tweens.prepareTweenData(options);\n\n        if (property.length == 1) {\n            object[property[0]] = options.tweenValues.shift();\n        } else if (property.length == 2) {\n            object[property[0]][property[1]] = options.tweenValues.shift();\n        }\n\n        let tween: any;\n        if (options.tweenValues.length === 1) {\n            tween = GsapEffects.tween_Tweenlite(object, options);\n        } else if (options.tweenValues.length > 1) {\n            tween = GsapEffects.tween_TimelineLite(object, options);\n        }\n\n        tween.name = property[0] + \"Tween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    static prepareTweenData(data: ITweenOptions): ITweenOptions {\n        let length = data.tweenValues.length - 1;\n\n        data.tweenEase = Tweens.stringValueToFormatedArray(length, data.tweenEase, \"linear\");\n        data.tweenDelay = Tweens.numberValueToFormatedArray(length, data.tweenDelay, 0);\n        data.tweenDelay = data.tweenDelay.map(function (x: number) {\n            return x * GsapEffects.TickTime;\n        });\n\n        if (data.tweenDuration != null) {\n            if (data.tweenDuration.length == 1) {\n                let partDuration = data.tweenDuration[0] / length;\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, partDuration);\n            } else {\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, data.tweenDuration, 30);\n            }\n        } else {\n            let defaultValue = Math.floor(Math.random() * 120 + 120);\n            data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, defaultValue);\n        }\n        data.tweenDuration = data.tweenDuration.map(function (x: number) {\n            return x * GsapEffects.TickTime;\n        });\n\n        //we need to convert degrees to radians if we rotating\n        if (data.tween == \"rotation\") {\n            data.tweenValues = data.tweenValues.map(function (x: number) {\n                return Tweens.degrees2radians(x);\n            });\n        }\n\n        return data;\n    }\n\n    /**\n     * Create array of specified length, filled with data values, or value, or default value\n     *\n     * @param {number} length\n     * @param {Array<string> | string} data\n     * @param {string} defaultValue\n     * @returns {Array<string>}\n     */\n    static stringValueToFormatedArray(length: number, data: Array<string>, defaultValue: string): Array<string> {\n        if (data != null) {\n            if (Array.isArray(data)) {\n                if (data.length == length) {\n                    return data;\n                }\n\n                if (data.length < length) {\n                    for (let i: number = data.length; i < length; i++) {\n                        data.push(defaultValue);\n                    }\n                    return data;\n                }\n            } else {\n                return Array.apply(null, Array(length)).map((value: any) => data);\n            }\n        } else {\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\n        }\n\n        return null;\n    }\n\n    /**\n     * Create array of specified length, filled with data values, or value, or default value\n     *\n     * @param {number} length\n     * @param {Array<string> | string} data\n     * @param {string} defaultValue\n     * @returns {Array<string>}\n     */\n    static numberValueToFormatedArray(length: number, data: Array<number>, defaultValue: number): Array<number> {\n        if (data != null) {\n            if (Array.isArray(data)) {\n                if (data.length == length) {\n                    return data;\n                }\n\n                if (data.length < length) {\n                    for (let i: number = data.length; i < length; i++) {\n                        data.push(defaultValue);\n                    }\n                    return data;\n                }\n            } else {\n                return Array.apply(null, Array(length)).map((value: any) => data);\n            }\n        } else {\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\n        }\n\n        return null;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    static degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public static get componentName(): string {\n        return \"Tweens\";\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected static log(s: string): void {\n        if (DEBUG) {\n            let compName = Tweens.componentName;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nexport const TweensAttributes = {\n    TWEEN: \"Tween\",\n    TWEEN_VALUES: \"TweenValues\",\n    TWEEN_EASE: \"TweenEase\",\n    TWEEN_DURATION: \"TweenDuration\",\n    TWEEN_DELAY: \"TweenDelay\",\n    TWEEN_LOOP: \"TweenLoop\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/Tweens.ts\n **/","import { Logger } from \"neo-common\";\nimport {\n    IRotationTweenOptions,\n    IAlphaTweenOptions,\n    IScaleTweenOptions,\n    IPositionTweenOptions,\n    ITweenable,\n    ITweenOptions,\n} from \"./Tweens\";\nimport { TimelineLite, TweenLite, SlowMo, RoughEase, Power4, Bounce } from \"gsap\";\nimport { CustomEase } from \"./CustomEase\";\n\n/**\n *  Example:\n *\n *  GsapEffects.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *  GsapEffects.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *  GsapEffects.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\n *\n */\nexport class GsapEffects {\n    static UseFrames: boolean = false;\n    static TickTime: number = 0.0167;\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {}\n\n    /**\n     * Applies alpha tween on object.\n     *\n     * @param object\n     * @param options\n     */\n    static alphaTween_TimelineLite(object: ITweenable, options: IAlphaTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        const alphaTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n        });\n\n        options.alphas.forEach((alpha: number) => {\n            alphaTimeline.to(object, tweenDurationPerPart, {\n                alpha: alpha,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            alphaTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            alphaTimeline.eventCallback(\"onComplete\", alphaTimeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return alphaTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static alphaTween_Tweenlite(object: ITweenable, options: IAlphaTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let alphaTweenLite: TweenLite;\n\n        alphaTweenLite = TweenLite.to(object, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            alpha: options.alphas,\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            alphaTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            alphaTweenLite.eventCallback(\"onComplete\", alphaTweenLite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return alphaTweenLite;\n    }\n\n    /**\n     * Applies position tween on object, GSAP version.\n     * Number of position points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object\n     * @param options\n     */\n    static positionTween_TimelineLite(object: ITweenable, options: IPositionTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        const positionTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            //autoRemoveChildren: true,\n        });\n\n        options.tweenX.forEach((tweenX: number, i: number) => {\n            positionTimeline.to(object.position, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                x: tweenX,\n                y: options.tweenY[i],\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            positionTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            positionTimeline.eventCallback(\"onComplete\", positionTimeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return positionTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static positionTween_Tweenlite(object: ITweenable, options: IPositionTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenBezier: Object = options.bezier;\n        const tweenPaused: boolean = options.paused;\n\n        let positionTweenLite: TweenLite;\n\n        if (tweenBezier != null) {\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\n                bezier: tweenBezier || 0,\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        } else {\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                x: options.tweenX[0],\n                y: options.tweenY[0],\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        }\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            positionTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            positionTweenLite.eventCallback(\"onComplete\", positionTweenLite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return positionTweenLite;\n    }\n\n    /**\n     * Applies rotation tween on object.\n     * Number of degrees is variable.\n     *\n     * @param object\n     * @param options\n     */\n    static rotationTween_TimelineLite(object: ITweenable, options: IRotationTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        const rotationTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n            //autoRemoveChildren: true,\n        });\n\n        options.degrees.map(GsapEffects.degrees2radians).forEach((degree: number) => {\n            rotationTimeline.to(object, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                rotation: degree,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            rotationTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            rotationTimeline.eventCallback(\"onComplete\", rotationTimeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return rotationTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static rotationTween_Tweenlite(object: ITweenable, options: IRotationTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let rotationTweenLite: TweenLite;\n\n        rotationTweenLite = TweenLite.to(object, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            rotation: GsapEffects.degrees2radians(options.degrees[0]),\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            rotationTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            rotationTweenLite.eventCallback(\"onComplete\", rotationTweenLite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return rotationTweenLite;\n    }\n\n    /**\n     * Applies scale tween on object, GSAP version.\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object\n     * @param options\n     * @returns {TimelineLite}\n     */\n    static scaleTween_TimelineLite(object: ITweenable, options: IScaleTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        const scaleTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n        });\n\n        options.tweenValues.forEach((tweenValue: PIXI.Point) => {\n            scaleTimeline.to(object.scale, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                x: tweenValue.x,\n                y: tweenValue.y,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            scaleTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            scaleTimeline.eventCallback(\"onComplete\", scaleTimeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return scaleTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static scaleTween_Tweenlite(object: ITweenable, options: IScaleTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let scaleTweenLite: TweenLite;\n\n        scaleTweenLite = TweenLite.to(object.scale, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            x: options.tweenValues[0].x,\n            y: options.tweenValues[0].y,\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            scaleTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            scaleTweenLite.eventCallback(\"onComplete\", scaleTweenLite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return scaleTweenLite;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static tween_TimelineLite(object: ITweenable, options: ITweenOptions): TimelineLite {\n        const tween: Array<string> = options.tween.split(\".\");\n        const tweenProperty: string = tween[tween.length - 1];\n        const tweenPaused: boolean = options.paused;\n        const timeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay[0],\n            // delay: (options.tweenDelay != null && options.tweenDelay > 0) ? options.tweenDelay * GsapEffects.TickTime : 0,\n            // autoRemoveChildren: true,\n        });\n\n        options.tweenValues.forEach((value: number, i: number) => {\n            timeline.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[i], {\n                useFrames: GsapEffects.UseFrames,\n                [tweenProperty]: value,\n                ease: GsapEffects.getEaseing(options.tweenEase[i]) || \"Linear.easeNone\",\n                paused: tweenPaused || false,\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            timeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            timeline.eventCallback(\"onComplete\", timeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return timeline;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static tween_Tweenlite(object: ITweenable, options: ITweenOptions): TweenLite {\n        const tween: Array<string> = options.tween.split(\".\");\n        const tweenProperty: string = tween[tween.length - 1];\n        const tweenPaused: boolean = options.paused;\n\n        let tweenlite: TweenLite;\n\n        tweenlite = TweenLite.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[0], {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay[0],\n            [tweenProperty]: options.tweenValues[0],\n            ease: GsapEffects.getEaseing(options.tweenEase[0]) || \"Linear.easeNone\",\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            tweenlite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return tweenlite;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    static degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * Return easing function for tweening.\n     * @method getEaseing\n     * @param ease string - name of easeing\n     * @return any\n     */\n    static getEaseing(ease: string): any {\n        switch (\"\" + ease) {\n            case \"0\":\n            case \"linear\":\n                return \"Linear.easeNone\";\n            case \"1\":\n            case \"backIn\":\n                return \"Back.easeIn\";\n            case \"2\":\n            case \"backInOut\":\n                return \"Back.easeInOut\";\n            case \"3\":\n            case \"backOut\":\n                return \"Back.easeOut\";\n            case \"4\":\n            case \"bounceIn\":\n                return \"Bounce.easeIn\";\n            case \"5\":\n            case \"bounceInOut\":\n                return \"Bounce.easeInOut\";\n            case \"6\":\n            case \"bounceOut\":\n                return \"Bounce.easeOut\";\n            case \"7\":\n            case \"circIn\":\n                return \"Circ.easeIn\";\n            case \"8\":\n            case \"circInOut\":\n                return \"Circ.easeInOut\";\n            case \"9\":\n            case \"circOut\":\n                return \"Circ.easeOut\";\n            case \"10\":\n            case \"cubicIn\":\n                return \"Cubic.easeIn\";\n            case \"11\":\n            case \"cubicInOut\":\n                return \"Cubic.easeInOut\";\n            case \"12\":\n            case \"cubicOut\":\n                return \"Cubic.easeOut\";\n            case \"13\":\n            case \"elasticIn\":\n                return \"Elastic.easeIn\";\n            case \"14\":\n            case \"elasticInOut\":\n                return \"Elastic.easeInOut\";\n            case \"15\":\n            case \"elasticOut\":\n                return \"Elastic.easeOut\";\n            case \"16\":\n            case \"quadIn\":\n                return \"Quad.easeIn\";\n            case \"17\":\n            case \"quadInOut\":\n                return \"Quad.easeInOut\";\n            case \"18\":\n            case \"quadOut\":\n                return \"Quad.easeOut\";\n            case \"19\":\n            case \"quartIn\":\n                return \"Quart.easeIn\";\n            case \"20\":\n            case \"quartInOut\":\n                return \"Quart.easeInOut\";\n            case \"21\":\n            case \"quartOut\":\n                return \"Quart.easeOut\";\n            case \"22\":\n            case \"quintIn\":\n                return \"Quint.easeIn\";\n            case \"23\":\n            case \"quintInOut\":\n                return \"Quint.easeInOut\";\n            case \"24\":\n            case \"quintOut\":\n                return \"Quint.easeOut\";\n            case \"25\":\n            case \"sineIn\":\n                return \"Sine.easeIn\";\n            case \"26\":\n            case \"sineInOut\":\n                return \"Sine.easeInOut\";\n            case \"27\":\n            case \"sineOut\":\n                return \"Sine.easeOut\";\n            case \"power1In\":\n                return \"Power1.easeIn\";\n            case \"power2In\":\n                return \"Power2.easeIn\";\n            case \"power3In\":\n                return \"Power3.easeIn\";\n            case \"power4In\":\n                return \"Power4.easeIn\";\n            case \"explodeSlowMo\":\n                return new SlowMo().config(0.8, 0.8, false);\n            case \"custom_shake\":\n                return new RoughEase({\n                    strength: 8,\n                    points: 10,\n                    template: Bounce.easeIn,\n                    taper: \"out\",\n                    randomize: true,\n                    clamp: false,\n                });\n            default:\n                /* if (DEBUG) {\n                     GsapEffects.log('WARNING no easeing with name: ' + ease + '. Used default.');\n                 }*/\n\n                return CustomEase.get(ease) != null ? ease : \"Linear.easeNone\";\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected static log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__ || \"GsapEffects\";\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/GsapEffects.ts\n **/","/*!\n * VERSION: 1.19.0\n * DATE: 2016-07-14\n * UPDATES AND DOCS AT: http://greensock.com\n * \n * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin\n *\n * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\nvar _gsScope = (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window; //helps ensure compatibility with AMD/RequireJS and CommonJS/Node\n(_gsScope._gsQueue || (_gsScope._gsQueue = [])).push( function() {\n\n\t\"use strict\";\n\n\t_gsScope._gsDefine(\"TweenMax\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\n\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i]) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._dirty = true; //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t_blankArray = [];\n\n\t\tTweenMax.version = \"1.19.0\";\n\t\tp.constructor = TweenMax;\n\t\tp.kill()._gc = false;\n\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\tTweenMax.ticker = TweenLite.ticker;\n\t\tTweenMax.render = TweenLite.render;\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t};\n\t\t\n\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\tvar curRatio = this.ratio,\n\t\t\t\timmediate = this.vars.immediateRender || vars.immediateRender,\n\t\t\t\tp;\n\t\t\tif (resetDuration && this._startTime < this._timeline._time) {\n\t\t\t\tthis._startTime = this._timeline._time;\n\t\t\t\tthis._uncache(false);\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t} else {\n\t\t\t\t\tthis._timeline.insert(this, this._startTime - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (p in vars) {\n\t\t\t\tthis.vars[p] = vars[p];\n\t\t\t}\n\t\t\tif (this._initted || immediate) {\n\t\t\t\tif (resetDuration) {\n\t\t\t\t\tthis._initted = false;\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tthis.render(0, true, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._notifyPluginsOfEnabled && this._firstPT) {\n\t\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t}\n\t\t\t\t\tif (this._time / this._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards. \n\t\t\t\t\t\tvar prevTime = this._totalTime;\n\t\t\t\t\t\tthis.render(0, true, false);\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tthis._init();\n\t\t\t\t\t\tif (this._time > 0 || immediate) {\n\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\tpt = this._firstPT, endValue;\n\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\t\t\t\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\tthis.invalidate();\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevTotalTime = this._totalTime, \n\t\t\t\tprevCycle = this._cycle,\n\t\t\t\tduration = this._duration,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tthis._time = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis._time = duration;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t}\n\t\t\t\tif (!this._reversed) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = this._cycle = 0;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._totalTime = this._time = time;\n\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\tcycleDuration = duration + this._repeatDelay;\n\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = duration - this._time;\n\t\t\t\t\t}\n\t\t\t\t\tif (this._time > duration) {\n\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._easeType) {\n\t\t\t\t\tr = this._time / duration;\n\t\t\t\t\ttype = this._easeType;\n\t\t\t\t\tpow = this._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t} else if (this._time / duration < 0.5) {\n\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\tif (prevTime === this._time && !force && prevCycle === this._cycle) {\n\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._init();\n\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\tthis._time = prevTime;\n\t\t\t\t\tthis._totalTime = prevTotalTime;\n\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\tTweenLiteInternals.lazyTweens.push(this);\n\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._lazy !== false) {\n\t\t\t\tthis._lazy = false;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\tthis._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTotalTime === 0) {\n\t\t\t\tif (this._initted === 2 && time > 0) {\n\t\t\t\t\t//this.invalidate();\n\t\t\t\t\tthis._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t}\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.onStart) if (this._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\t\n\t\t\tif (this._onUpdate) {\n\t\t\t\tif (time < 0) if (this._startAt && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (this._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._cycle !== prevCycle) if (!suppressEvents) if (!this._gc) if (this.vars.onRepeat) {\n\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t}\n\t\t\tif (callback) if (!this._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\t\t\n\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\t\t\n\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\t\t\n\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t};\n\t\t\n\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tstagger = stagger || 0;\n\t\t\tvar delay = 0,\n\t\t\t\ta = [],\n\t\t\t\tfinalComplete = function() {\n\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t},\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tfromCycle = (vars.startAt && vars.startAt.cycle),\n\t\t\t\tl, copy, i, p;\n\t\t\tif (!_isArray(targets)) {\n\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (stagger < 0) {\n\t\t\t\ttargets = _slice(targets);\n\t\t\t\ttargets.reverse();\n\t\t\t\tstagger *= -1;\n\t\t\t}\n\t\t\tl = targets.length - 1;\n\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fromCycle) {\n\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t}\n\t\t\t\tcopy.delay = delay + (copy.delay || 0);\n\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\tcopy.onComplete = finalComplete;\n\t\t\t\t}\n\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t\tdelay += stagger;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\t\t\n\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\t\t\n\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\t\t\t\t\n\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\t\t\n\t\tTweenMax.set = function(target, vars) {\n\t\t\treturn new TweenMax(target, 0, vars);\n\t\t};\n\t\t\n\t\tTweenMax.isTweening = function(target) {\n\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t};\n\t\t\n\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttween = timeline._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t}, \n\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t};\n\t\t\n\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (delayedCalls == null) {\n\t\t\t\tdelayedCalls = true;\n\t\t\t}\n\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\tl = a.length,\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\tisDC, tween, i;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\tif (parent == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\ta, curParent, p, i, l;\n\t\t\tif (typeof(parent) === \"string\") {\n\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t}\n\t\t\tif (_isSelector(parent)) {\n\t\t\t\tparent = _slice(parent);\n\t\t\t}\n\t\t\tif (_isArray(parent)) {\n\t\t\t\ti = parent.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ta = [];\n\t\t\tfor (p in tl) {\n\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\twhile (curParent) {\n\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t}\n\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t\tl = a.length;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (complete) {\n\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t}\n\t\t\t\ta[i]._enabled(false, false);\n\t\t\t}\n\t\t};\n\n\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\ttweens = (tweens !== false);\n\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\ttimelines = (timelines !== false);\n\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\ti = a.length,\n\t\t\t\tisDC, tween;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\ttween.paused(pause);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t};\n\t\t\n\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\tt = TweenLite.ticker.time;\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn tl._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\tt = TweenLite.ticker.frame;\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\treturn value;\n\t\t};\n\t\t\n\t\n//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\t\t\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\t\t\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\t\t\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tif (value > this._duration) {\n\t\t\t\tvalue = this._duration;\n\t\t\t}\n\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t}\n\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t}\n\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t};\n\t\t\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\t\t\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\t\t\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\t\n\t\treturn TweenMax;\n\t\t\n\t}, true);\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * TimelineLite\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"TimelineLite\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\n\t\tvar TimelineLite = function(vars) {\n\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\tthis._labels = {};\n\t\t\t\tthis.autoRemoveChildren = (this.vars.autoRemoveChildren === true);\n\t\t\t\tthis.smoothChildTiming = (this.vars.smoothChildTiming === true);\n\t\t\t\tthis._sortChildren = true;\n\t\t\t\tthis._onUpdate = this.vars.onUpdate;\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\tval, p;\n\t\t\t\tfor (p in v) {\n\t\t\t\t\tval = v[p];\n\t\t\t\t\tif (_isArray(val)) if (val.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tv[p] = this._swapSelfInParams(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\tthis.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_copy = function(vars) {\n\t\t\t\tvar copy = {}, p;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val.call(targets[i], i) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\n\t\tTimelineLite.version = \"1.19.0\";\n\t\tp.constructor = TimelineLite;\n\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\n\t\t/* might use later...\n\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\tfunction localToGlobal(time, animation) {\n\t\t\twhile (animation) {\n\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time;\n\t\t}\n\n\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\tfunction globalToLocal(time, animation) {\n\t\t\tvar scale = 1;\n\t\t\ttime -= localToGlobal(0, animation);\n\t\t\twhile (animation) {\n\t\t\t\tscale *= animation._timeScale;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time * scale;\n\t\t}\n\t\t*/\n\n\t\tp.to = function(target, duration, vars, position) {\n\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t};\n\n\t\tp.from = function(target, duration, vars, position) {\n\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, vars), position);\n\t\t};\n\n\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t};\n\n\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tcopy, i;\n\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (_isSelector(targets)) { //senses if the targets object is a selector. If it is, we should translate it into an array.\n\t\t\t\ttargets = _slice(targets);\n\t\t\t}\n\t\t\tstagger = stagger || 0;\n\t\t\tif (stagger < 0) {\n\t\t\t\ttargets = _slice(targets);\n\t\t\t\ttargets.reverse();\n\t\t\t\tstagger *= -1;\n\t\t\t}\n\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\tcopy = _copy(vars);\n\t\t\t\tif (copy.startAt) {\n\t\t\t\t\tcopy.startAt = _copy(copy.startAt);\n\t\t\t\t\tif (copy.startAt.cycle) {\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttl.to(targets[i], duration, copy, i * stagger);\n\t\t\t}\n\t\t\treturn this.add(tl, position);\n\t\t};\n\n\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\tvars.runBackwards = true;\n\t\t\treturn this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.call = function(callback, params, scope, position) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.set = function(target, vars, position) {\n\t\t\tposition = this._parseTimeOrLabel(position, 0, true);\n\t\t\tif (vars.immediateRender == null) {\n\t\t\t\tvars.immediateRender = (position === this._time && !this._paused);\n\t\t\t}\n\t\t\treturn this.add( new TweenLite(target, 0, vars), position);\n\t\t};\n\n\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\tvars = vars || {};\n\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t}\n\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\troot = tl._timeline,\n\t\t\t\ttween, next;\n\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\tignoreDelayedCalls = true;\n\t\t\t}\n\t\t\troot._remove(tl, true);\n\t\t\ttl._startTime = 0;\n\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\ttween = root._first;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next;\n\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\ttl.add(tween, tween._startTime - tween._delay);\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t\troot.add(tl, 0);\n\t\t\treturn tl;\n\t\t};\n\n\t\tp.add = function(value, position, align, stagger) {\n\t\t\tvar curTime, l, i, child, tl, beforeRawTime;\n\t\t\tif (typeof(position) !== \"number\") {\n\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true, value);\n\t\t\t}\n\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\talign = align || \"normal\";\n\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\tcurTime = position;\n\t\t\t\t\tl = value.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.add(child, curTime);\n\t\t\t\t\t\tif (typeof(child) !== \"string\" && typeof(child) !== \"function\") {\n\t\t\t\t\t\t\tif (align === \"sequence\") {\n\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t} else if (align === \"start\") {\n\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._uncache(true);\n\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\treturn this.addLabel(value, position);\n\t\t\t\t} else if (typeof(value) === \"function\") {\n\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t} else {\n\t\t\t\t\tthrow(\"Cannot add \" + value + \" into the timeline; it is not a tween, timeline, function, or string.\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSimpleTimeline.prototype.add.call(this, value, position);\n\n\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\tif (this._gc || this._time === this._duration) if (!this._paused) if (this._duration < this.duration()) {\n\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\ttl = this;\n\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\tp.remove = function(value) {\n\t\t\tif (value instanceof Animation) {\n\t\t\t\tthis._remove(value, false);\n\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\treturn this;\n\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\tvar i = value.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\treturn this.removeLabel(value);\n\t\t\t}\n\t\t\treturn this.kill(null, value);\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\tvar last = this._last;\n\t\t\tif (!last) {\n\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t} else if (this._time > last._startTime + last._totalDuration / last._timeScale) {\n\t\t\t\tthis._time = this.duration();\n\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.append = function(value, offsetOrLabel) {\n\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t};\n\n\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t};\n\n\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t};\n\n\t\tp.addLabel = function(label, position) {\n\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\treturn this;\n\t\t};\n\n\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\tt.data = \"isPause\";\n\t\t\tthis._hasPause = true;\n\t\t\treturn this.add(t, position);\n\t\t};\n\n\t\tp.removeLabel = function(label) {\n\t\t\tdelete this._labels[label];\n\t\t\treturn this;\n\t\t};\n\n\t\tp.getLabelTime = function(label) {\n\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t};\n\n\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\tvar i;\n\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\tthis.remove(ignore);\n\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\ti = ignore.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof(offsetOrLabel) === \"string\") {\n\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \"number\" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent);\n\t\t\t}\n\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\tif (typeof(timeOrLabel) === \"string\" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\ti = timeOrLabel.indexOf(\"=\");\n\t\t\t\tif (i === -1) {\n\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \"1\", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration();\n\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\ttimeOrLabel = this.duration();\n\t\t\t}\n\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t};\n\n\t\tp.seek = function(position, suppressEvents) {\n\t\t\treturn this.totalTime((typeof(position) === \"number\") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t};\n\n\t\tp.stop = function() {\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\treturn this.play(position, suppressEvents);\n\t\t};\n\n\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\treturn this.pause(position, suppressEvents);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevStart = this._startTime,\n\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\tprevPaused = this._paused,\n\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = this._time = totalDur;\n\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || this._rawPrevTime < 0 || this._rawPrevTime === _tinyNum) if (this._rawPrevTime !== time && this._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (this._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\tif (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (this._rawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t}\n\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._initted = true;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time > 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTime === 0) if (this.vars.onStart) if (this._time !== 0 || !this._duration) if (!suppressEvents) {\n\t\t\t\tthis._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = this._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = this._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t}\n\n\t\t\tif (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._hasPausedChild = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\tvar a = [],\n\t\t\t\ttween = this._first,\n\t\t\t\tcnt = 0;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t//do nothing\n\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.getTweensOf = function(target, nested) {\n\t\t\tvar disabled = this._gc,\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\ttweens, i;\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t}\n\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\ti = tweens.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(false, true);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.recent = function() {\n\t\t\treturn this._recent;\n\t\t};\n\n\t\tp._contains = function(tween) {\n\t\t\tvar tl = tween.timeline;\n\t\t\twhile (tl) {\n\t\t\t\tif (tl === this) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttl = tl.timeline;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\tvar tween = this._first,\n\t\t\t\tlabels = this._labels,\n\t\t\t\tp;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\tif (adjustLabels) {\n\t\t\t\tfor (p in labels) {\n\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp._kill = function(vars, target) {\n\t\t\tif (!vars && !target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\ti = tweens.length,\n\t\t\t\tchanged = false;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.clear = function(labels) {\n\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\ti = tweens.length;\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t}\n\t\t\tif (labels !== false) {\n\t\t\t\tthis._labels = {};\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\ttween.invalidate();\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (enabled === this._gc) {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tthis._forcingPlayhead = true;\n\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\tthis._forcingPlayhead = false;\n\t\t\treturn val;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t}\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\ttween = this._last,\n\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\tprev, end;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\tthis.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\tthis._startTime += tween._startTime / this._timeScale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t}\n\t\t\t\t\tthis._duration = this._totalDuration = max;\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!value) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\ttime = this._time;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime === time && tween.data === \"isPause\") {\n\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t};\n\n\t\tp.usesFrames = function() {\n\t\t\tvar tl = this._timeline;\n\t\t\twhile (tl._timeline) {\n\t\t\t\ttl = tl._timeline;\n\t\t\t}\n\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\treturn this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale;\n\t\t};\n\n\t\treturn TimelineLite;\n\n\t}, true);\n\n\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * TimelineMax\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"TimelineMax\", [\"TimelineLite\",\"TweenLite\",\"easing.Ease\"], function(TimelineLite, TweenLite, Ease) {\n\n\t\tvar TimelineMax = function(vars) {\n\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._dirty = true;\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\n\t\tp.constructor = TimelineMax;\n\t\tp.kill()._gc = false;\n\t\tTimelineMax.version = \"1.19.0\";\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.removeCallback = function(callback, position) {\n\t\t\tif (callback) {\n\t\t\t\tif (position == null) {\n\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t} else {\n\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.removePause = function(position) {\n\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t};\n\n\t\tp.tweenTo = function(position, vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false},\n\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\tduration, p, t;\n\t\t\tfor (p in vars) {\n\t\t\t\tcopy[p] = vars[p];\n\t\t\t}\n\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\tt = new Engine(this, duration, copy);\n\t\t\tcopy.onStart = function() {\n\t\t\t\tt.target.paused(true);\n\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale );\n\t\t\t\t}\n\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\tt._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn t;\n\t\t};\n\n\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\tvars = vars || {};\n\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tdur = this._duration,\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevTotalTime = this._totalTime,\n\t\t\t\tprevStart = this._startTime,\n\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tprevPaused = this._paused,\n\t\t\t\tprevCycle = this._cycle,\n\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t}\n\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && this._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis._time = dur;\n\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t}\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = this._cycle = 0;\n\t\t\t\t}\n\t\t\t\tthis._time = 0;\n\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) {\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (prevRawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tthis._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\tinternalForce = true;\n\t\t\t\t}\n\t\t\t\tthis._time = this._rawPrevTime = time;\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = time;\n\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = dur + this._repeatDelay;\n\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\tthis._time = dur - this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time > dur) {\n\t\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\ttime = this._time;\n\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (this._cycle !== prevCycle) if (!this._locked) {\n\t\t\t\t/*\n\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\twould get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t*/\n\t\t\t\tvar backwards = (this._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\twrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)),\n\t\t\t\t\trecTotalTime = this._totalTime,\n\t\t\t\t\trecCycle = this._cycle,\n\t\t\t\t\trecRawPrevTime = this._rawPrevTime,\n\t\t\t\t\trecTime = this._time;\n\n\t\t\t\tthis._totalTime = prevCycle * dur;\n\t\t\t\tif (this._cycle < prevCycle) {\n\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime += dur;\n\t\t\t\t}\n\t\t\t\tthis._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \"cleaner\" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\n\t\t\t\tthis._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\tthis._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\tthis.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\tif (!suppressEvents) if (!this._gc) {\n\t\t\t\t\tif (this.vars.onRepeat) {\n\t\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTime !== this._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (wrap) {\n\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t}\n\t\t\t\tthis._locked = false;\n\t\t\t\tif (this._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._time = recTime;\n\t\t\t\tthis._totalTime = recTotalTime;\n\t\t\t\tthis._cycle = recCycle;\n\t\t\t\tthis._rawPrevTime = recRawPrevTime;\n\t\t\t}\n\n\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._initted = true;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0 || !this._totalDuration) if (!suppressEvents) {\n\t\t\t\tthis._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = this._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = this._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t}\n\t\t\tif (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\tif (nested == null) {\n\t\t\t\tnested = true;\n\t\t\t}\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (timelines == null) {\n\t\t\t\ttimelines = false;\n\t\t\t}\n\t\t\tvar a = [],\n\t\t\t\tall = this.getChildren(nested, tweens, timelines),\n\t\t\t\tcnt = 0,\n\t\t\t\tl = all.length,\n\t\t\t\ti, tween;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = all[i];\n\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\n\t\tp.getLabelAfter = function(time) {\n\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\tl = labels.length,\n\t\t\t\ti;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelBefore = function(time) {\n\t\t\tif (time == null) {\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\ti = labels.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelsArray = function() {\n\t\t\tvar a = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tp;\n\t\t\tfor (p in this._labels) {\n\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t}\n\t\t\ta.sort(function(a,b) {\n\t\t\t\treturn a.time - b.time;\n\t\t\t});\n\t\t\treturn a;\n\t\t};\n\n\n//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tif (value > this._duration) {\n\t\t\t\tvalue = this._duration;\n\t\t\t}\n\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t}\n\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.currentLabel = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.getLabelBefore(this._time + 0.00000001);\n\t\t\t}\n\t\t\treturn this.seek(value, true);\n\t\t};\n\n\t\treturn TimelineMax;\n\n\t}, true);\n\t\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * BezierPlugin\n * ----------------------------------------------------------------\n */\n\t(function() {\n\n\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t_r1 = [],\n\t\t\t_r2 = [],\n\t\t\t_r3 = [],\n\t\t\t_corProps = {},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t}\n\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t}\n\t\t\t\tthis.a = a;\n\t\t\t\tthis.b = b;\n\t\t\t\tthis.c = c;\n\t\t\t\tthis.d = d;\n\t\t\t\tthis.da = d - a;\n\t\t\t\tthis.ca = c - a;\n\t\t\t\tthis.ba = b - a;\n\t\t\t},\n\t\t\t_correlate = \",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",\n\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\tq2 = {},\n\t\t\t\t\tq3 = {},\n\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\tq2.b = mabc + m8;\n\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t},\n\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\tii = 0,\n\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\tp3 = a[ii+1].d;\n\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tm1 += mm;\n\t\t\t\t\tm2 += mm;\n\n\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t}\n\n\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\tseg.ba = cp1 - p1;\n\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\tii += 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tii++;\n\t\t\t\t\t}\n\n\t\t\t\t\tcp1 = m2;\n\t\t\t\t}\n\t\t\t\tseg = a[ii];\n\t\t\t\tseg.b = cp1;\n\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\tif (quad) {\n\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\tif (prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\ti = values.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \"string\") if (tmp.charAt(1) === \"=\") {\n\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = values.length - 2;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[(l < -1) ? 0 : 1][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\tprops = [],\n\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\tcorrelate = (typeof(correlate) === \"string\") ? \",\"+correlate+\",\" : _correlate;\n\t\t\t\tif (curviness == null) {\n\t\t\t\t\tcurviness = 1;\n\t\t\t\t}\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\tif (values.length > 1) {\n\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\tseamless = true;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\t_corProps[p] = (correlate.indexOf(\",\"+p+\",\") !== -1);\n\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t}\n\t\t\t\ti = _r1.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t}\n\t\t\t\tif (!basic) {\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = _r3.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\ta = obj[p];\n\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\ttype = type || \"soft\";\n\t\t\t\tvar obj = {},\n\t\t\t\t\tinc = (type === \"cubic\") ? 3 : 2,\n\t\t\t\t\tsoft = (type === \"soft\"),\n\t\t\t\t\tprops = [],\n\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\tif (soft && prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t}\n\t\t\t\tif (values == null || values.length < inc + 1) { throw \"invalid Bezier data\"; }\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tl = values.length;\n\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \"string\" && tmp.charAt(1) === \"=\") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t}\n\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t}\n\t\t\t\t\tcur.length = cnt;\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\tj = a.length,\n\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\twhile (--j > -1) {\n\t\t\t\t\tbez = a[j];\n\t\t\t\t\ts = bez.a;\n\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\td = d1 = 0;\n\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\tvar a = [],\n\t\t\t\t\tlengths = [],\n\t\t\t\t\td = 0,\n\t\t\t\t\ttotal = 0,\n\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\tsegments = [],\n\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\tp, i, l, index;\n\t\t\t\tfor (p in obj) {\n\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\td = 0;\n\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t},\n\n\n\n\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \"bezier\",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tversion: \"1.3.7\",\n\t\t\t\t\tAPI: 2,\n\t\t\t\t\tglobal:true,\n\n\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\n\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\"x\",\"y\",\"rotation\",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \"function\");\n\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]();\n\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._beziers = (vars.type !== \"cubic\" && vars.type !== \"quadratic\" && vars.type !== \"soft\") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \"thruBasic\"), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\n\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \"function\") ? target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg;\n\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\tv *= this._length;\n\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\tif (v > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t} else if (v < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v) { }\n\t\t\t\t\t\t\t\tif (i === 0 && v < this._l1) {\n\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \"precision\" and measured each one)\n\t\t\t\t\t\t\tv -= this._l1;\n\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\tif (v > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t} else if (v < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v) {\t}\n\t\t\t\t\t\t\t\tif (i === 0 && v < this._s1) {\n\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tt = ((i + (v - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinv = 1 - t;\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\n\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\n\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\n\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\n\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\n\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}),\n\t\t\tp = BezierPlugin.prototype;\n\n\n\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \"css\" object using the autoCSS feature of TweenLite\n\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t};\n\n\t\tBezierPlugin._cssRegister = function() {\n\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\tif (!CSSPlugin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t_internals._registerComplexSpecialProp(\"bezier\", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\te = {values:e};\n\t\t\t\t}\n\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\tvar values = e.values,\n\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\tpluginValues = [],\n\t\t\t\t\tv = {},\n\t\t\t\t\ti, p, data;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t}\n\t\t\t\tfor (p in e) {\n\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t}\n\t\t\t\tv.values = pluginValues;\n\t\t\t\tpt = new CSSPropTween(t, \"bezier\", 0, 0, data.pt, 2);\n\t\t\t\tpt.data = data;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\"left\",\"top\",\"rotation\",i,false]] : (data.end.x != null) ? [[\"x\",\"y\",\"rotation\",i,false]] : false;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t}\n\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\tcssp._overwriteProps.push(\"rotation\");\n\t\t\t\t}\n\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar op = this._overwriteProps,\n\t\t\t\ti = op.length,\n\t\t\t\tval;\n\t\t\twhile (--i > -1) {\n\t\t\t\tval = lookup[op[i]];\n\t\t\t\tif (val && typeof(val) === \"function\") {\n\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._props,\n\t\t\t\tp, i;\n\t\t\tfor (p in this._beziers) {\n\t\t\t\tif (p in lookup) {\n\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ta = this._autoRotate;\n\t\t\tif (a) {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._super._kill.call(this, lookup);\n\t\t};\n\n\t}());\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * CSSPlugin\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"plugins.CSSPlugin\", [\"plugins.TweenPlugin\",\"TweenLite\"], function(TweenPlugin, TweenLite) {\n\n\t\t/** @constructor **/\n\t\tvar CSSPlugin = function() {\n\t\t\t\tTweenPlugin.call(this, \"css\");\n\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t_specialProps = {},\n\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\"css\");\n\n\t\tp.constructor = CSSPlugin;\n\t\tCSSPlugin.version = \"1.19.0\";\n\t\tCSSPlugin.API = 2;\n\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\tCSSPlugin.defaultSkewType = \"compensated\";\n\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\tp = \"px\"; //we'll reuse the \"p\" variable to keep file size down\n\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\"\"};\n\n\n\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t_urlExp = /(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\"...\") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t_forcePT = {},\n\t\t\t_doc = document,\n\t\t\t_createElement = function(type) {\n\t\t\t\treturn _doc.createElementNS ? _doc.createElementNS(\"http://www.w3.org/1999/xhtml\", type) : _doc.createElement(type);\n\t\t\t},\n\t\t\t_tempDiv = _createElement(\"div\"),\n\t\t\t_tempImg = _createElement(\"img\"),\n\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t_agent = navigator.userAgent,\n\t\t\t_autoRound,\n\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\n\t\t\t_isSafari,\n\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \"top\" and \"left\" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t_ieVers,\n\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\tvar i = _agent.indexOf(\"Android\"),\n\t\t\t\t\ta = _createElement(\"a\");\n\t\t\t\t_isSafari = (_agent.indexOf(\"Safari\") !== -1 && _agent.indexOf(\"Chrome\") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));\n\t\t\t\t_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf(\"Version/\")+8, 1)) < 6));\n\t\t\t\t_isFirefox = (_agent.indexOf(\"Firefox\") !== -1);\n\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tif (!a) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ta.style.cssText = \"top:1px;opacity:.55;\";\n\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t}()),\n\t\t\t_getIEOpacity = function(v) {\n\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \"string\") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \"\") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t},\n\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\tif (window.console) {\n\t\t\t\t\tconsole.log(s);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\n\t\t\t_prefixCSS = \"\", //the non-camelCase vendor prefix like \"-o-\", \"-moz-\", \"-ms-\", or \"-webkit-\"\n\t\t\t_prefix = \"\", //camelCase vendor prefix like \"O\", \"ms\", \"Webkit\", or \"Moz\".\n\n\t\t\t// @private feed in a camelCase property name like \"transform\" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \"WebkitTransform\" or \"MozTransform\" or \"transform\" or null if no such property is found, like if the browser is IE8 or before, \"transform\" won't be found at all)\n\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\te = e || _tempDiv;\n\t\t\t\tvar s = e.style,\n\t\t\t\t\ta, i;\n\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\ta = [\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"];\n\t\t\t\ti = 5;\n\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\tif (i >= 0) {\n\t\t\t\t\t_prefix = (i === 3) ? \"ms\" : a[i];\n\t\t\t\t\t_prefixCSS = \"-\" + _prefix.toLowerCase() + \"-\";\n\t\t\t\t\treturn _prefix + p;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\t_getComputedStyle = _doc.defaultView ? _doc.defaultView.getComputedStyle : function() {},\n\n\t\t\t/**\n\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \"left\" css value for an element with an ID of \"myElement\", you could do:\n\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\"myElement\"), \"left\");\n\t\t\t *\n\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t * @param {!string} p Property name (like \"left\" or \"top\" or \"marginTop\", etc.)\n\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \"style\" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \"none\", \"auto\" or \"auto auto\".\n\t\t\t * @return {?string} The current property value\n\t\t\t */\n\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\tvar rv;\n\t\t\t\tif (!_supportsOpacity) if (p === \"opacity\") { //several versions of IE don't use the standard \"opacity\" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\trv = t.style[p];\n\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t}\n\t\t\t\treturn (dflt != null && (!rv || rv === \"none\" || rv === \"auto\" || rv === \"auto auto\")) ? dflt : rv;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \"%\", \"em\", \"px\", etc.) and it will spit back the equivalent pixel number.\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (like \"left\", \"top\", \"marginLeft\", etc.)\n\t\t\t * @param {!number} v Value\n\t\t\t * @param {string=} sfx Suffix (like \"px\" or \"%\" or \"em\")\n\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t * @return {number} value in pixels\n\t\t\t */\n\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\tif (sfx === \"px\" || !sfx) { return v; }\n\t\t\t\tif (sfx === \"auto\" || !v) { return 0; }\n\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\tnode = t,\n\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\tpix, cache, time;\n\t\t\t\tif (neg) {\n\t\t\t\t\tv = -v;\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tv *= 100;\n\t\t\t\t}\n\t\t\t\tif (sfx === \"%\" && p.indexOf(\"border\") !== -1) {\n\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.cssText = \"border:0 solid red;position:\" + _getStyle(t, \"position\") + \";line-height:0;\";\n\t\t\t\t\tif (sfx === \"%\" || !node.appendChild || sfx.charAt(0) === \"v\" || sfx === \"rem\") {\n\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[(horiz ? \"width\" : \"height\")] = v + sfx;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[(horiz ? \"borderLeftWidth\" : \"borderTopWidth\")] = v + sfx;\n\t\t\t\t\t}\n\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \"offsetWidth\" : \"offsetHeight\")]);\n\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\tif (horiz && sfx === \"%\" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tpix /= 100;\n\t\t\t\t}\n\t\t\t\treturn neg ? -pix : pix;\n\t\t\t},\n\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \"top\" or \"left\" in px when it's \"auto\". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\tif (_getStyle(t, \"position\", cs) !== \"absolute\") { return 0; }\n\t\t\t\tvar dim = ((p === \"left\") ? \"Left\" : \"Top\"),\n\t\t\t\t\tv = _getStyle(t, \"margin\" + dim, cs);\n\t\t\t\treturn t[\"offset\" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \"\")) || 0);\n\t\t\t},\n\n\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\tvar s = {},\n\t\t\t\t\ti, tr, p;\n\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\tif (p.indexOf(\"-transform\") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (i.indexOf(\"Transform\") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\tif (typeof(i) === \"string\" && s[i] === undefined) {\n\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\ts.x = tr.x;\n\t\t\t\ts.y = tr.y;\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t}\n\t\t\t\tif (s.filters) {\n\t\t\t\t\tdelete s.filters;\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t},\n\n\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \"difs\" property which refers to an object containing only those isolated properties and values for tweening, and a \"firstMPT\" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\tvar difs = {},\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tval, p, mpt;\n\t\t\t\tfor (p in s2) {\n\t\t\t\t\tif (p !== \"cssText\") if (p !== \"length\") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\"Origin\") === -1) if (typeof(val) === \"number\" || typeof(val) === \"string\") {\n\t\t\t\t\t\tdifs[p] = (val === \"auto\" && (p === \"left\" || p === \"top\")) ? _calculateOffset(t, p) : ((val === \"\" || val === \"auto\" || val === \"none\") && typeof(s1[p]) === \"string\" && s1[p].replace(_NaNExp, \"\") !== \"\") ? 0 : val; //if the ending value is defaulting (\"\" or \"auto\"), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \"\" or \"auto\" so that things actually tween.\n\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (vars) {\n\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\tif (p !== \"className\") {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t},\n\t\t\t_dimensions = {width:[\"Left\",\"Right\"], height:[\"Top\",\"Bottom\"]},\n\t\t\t_margins = [\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],\n\n\t\t\t/**\n\t\t\t * @private Gets the width or height of an element\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (\"width\" or \"height\")\n\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t */\n\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\tif ((t.nodeName + \"\").toLowerCase() === \"svg\") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t} else if (t.getBBox && _isSVG(t)) {\n\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t}\n\t\t\t\tvar v = parseFloat((p === \"width\") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\ti = a.length;\n\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"padding\" + a[i], cs, true) ) || 0;\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"border\" + a[i] + \"Width\", cs, true) ) || 0;\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t},\n\n\t\t\t// @private Parses position-related complex strings like \"top left\" or \"50px 10px\" or \"70% 20%\", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \"ox\" (offsetX), \"oy\" (offsetY), \"oxp\" (if true, \"ox\" is a percentage not a pixel value), and \"oxy\" (if true, \"oy\" is a percentage not a pixel value)\n\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\tif (v === \"contain\" || v === \"auto\" || v === \"auto auto\") { //note: Firefox uses \"auto auto\" as default whereas Chrome uses \"auto\".\n\t\t\t\t\treturn v + \" \";\n\t\t\t\t}\n\t\t\t\tif (v == null || v === \"\") {\n\t\t\t\t\tv = \"0 0\";\n\t\t\t\t}\n\t\t\t\tvar a = v.split(\" \"),\n\t\t\t\t\tx = (v.indexOf(\"left\") !== -1) ? \"0%\" : (v.indexOf(\"right\") !== -1) ? \"100%\" : a[0],\n\t\t\t\t\ty = (v.indexOf(\"top\") !== -1) ? \"0%\" : (v.indexOf(\"bottom\") !== -1) ? \"100%\" : a[1],\n\t\t\t\t\ti;\n\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\ta = v.split(\", \").join(\",\").split(\",\");\n\t\t\t\t\tv = [];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t}\n\t\t\t\t\treturn v.join(\",\");\n\t\t\t\t}\n\t\t\t\tif (y == null) {\n\t\t\t\t\ty = (x === \"center\") ? \"50%\" : \"0\";\n\t\t\t\t} else if (y === \"center\") {\n\t\t\t\t\ty = \"50%\";\n\t\t\t\t}\n\t\t\t\tif (x === \"center\" || (isNaN(parseFloat(x)) && (x + \"\").indexOf(\"=\") === -1)) { //remember, the user could flip-flop the values and say \"bottom center\" or \"center bottom\", etc. \"center\" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \"=\" sign in the value, it's relative.\n\t\t\t\t\tx = \"50%\";\n\t\t\t\t}\n\t\t\t\tv = x + \" \" + y + ((a.length > 2) ? \" \" + a[2] : \"\");\n\t\t\t\tif (recObj) {\n\t\t\t\t\trecObj.oxp = (x.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oyp = (y.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oxr = (x.charAt(1) === \"=\");\n\t\t\t\t\trecObj.oyr = (y.charAt(1) === \"=\");\n\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.v = v;\n\t\t\t\t}\n\t\t\t\treturn recObj || v;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \"+=\" or \"-=\" are recognized)\n\t\t\t */\n\t\t\t_parseChange = function(e, b) {\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (typeof(e) === \"string\" && e.charAt(1) === \"=\") ? parseInt(e.charAt(0) + \"1\", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @return {number} Parsed value\n\t\t\t */\n\t\t\t_parseVal = function(v, d) {\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (v == null) ? d : (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Translates strings like \"40deg\" or \"40\" or 40rad\" or \"+=40deg\" or \"270_short\" or \"-90_cw\" or \"+=45_ccw\" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \"rotation\", \"rotationX\", or \"rotationY\"\n\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t * @return {number} parsed angle in radians\n\t\t\t */\n\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\tvar min = 0.000001,\n\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (v == null) {\n\t\t\t\t\tresult = d;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\tresult = v;\n\t\t\t\t} else {\n\t\t\t\t\tcap = 360;\n\t\t\t\t\tsplit = v.split(\"_\");\n\t\t\t\t\tisRelative = (v.charAt(1) === \"=\");\n\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\"rad\") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult = d + dif;\n\t\t\t\t}\n\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\tresult = 0;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\tlime:[0,255,0],\n\t\t\t\tsilver:[192,192,192],\n\t\t\t\tblack:[0,0,0],\n\t\t\t\tmaroon:[128,0,0],\n\t\t\t\tteal:[0,128,128],\n\t\t\t\tblue:[0,0,255],\n\t\t\t\tnavy:[0,0,128],\n\t\t\t\twhite:[255,255,255],\n\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\tolive:[128,128,0],\n\t\t\t\tyellow:[255,255,0],\n\t\t\t\torange:[255,165,0],\n\t\t\t\tgray:[128,128,128],\n\t\t\t\tpurple:[128,0,128],\n\t\t\t\tgreen:[0,128,0],\n\t\t\t\tred:[255,0,0],\n\t\t\t\tpink:[255,192,203],\n\t\t\t\tcyan:[0,255,255],\n\t\t\t\ttransparent:[255,255,255,0]},\n\n\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t */\n\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\tif (!v) {\n\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t} else {\n\t\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\ta[3] = Number(v[3]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\th *= 60;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\tparsed = colors.length ? \"\" : s,\n\t\t\t\t\ti, color, temp;\n\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t}\n\t\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t\t}\n\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t},\n\t\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\"; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\n\t\tfor (p in _colorLookup) {\n\t\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t\t}\n\t\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\n\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\tvar combined = a[0] + a[1],\n\t\t\t\ttoHSL;\n\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t}\n\t\t\t_colorExp.lastIndex = 0;\n\t\t};\n\n\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t}\n\n\t\t/**\n\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \"0px red\" or \"0px 0px 10px rgb(255,0,0)\" or \"0px 0px 20px 20px #F00\" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\"0px 0px 0px 0px #777\", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t * @param {!string} dflt The default value and pattern to follow. So \"0px 0px 0px 0px #777\" will ensure that 4 numbers and a color will always get returned.\n\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t * @return {Function} formatter function\n\t\t */\n\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\tif (dflt == null) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\"\"])[0] : \"\",\n\t\t\t\t\tdVals = dflt.split(dColor).join(\"\").match(_valuesExp) || [],\n\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \")\") ? \")\" : \"\",\n\t\t\t\t\tdelim = (dflt.indexOf(\" \") !== -1) ? \" \" : \",\",\n\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \"\") : \"\",\n\t\t\t\t\tformatter;\n\t\t\t\tif (!numVals) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tif (clr) {\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\tvals = v.split(color).join(\"\").match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\"inset\") !== -1 ? \" inset\" : \"\");\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\n\t\t\t\t}\n\t\t\t\tformatter = function(v) {\n\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t}\n\t\t\t\t\tvals = v.match(_valuesExp) || [];\n\t\t\t\t\ti = vals.length;\n\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn pfx + vals.join(delim) + sfx;\n\t\t\t\t};\n\t\t\t\treturn formatter;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \"marginTop,marginRight,marginBottom,marginLeft\"\n\t\t\t * @return {Function} a formatter function\n\t\t\t */\n\t\t\t_getEdgeParser = function(props) {\n\t\t\t\tprops = props.split(\",\");\n\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar a = (e + \"\").split(\" \"),\n\t\t\t\t\t\ti;\n\t\t\t\t\tvars = {};\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t}\n\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\tvar d = this.data,\n\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod(proxy.rotation, this.t) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t}\n\t\t\t\t//at the end, we must set the CSSPropTween's \"e\" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \"b\" at the beginning.\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\tp = (v === 1) ? \"e\" : \"b\";\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t * @param {!string} p property name\n\t\t\t * @param {(number|string|object)} v value\n\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t */\n\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\tthis.t = t;\n\t\t\t\tthis.p = p;\n\t\t\t\tthis.v = v;\n\t\t\t\tthis.r = r;\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t\tthis._next = next;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \"10px 10px 20px 30px rgb(255,0,0)\" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \"s\" or \"xn1\" or \"xn2\") that we're tweening and the unique property name that was used for the proxy (like \"boxShadow_xn1\" and \"boxShadow_xn2\") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t * This method returns an object that has the following properties:\n\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \"pt\" (4th) parameter.\n\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \"pt\" (4th) parameter.\n\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t */\n\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\tvar bpt = pt,\n\t\t\t\t\tstart = {},\n\t\t\t\t\tend = {},\n\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\tcssp._transform = null;\n\t\t\t\t_forcePT = vars;\n\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t_forcePT = oldForce;\n\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\tif (shallow) {\n\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \"s\", p, mpt, pt.r);\n\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\txp = \"xn\" + i;\n\t\t\t\t\t\t\t\tp = pt.p + \"_\" + xp;\n\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t},\n\n\n\n\t\t\t/**\n\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \"extra\" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \"s\" indicates string and \"n\" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \"5px 5px 8px rgb(102, 102, 51)\". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \"width\".\n\t\t\t * @param {number} s Starting numeric value\n\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\"1px solid red\"), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \"clip:rect(...)\" tween in which case \"p\" might be xs1 but \"n\" is still \"clip\"\n\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t */\n\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\tthis.t = t; //target\n\t\t\t\tthis.p = p; //property\n\t\t\t\tthis.s = s; //starting value\n\t\t\t\tthis.c = c; //change value\n\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t}\n\t\t\t\tthis.r = r; //round (boolean)\n\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\tif (pr) {\n\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t_hasPriority = true;\n\t\t\t\t}\n\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis._next = next;\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\tpt.b = start;\n\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\treturn pt;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t * sp.parseComplex(element, \"boxShadow\", \"5px 10px 20px rgb(255,102,51)\", \"0px 0px 0px red\", true, \"0px 0px 0px rgb(0,0,0,0)\", pt);\n\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \"data\" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t *\n\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t * @param {!string} p Property that will be tweened (its name, like \"left\" or \"backgroundColor\" or \"boxShadow\")\n\t\t\t * @param {string} b Beginning value\n\t\t\t * @param {string} e Ending value\n\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \"rgb(255,0,0)\" or \"#F00\" or \"red\". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \"data\" property, like {s:100, xn1:50, xn2:300}\n\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t */\n\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t//DEBUG: _log(\"parseComplex: \"+p+\", b: \"+b+\", e: \"+e);\n\t\t\t\tb = b || dflt || \"\";\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\te += \"\"; //ensures it's a string\n\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\te = [b, e];\n\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\tb = e[0];\n\t\t\t\t\te = e[1];\n\t\t\t\t}\n\t\t\t\tvar ba = b.split(\", \").join(\",\").split(\" \"), //beginning array\n\t\t\t\t\tea = e.split(\", \").join(\",\").split(\" \"), //ending array\n\t\t\t\t\tl = ba.length,\n\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\tif (e.indexOf(\",\") !== -1 || b.indexOf(\",\") !== -1) {\n\t\t\t\t\tba = ba.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\tea = ea.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\tba = (dflt || \"\").split(\" \");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tbv = ba[i];\n\t\t\t\t\tev = ea[i];\n\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\tpt.appendXtra(\"\", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \"\"), (autoRound && ev.indexOf(\"px\") !== -1), true);\n\n\t\t\t\t\t//if the value is a color\n\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\tstr = ev.indexOf(\")\") + 1;\n\t\t\t\t\t\tstr = \")\" + (str ? ev.substr(str) : \"\"); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\tuseHSL = (ev.indexOf(\"hsl\") !== -1 && _supportsOpacity);\n\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \"transparent\" for the end color\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += pt.l ? \" transparent\" : \"transparent\";\n\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\"transparent\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"hsla(\" : \"hsl(\"), bv[0], _parseChange(ev[0], bv[0]), \",\", false, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], _parseChange(ev[1], bv[1]), \"%,\", false)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \"%,\" : \"%\" + str), false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"rgba(\" : \"rgb(\"), bv[0], ev[0] - bv[0], \",\", true, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], ev[1] - bv[1], \",\", true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], ev[2] - bv[2], (hasAlpha ? \",\" : str), true);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\tpt.appendXtra(\"\", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\n\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += (pt.l || pt[\"xs\" + pt.l]) ? \" \" + ev : ev;\n\n\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \"\", (autoRound && bv.substr(temp + cv.length, 2) === \"px\"), (xi === 0));\n\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//if there are relative values (\"+=\" or \"-=\" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\tif (e.indexOf(\"=\") !== -1) if (pt.data) {\n\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\tstr += pt[\"xs\" + i] + pt.data[\"xn\" + i];\n\t\t\t\t\t}\n\t\t\t\t\tpt.e = str + pt[\"xs\" + i];\n\t\t\t\t}\n\t\t\t\tif (!pt.l) {\n\t\t\t\t\tpt.type = -1;\n\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t}\n\t\t\t\treturn pt.xfirst || pt;\n\t\t\t},\n\t\t\ti = 9;\n\n\n\t\tp = CSSPropTween.prototype;\n\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\twhile (--i > 0) {\n\t\t\tp[\"xn\" + i] = 0;\n\t\t\tp[\"xs\" + i] = \"\";\n\t\t}\n\t\tp.xs0 = \"\";\n\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\n\n\t\t/**\n\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \"rect(10px, 5px, 0px, 20px)\", the values would be stored like this:\n\t\t * xs0:\"rect(\", s:10, xs1:\"px, \", xn1:5, xs2:\"px, \", xn2:0, xs3:\"px, \", xn3:20, xn4:\"px)\"\n\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t * @param {string=} pfx Prefix (if any)\n\t\t * @param {!number} s Starting value\n\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t * @param {string=} sfx Suffix (if any)\n\t\t * @param {boolean=} r Round (if true).\n\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t */\n\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\tvar pt = this,\n\t\t\t\tl = pt.l;\n\t\t\tpt[\"xs\" + l] += (pad && (l || pt[\"xs\" + l])) ? \" \" + pfx : pfx || \"\";\n\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\tpt[\"xs\" + l] += s + (sfx || \"\");\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.l++;\n\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\tpt[\"xs\" + pt.l] = sfx || \"\";\n\t\t\tif (l > 0) {\n\t\t\t\tpt.data[\"xn\" + l] = s + c;\n\t\t\t\tpt.rxp[\"xn\" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\tpt[\"xn\" + l] = s;\n\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \"xn\" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \"\" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.data = {s:s + c};\n\t\t\tpt.rxp = {};\n\t\t\tpt.s = s;\n\t\t\tpt.c = c;\n\t\t\tpt.r = r;\n\t\t\treturn pt;\n\t\t};\n\n\t\t/**\n\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\"5px 10px 15px rgb(255, 102, 51)\" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \"boxShadow\" or \"throwProps\" or \"bezier\" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t * @param {!string} p Property name (like \"boxShadow\" or \"throwProps\")\n\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t *                      - defaultValue: the default value\n\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \"5px 5px red\" and format it to \"5px 5px 0px 0px red\" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \"5px\" would apply to all, \"5px, 10px\" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \"inset\" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t */\n\t\tvar SpecialProp = function(p, options) {\n\t\t\t\toptions = options || {};\n\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\tif (options.parser) {\n\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t}\n\t\t\t\tthis.clrs = options.color;\n\t\t\t\tthis.multi = options.multi;\n\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t},\n\n\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\tif (typeof(options) !== \"object\") {\n\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t}\n\t\t\t\tvar a = p.split(\",\"),\n\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\ti, temp;\n\t\t\t\tdefaults = defaults || [d];\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \"Plugin\";\n\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t_log(\"Error: \" + pluginName + \" js file not loaded.\");\n\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t};\n\n\n\t\tp = SpecialProp.prototype;\n\n\t\t/**\n\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \"inset\" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t * @param {!Object} t target element\n\t\t * @param {(string|number|object)} b beginning value\n\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t */\n\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\tvar kwd = this.keyword,\n\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \"inset\" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\tba = b.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\tea = e.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t} else if (kwd) {\n\t\t\t\tba = [b];\n\t\t\t\tea = [e];\n\t\t\t}\n\t\t\tif (ea) {\n\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\"\");\n\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\tba[i] += \" \" + kwd;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tb = ba.join(\", \");\n\t\t\t\te = ea.join(\", \");\n\t\t\t}\n\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t};\n\n\t\t/**\n\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t * this._firstPT = sp.parse(element, \"5px 10px 20px rgb(2550,102,51)\", \"boxShadow\", this);\n\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t * @param {!string} p Property name\n\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t */\n\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t};\n\n\t\t/**\n\t\t * Registers a special property that should be intercepted from any \"css\" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t *\n\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \"ratio\" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t *\n\t\t * CSSPlugin.registerSpecialProp(\"myCustomProp\", function(target, value, tween) {\n\t\t *      var start = target.style.width;\n\t\t *      return function(ratio) {\n\t\t *              target.style.width = (start + value * ratio) + \"px\";\n\t\t *              console.log(\"set width to \" + target.style.width);\n\t\t *          }\n\t\t * }, 0);\n\t\t *\n\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t *\n\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t *\n\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t *\n\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \"myCustomProp\", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \"change factor\" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t */\n\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\trv.plugin = plugin;\n\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\treturn rv;\n\t\t\t}, priority:priority});\n\t\t};\n\n\n\n\n\n\n\t\t//transform-related methods and properties\n\t\tCSSPlugin.useSVGTransformAttr = _isSafari || _isFirefox; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \"transform\" attribute instead (users can override this).\n\t\tvar _transformProps = (\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\").split(\",\"),\n\t\t\t_transformProp = _checkPropPrefix(\"transform\"), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t_transformPropCSS = _prefixCSS + \"transform\",\n\t\t\t_transformOriginProp = _checkPropPrefix(\"transformOrigin\"),\n\t\t\t_supports3D = (_checkPropPrefix(\"perspective\") !== null),\n\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \"auto\";\n\t\t\t},\n\t\t\t_SVGElement = window.SVGElement,\n\t\t\t_useSVGTransformAttr,\n\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\n\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\tvar element = _doc.createElementNS(\"http://www.w3.org/2000/svg\", type),\n\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in attributes) {\n\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \"$1-$2\").toLowerCase(), attributes[p]);\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(element);\n\t\t\t\treturn element;\n\t\t\t},\n\t\t\t_docElement = _doc.documentElement,\n\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \"transform\" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !window.chrome),\n\t\t\t\t\tsvg, rect, width;\n\t\t\t\tif (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\tsvg = _createSVG(\"svg\", _docElement);\n\t\t\t\t\trect = _createSVG(\"rect\", svg, {width:100, height:50, x:100});\n\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\trect.style[_transformOriginProp] = \"50% 50%\";\n\t\t\t\t\trect.style[_transformProp] = \"scaleX(0.5)\";\n\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t}\n\t\t\t\treturn force;\n\t\t\t})(),\n\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\tif (tm) {\n\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t}\n\t\t\t\tif (!absolute || (v = absolute.split(\" \")).length < 2) {\n\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\tlocal = _parsePosition(local).split(\" \");\n\t\t\t\t\tv = [(local[0].indexOf(\"%\") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t (local[1].indexOf(\"%\") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t}\n\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\ta = m[0];\n\t\t\t\t\tb = m[1];\n\t\t\t\t\tc = m[2];\n\t\t\t\t\td = m[3];\n\t\t\t\t\ttx = m[4];\n\t\t\t\t\tty = m[5];\n\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t}\n\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t}\n\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipRecord) {\n\t\t\t\t\te.setAttribute(\"data-svg-origin\", v.join(\" \"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_canGetBBox = function(e) {\n\t\t\t\ttry {\n\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t} catch (e) {}\n\t\t\t},\n\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\treturn !!(_SVGElement && e.getBBox && e.getCTM && _canGetBBox(e) && (!e.parentNode || (e.parentNode.getBBox && e.parentNode.getCTM)));\n\t\t\t},\n\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tstyle = e.style,\n\t\t\t\t\tisDefault, s, m, n, dec, none;\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\",\") : \"\";\n\t\t\t\t}\n\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\tif (isDefault && _transformProp && ((none = (_getComputedStyle(e).display === \"none\")) || !e.parentNode)) {\n\t\t\t\t\tif (none) { //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\".\n\t\t\t\t\t\tn = style.display;\n\t\t\t\t\t\tstyle.display = \"block\";\n\t\t\t\t\t}\n\t\t\t\t\tif (!e.parentNode) {\n\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\t_docElement.appendChild(e);\n\t\t\t\t\t}\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t} else if (none) {\n\t\t\t\t\t\t_removeProp(style, \"display\");\n\t\t\t\t\t}\n\t\t\t\t\tif (dec) {\n\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm.svg || (e.getBBox && _isSVG(e))) {\n\t\t\t\t\tif (isDefault && (style[_transformProp] + \"\").indexOf(\"matrix\") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t\tm = e.getAttribute(\"transform\");\n\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\tif (m.indexOf(\"matrix\") !== -1) { //just in case there's a \"transform\" value specified as an attribute instead of CSS style. Accept either a matrix() or simple translate() value though.\n\t\t\t\t\t\t\ts = m;\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t} else if (m.indexOf(\"translate\") !== -1) {\n\t\t\t\t\t\t\ts = \"matrix(1,0,0,1,\" + m.match(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/gi).join(\",\") + \")\";\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isDefault) {\n\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t}\n\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\tm = (s || \"\").match(_numExp) || [];\n\t\t\t\ti = m.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t}\n\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t */\n\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t}\n\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \"0 0 0\").split(\" \")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\n\t\t\t\ttm.svg = !!(t.getBBox && _isSVG(t));\n\t\t\t\tif (tm.svg) {\n\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \"50% 50%\") + \"\", tm, t.getAttribute(\"data-svg-origin\"));\n\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t}\n\t\t\t\tm = _getMatrix(t);\n\t\t\t\tif (m !== _identity2DMatrix) {\n\n\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\n\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\ta11 = a11*cos+a12*sin;\n\t\t\t\t\t\t\tt2 = a21*cos+a22*sin;\n\t\t\t\t\t\t\ta22 = a21*-sin+a22*cos;\n\t\t\t\t\t\t\ta32 = a31*-sin+a32*cos;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\tif (tm.rotationX || tm.rotationY) {\n\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.skewX = (a12 || a22) ? Math.atan2(a12, a22) * _RAD2DEG + tm.rotation : tm.skewX || 0;\n\t\t\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \"display\" is \"none\", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\tif (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\tscaleX *= -1;\n\t\t\t\t\t\t\t\tskewX += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\trotation += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscaleY *= -1;\n\t\t\t\t\t\t\t\tskewX += (skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//DEBUG: _log(\"parsed rotation of \" + t.getAttribute(\"id\")+\": \"+(tm.rotationX)+\", \"+(tm.rotationY)+\", \"+(tm.rotation)+\", scale: \"+tm.scaleX+\", \"+tm.scaleY+\", \"+tm.scaleZ+\", position: \"+tm.x+\", \"+tm.y+\", \"+tm.z+\", perspective: \"+tm.perspective+ \", origin: \"+ tm.xOrigin+ \",\"+ tm.yOrigin);\n\t\t\t\tif (rec) {\n\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \"transform\" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\"transform\")) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\tt.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn tm;\n\t\t\t},\n\n\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \"filter\" to emulate the behavior of modern day browser transforms)\n\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\tfilters, val;\n\t\t\t\tif (!cs) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \"val\" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\tb = -c;\n\t\t\t\tc = -val;\n\t\t\t\tfilters = cs.filter;\n\t\t\t\tstyle.filter = \"\"; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\tclip = (cs.position !== \"absolute\"),\n\t\t\t\t\tm = \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + a + \", M12=\" + b + \", M21=\" + c + \", M22=\" + d,\n\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\tdx, dy;\n\n\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\tif (t.ox != null) {\n\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t}\n\n\t\t\t\tif (!clip) {\n\t\t\t\t\tm += \", sizingMethod='auto expand')\";\n\t\t\t\t} else {\n\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\tm += \", Dx=\" + (dx - (dx * a + dy * b) + ox) + \", Dy=\" + (dy - (dx * c + dy * d) + oy) + \")\";\n\t\t\t\t}\n\t\t\t\tif (filters.indexOf(\"DXImageTransform.Microsoft.Matrix(\") !== -1) {\n\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.filter = m + \" \" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t}\n\n\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\"Dx=0, Dy=0\") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\"gradient(\" && filters.indexOf(\"Alpha\")) === -1) {\n\t\t\t\t\tstyle.removeAttribute(\"filter\");\n\t\t\t\t}\n\n\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\tif (!clip) {\n\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\tval = (marg.indexOf(\"px\") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \"\")) || 0;\n\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t_safeDecimal = function(n) {\n\t\t\t\tvar s = (n < 0 ? -n : n) + \"\",\n\t\t\t\t\ta = s.split(\"e-\");\n\t\t\t\treturn (n < 0 ? \"-0.\" : \"0.\") + new Array(parseInt(a[1], 10) || 0).join(\"0\") + a[0].split(\".\").join(\"\");\n\t\t\t},\n\t\t\t*/\n\n\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\tx = t.x,\n\t\t\t\t\ty = t.y,\n\t\t\t\t\tz = t.z,\n\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\tzOrigin, min, cos, sin, t1, t2, transform, comma, zero, skew, rnd;\n\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\tif (((((v === 1 || v === 0) && force3D === \"auto\" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\n\t\t\t\t\t//2D\n\t\t\t\t\tif (angle || t.skewX || isSVG) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tskew = t.skewX * _DEG2RAD;\n\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\tif (skew && t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan(skew - t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \",\" + (((a21 * rnd) | 0) / rnd) + \",\" + (((a12 * rnd) | 0) / rnd) + \",\" + (((a22 * rnd) | 0) / rnd) + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\tthis.t.setAttribute(\"transform\", \"matrix(\" + transform);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + transform;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + sx + \",0,0,\" + sy + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (angle || t.skewX) {\n\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\tif (t.skewX) {\n\t\t\t\t\t\tangle -= t.skewX * _DEG2RAD;\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan((t.skewX - t.skewY) * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta12 = -sin;\n\t\t\t\t\ta22 = cos;\n\n\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) translate3d(\" : \"translate3d(\") + x + \"px,\" + y + \"px,\" + z +\"px)\" + ((sx !== 1 || sy !== 1) ? \" scale(\" + sx + \",\" + sy + \")\" : \"\");\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t}\n\t\t\t\t// KEY  INDEX   AFFECTS\n\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t// a44  15\n\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\ta33 = 1;\n\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\tcomma = \",\";\n\t\t\t\tzero = \"0\";\n\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\ta31 = -sin;\n\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\ta33 = cos;\n\t\t\t\t\ta43 *= cos;\n\t\t\t\t\ta11 *= cos;\n\t\t\t\t\ta21 *= cos;\n\t\t\t\t}\n\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\ta12 = t1;\n\t\t\t\t\ta22 = t2;\n\t\t\t\t}\n\t\t\t\tif (sz !== 1) {\n\t\t\t\t\ta13*=sz;\n\t\t\t\t\ta23*=sz;\n\t\t\t\t\ta33*=sz;\n\t\t\t\t\ta43*=sz;\n\t\t\t\t}\n\t\t\t\tif (sy !== 1) {\n\t\t\t\t\ta12*=sy;\n\t\t\t\t\ta22*=sy;\n\t\t\t\t\ta32*=sy;\n\t\t\t\t\ta42*=sy;\n\t\t\t\t}\n\t\t\t\tif (sx !== 1) {\n\t\t\t\t\ta11*=sx;\n\t\t\t\t\ta21*=sx;\n\t\t\t\t\ta31*=sx;\n\t\t\t\t\ta41*=sx;\n\t\t\t\t}\n\n\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\tx = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\ty = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix3d(\" : \"matrix3d(\");\n\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t} else {\n\t\t\t\t\ttransform += \",0,0,0,0,1,0,\";\n\t\t\t\t}\n\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \")\";\n\n\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t};\n\n\t\tp = Transform.prototype;\n\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\n\t\t_registerComplexSpecialProp(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\tcssp._lastParsedTransform = vars;\n\t\t\tvar swapFunc;\n\t\t\tif (typeof(vars[parsingProp]) === \"function\") { //whatever property triggers the initial parsing might be a function-based value in which case it already got called in parse(), thus we don't want to call it again in here. The most efficient way to avoid this is to temporarily swap the value directly into the vars object, and then after we do all our parsing in this function, we'll swap it back again.\n\t\t\t\tswapFunc = vars[parsingProp];\n\t\t\t\tvars[parsingProp] = e;\n\t\t\t}\n\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\tstyle = t.style,\n\t\t\t\tmin = 0.000001,\n\t\t\t\ti = _transformProps.length,\n\t\t\t\tv = vars,\n\t\t\t\tendRotations = {},\n\t\t\t\ttransformOriginString = \"transformOrigin\",\n\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\torig = v.transform && ((typeof(v.transform) === \"function\") ? v.transform(_index, _target) : v.transform),\n\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\tcssp._transform = m1;\n\t\t\tif (orig && typeof(orig) === \"string\" && _transformProp) { //for values like transform:\"rotate(60deg) scale(0.5, 0.8)\"\n\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\tcopy.display = \"block\"; //if display is \"none\", the browser often refuses to report the transform properties correctly.\n\t\t\t\tcopy.position = \"absolute\";\n\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t}\n\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t}\n\t\t\t} else if (typeof(v) === \"object\") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\tdr = v.directionalRotation;\n\t\t\t\tif (dr != null) {\n\t\t\t\t\tif (typeof(dr) === \"object\") {\n\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(v.x) === \"string\" && v.x.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.x = 0;\n\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (typeof(v.y) === \"string\" && v.y.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.y = 0;\n\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t}\n\n\t\t\t\tm2.rotation = _parseAngle((\"rotation\" in v) ? v.rotation : (\"shortRotation\" in v) ? v.shortRotation + \"_short\" : (\"rotationZ\" in v) ? v.rotationZ : m1.rotation - m1.skewY, m1.rotation - m1.skewY, \"rotation\", endRotations); //see notes below about skewY for why we subtract it from rotation here\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\tm2.rotationX = _parseAngle((\"rotationX\" in v) ? v.rotationX : (\"shortRotationX\" in v) ? v.shortRotationX + \"_short\" : m1.rotationX || 0, m1.rotationX, \"rotationX\", endRotations);\n\t\t\t\t\tm2.rotationY = _parseAngle((\"rotationY\" in v) ? v.rotationY : (\"shortRotationY\" in v) ? v.shortRotationY + \"_short\" : m1.rotationY || 0, m1.rotationY, \"rotationY\", endRotations);\n\t\t\t\t}\n\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX - m1.skewY); //see notes below about skewY and why we subtract it from skewX here\n\n\t\t\t\t//note: for performance reasons, we combine all skewing into the skewX and rotation values, ignoring skewY but we must still record it so that we can discern how much of the overall skew is attributed to skewX vs. skewY. Otherwise, if the skewY would always act relative (tween skewY to 10deg, for example, multiple times and if we always combine things into skewX, we can't remember that skewY was 10 from last time). Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of -10 degrees.\n\t\t\t\tif ((m2.skewY = _parseAngle(v.skewY, m1.skewY))) {\n\t\t\t\t\tm2.skewX += m2.skewY;\n\t\t\t\t\tm2.rotation += m2.skewY;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\thasChange = true;\n\t\t\t}\n\n\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\n\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t}\n\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = _transformProps[i];\n\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t}\n\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torig = v.transformOrigin;\n\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\ty = m1.yOffset;\n\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOrigin\", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\"#wheel\", 3, {rotation:180, transformOrigin:\"50% 50%\", delay:1}); TweenLite.fromTo(\"#wheel\", 3, {scale:0.5, transformOrigin:\"50% 50%\"}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOrigin\", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOffset\", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOffset\", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t}\n\t\t\t\torig = _useSVGTransformAttr ? null : \"0px 0px\"; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t}\n\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \"transformOrigin\" in this particular tween (maybe they did it via css directly).\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\torig = (orig || _getStyle(t, p, _cs, false, \"50% 50%\")) + \"\"; //cast as string to avoid errors\n\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\torig = orig.split(\" \");\n\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === \"0px\")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \" \" + (orig[1] || \"50%\") + \" 0px\"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\tpt = new CSSPropTween(m1, \"zOrigin\", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t}\n\n\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t} else {\n\t\t\t\t\t_parsePosition(orig + \"\", m1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasChange) {\n\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t}\n\t\t\tif (swapFunc) {\n\t\t\t\tvars[parsingProp] = swapFunc;\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true});\n\n\t\t_registerComplexSpecialProp(\"boxShadow\", {defaultValue:\"0px 0px 0px 0px #999\", prefix:true, color:true, multi:true, keyword:\"inset\"});\n\n\t\t_registerComplexSpecialProp(\"borderRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\te = this.format(e);\n\t\t\tvar props = [\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],\n\t\t\t\tstyle = t.style,\n\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\th = parseFloat(t.offsetHeight);\n\t\t\tea1 = e.split(\" \");\n\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\tif (this.p.indexOf(\"border\")) { //older browsers used a prefix\n\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t}\n\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \"0px\");\n\t\t\t\tif (bs.indexOf(\" \") !== -1) {\n\t\t\t\t\tbs2 = bs.split(\" \");\n\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t}\n\t\t\t\tes = es2 = ea1[i];\n\t\t\t\tbn = parseFloat(bs);\n\t\t\t\tbsfx = bs.substr((bn + \"\").length);\n\t\t\t\trel = (es.charAt(1) === \"=\");\n\t\t\t\tif (rel) {\n\t\t\t\t\ten = parseInt(es.charAt(0)+\"1\", 10);\n\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length - (en < 0 ? 1 : 0)) || \"\";\n\t\t\t\t} else {\n\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length);\n\t\t\t\t}\n\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t}\n\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\thn = _convertToPixels(t, \"borderLeft\", bn, bsfx); //horizontal number (we use a bogus \"borderLeft\" property just because the _convertToPixels() method searches for the keywords \"Left\", \"Right\", \"Top\", and \"Bottom\" to determine of it's a horizontal or vertical property, and we need \"border\" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\tvn = _convertToPixels(t, \"borderTop\", bn, bsfx); //vertical number\n\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\tbs = (hn / w * 100) + \"%\";\n\t\t\t\t\t\tbs2 = (vn / h * 100) + \"%\";\n\t\t\t\t\t} else if (esfx === \"em\") {\n\t\t\t\t\t\tem = _convertToPixels(t, \"borderLeft\", 1, \"em\");\n\t\t\t\t\t\tbs = (hn / em) + \"em\";\n\t\t\t\t\t\tbs2 = (vn / em) + \"em\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = hn + \"px\";\n\t\t\t\t\t\tbs2 = vn + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = _parseComplex(style, props[i], bs + \" \" + bs2, es + \" \" + es2, false, \"0px\", pt);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px 0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \"0px 0px\")), this.format(e), false, \"0px\", pt);\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"backgroundPosition\", {defaultValue:\"0 0\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bp = \"background-position\",\n\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \"-x\") + \" \" + cs.getPropertyValue(bp + \"-y\") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \" \" + t.currentStyle.backgroundPositionY) || \"0 0\"), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\tes = this.format(e),\n\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\tif ((bs.indexOf(\"%\") !== -1) !== (es.indexOf(\"%\") !== -1) && es.split(\",\").length < 2) {\n\t\t\t\tsrc = _getStyle(t, \"backgroundImage\").replace(_urlExp, \"\");\n\t\t\t\tif (src && src !== \"none\") {\n\t\t\t\t\tba = bs.split(\" \");\n\t\t\t\t\tea = es.split(\" \");\n\t\t\t\t\t_tempImg.setAttribute(\"src\", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\ti = 2;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\tpct = (bs.indexOf(\"%\") !== -1);\n\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\"%\") !== -1)) {\n\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \"px\" : (parseFloat(bs) / overlap * 100) + \"%\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbs = ba.join(\" \");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t}, formatter:_parsePosition});\n\t\t_registerComplexSpecialProp(\"backgroundSize\", {defaultValue:\"0 0\", formatter:function(v) {\n\t\t\tv += \"\"; //ensure it's a string\n\t\t\treturn _parsePosition(v.indexOf(\" \") === -1 ? v + \" \" + v : v); //if set to something like \"100% 100%\", Safari typically reports the computed style as just \"100%\" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \"100% 0\" (wrong).\n\t\t}});\n\t\t_registerComplexSpecialProp(\"perspective\", {defaultValue:\"0px\", prefix:true});\n\t\t_registerComplexSpecialProp(\"perspectiveOrigin\", {defaultValue:\"50% 50%\", prefix:true});\n\t\t_registerComplexSpecialProp(\"transformStyle\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"backfaceVisibility\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"userSelect\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"margin\", {parser:_getEdgeParser(\"marginTop,marginRight,marginBottom,marginLeft\")});\n\t\t_registerComplexSpecialProp(\"padding\", {parser:_getEdgeParser(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")});\n\t\t_registerComplexSpecialProp(\"clip\", {defaultValue:\"rect(0px,0px,0px,0px)\", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\tvar b, cs, delim;\n\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \"clip\" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\tcs = t.currentStyle;\n\t\t\t\tdelim = _ieVers < 8 ? \" \" : \",\";\n\t\t\t\tb = \"rect(\" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \")\";\n\t\t\t\te = this.format(e).split(\",\").join(delim);\n\t\t\t} else {\n\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\te = this.format(e);\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t}});\n\t\t_registerComplexSpecialProp(\"textShadow\", {defaultValue:\"0px 0px 0px #999\", color:true, multi:true});\n\t\t_registerComplexSpecialProp(\"autoRound,strictUnits\", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t_registerComplexSpecialProp(\"border\", {defaultValue:\"0px solid #000\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bw = _getStyle(t, \"borderTopWidth\", _cs, false, \"0px\"),\n\t\t\t\tend = this.format(e).split(\" \"),\n\t\t\t\tesfx = end[0].replace(_suffixExp, \"\");\n\t\t\tif (esfx !== \"px\") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \"borderTopWidth\", 1, esfx)) + esfx;\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, this.format(bw + \" \" + _getStyle(t, \"borderTopStyle\", _cs, false, \"solid\") + \" \" + _getStyle(t, \"borderTopColor\", _cs, false, \"#000\")), end.join(\" \"), pt, plugin);\n\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\tvar a = v.split(\" \");\n\t\t\t\treturn a[0] + \" \" + (a[1] || \"solid\") + \" \" + (v.match(_colorExp) || [\"#000\"])[0];\n\t\t\t}});\n\t\t_registerComplexSpecialProp(\"borderWidth\", {parser:_getEdgeParser(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t_registerComplexSpecialProp(\"float,cssFloat,styleFloat\", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar s = t.style,\n\t\t\t\tprop = (\"cssFloat\" in s) ? \"cssFloat\" : \"styleFloat\";\n\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t}});\n\n\t\t//opacity-related\n\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \"filter\") || \"\",\n\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\tskip;\n\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\tif (filters.indexOf(\"atrix(\") === -1 && filters.indexOf(\"radient(\") === -1 && filters.indexOf(\"oader(\") === -1) {\n\t\t\t\t\t\tt.removeAttribute(\"filter\");\n\t\t\t\t\t\tskip = (!_getStyle(this.data, \"filter\")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \"\");\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skip) {\n\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\tt.filter = filters = filters || (\"alpha(opacity=\" + val + \")\"); //works around bug in IE7/8 that prevents changes to \"visibility\" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\"pacity\") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \"O\" to avoid case-sensitivity issues\n\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \"visibility\" changes (this.xn1 is 1 if this tween is an \"autoAlpha\" tween)\n\t\t\t\t\t\t\tt.filter = filters + \" alpha(opacity=\" + val + \")\"; //we round the value because otherwise, bugs in IE7/8 can prevent \"visibility\" changes from being applied properly.\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \"opacity=\" + val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"opacity,alpha,autoAlpha\", {defaultValue:\"1\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar b = parseFloat(_getStyle(t, \"opacity\", _cs, false, \"1\")),\n\t\t\t\tstyle = t.style,\n\t\t\t\tisAutoAlpha = (p === \"autoAlpha\");\n\t\t\tif (typeof(e) === \"string\" && e.charAt(1) === \"=\") {\n\t\t\t\te = ((e.charAt(0) === \"-\") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t}\n\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \"visibility\", _cs) === \"hidden\" && e !== 0) { //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\tb = 0;\n\t\t\t}\n\t\t\tif (_supportsOpacity) {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b, e - b, pt);\n\t\t\t} else {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b * 100, (e - b) * 100, pt);\n\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \"visibility\" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\tpt.type = 2;\n\t\t\t\tpt.b = \"alpha(opacity=\" + pt.s + \")\";\n\t\t\t\tpt.e = \"alpha(opacity=\" + (pt.s + pt.c) + \")\";\n\t\t\t\tpt.data = t;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t}\n\t\t\tif (isAutoAlpha) { //we have to create the \"visibility\" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\tpt = new CSSPropTween(style, \"visibility\", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \"inherit\" : \"hidden\"), ((e === 0) ? \"hidden\" : \"inherit\"));\n\t\t\t\tpt.xs0 = \"inherit\";\n\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _removeProp = function(s, p) {\n\t\t\t\tif (p) {\n\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\tif (p.substr(0,2) === \"ms\" || p.substr(0,6) === \"webkit\") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n\t\t\t\t\t\t\tp = \"-\" + p;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t} else { //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", (v === 0) ? this.b : this.e);\n\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.t.getAttribute(\"class\") !== this.e) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", this.e);\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"className\", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\tvar b = t.getAttribute(\"class\") || \"\", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\"class\") and setAttribute(\"class\", value\") is more reliable.\n\t\t\t\tcssText = t.style.cssText,\n\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\tpt.pr = -11;\n\t\t\t_hasPriority = true;\n\t\t\tpt.b = b;\n\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\tcnpt = t._gsClassPT;\n\t\t\tif (cnpt) {\n\t\t\t\tcnptLookup = {};\n\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tcnpt.setRatio(1);\n\t\t\t}\n\t\t\tt._gsClassPT = pt;\n\t\t\tpt.e = (e.charAt(1) !== \"=\") ? e : b.replace(new RegExp(\"(?:\\\\s|^)\" + e.substr(2) + \"(?![\\\\w-])\"), \"\") + ((e.charAt(0) === \"+\") ? \" \" + e.substr(2) : \"\");\n\t\t\tt.setAttribute(\"class\", pt.e);\n\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\tt.setAttribute(\"class\", b);\n\t\t\tpt.data = difData.firstMPT;\n\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \"className\" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _setClearPropsRatio = function(v) {\n\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \"isFromStart\") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\tvar s = this.t.style,\n\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\tif (this.e === \"all\") {\n\t\t\t\t\ts.cssText = \"\";\n\t\t\t\t\tclearTransform = true;\n\t\t\t\t} else {\n\t\t\t\t\ta = this.e.split(\" \").join(\"\").split(\",\");\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = (p === \"transformOrigin\") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \"scaleX\" might be \"-webkit-transform\" or \"boxShadow\" might be \"-moz-box-shadow\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (clearTransform) {\n\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"data-svg-origin\");\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"transform\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\t_registerComplexSpecialProp(\"clearProps\", {parser:function(t, e, p, cssp, pt) {\n\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\tpt.e = e;\n\t\t\tpt.pr = -10;\n\t\t\tpt.data = cssp._tween;\n\t\t\t_hasPriority = true;\n\t\t\treturn pt;\n\t\t}});\n\n\t\tp = \"bezier,throwProps,physicsProps,physics2D\".split(\",\");\n\t\ti = p.length;\n\t\twhile (i--) {\n\t\t\t_registerPluginProp(p[i]);\n\t\t}\n\n\n\n\n\n\n\n\n\t\tp = CSSPlugin.prototype;\n\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\n\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._target = _target = target;\n\t\t\tthis._tween = tween;\n\t\t\tthis._vars = vars;\n\t\t\t_index = index;\n\t\t\t_autoRound = vars.autoRound;\n\t\t\t_hasPriority = false;\n\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t_cs = _getComputedStyle(target, \"\");\n\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\tvar style = target.style,\n\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\tif (_reqSafariFix) if (style.zIndex === \"\") {\n\t\t\t\tv = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\tif (v === \"auto\" || v === \"\") {\n\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \"left\" or \"top\" instead of transforms like \"x\" and \"y\") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof(vars) === \"string\") {\n\t\t\t\tfirst = style.cssText;\n\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\tstyle.cssText = first + \";\" + vars;\n\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tvars = v;\n\t\t\t\tstyle.cssText = first;\n\t\t\t}\n\n\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\"myClass\", scale:0.5, left:20} would work.\n\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \"className\", this, null, null, vars);\n\t\t\t} else {\n\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t}\n\n\t\t\tif (this._transformType) {\n\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\tif (!_transformProp) {\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\tif (style.zIndex === \"\") {\n\t\t\t\t\t\tzIndex = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\t\tif (zIndex === \"auto\" || zIndex === \"\") {\n\t\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \"top\" and \"left\" that are made on the same frame/render as a transform update.\n\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\tthis._addLazySet(style, \"WebkitBackfaceVisibility\", this._vars.WebkitBackfaceVisibility || (threeD ? \"visible\" : \"hidden\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt2 = pt;\n\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t}\n\t\t\t\ttpt = new CSSPropTween(target, \"transform\", 0, 0, null, 2);\n\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\ttpt.tween = tween;\n\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \"transform\" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t}\n\n\t\t\tif (_hasPriority) {\n\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tthis._firstPT = first;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\n\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\tvar style = target.style,\n\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\tfor (p in vars) {\n\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\tif (typeof(es) === \"function\") {\n\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t}\n\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\tif (sp) {\n\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\n\t\t\t\t} else {\n\t\t\t\t\tbs = _getStyle(target, p, _cs) + \"\";\n\t\t\t\t\tisStr = (typeof(es) === \"string\");\n\t\t\t\t\tif (p === \"color\" || p === \"fill\" || p === \"stroke\" || p.indexOf(\"Color\") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\tes = ((es.length > 3) ? \"rgba(\" : \"rgb(\") + es.join(\",\") + \")\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \"transparent\", pt, 0, plugin);\n\n\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \"\").length) : \"\"; //remember, bs could be non-numeric like \"normal\" for fontWeight, so we should default to a blank suffix in that case.\n\n\t\t\t\t\t\tif (bs === \"\" || bs === \"auto\") {\n\t\t\t\t\t\t\tif (p === \"width\" || p === \"height\") {\n\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else if (p === \"left\" || p === \"top\") {\n\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbn = (p !== \"opacity\") ? 0 : 1;\n\t\t\t\t\t\t\t\tbsfx = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trel = (isStr && es.charAt(1) === \"=\");\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \"1\", 10);\n\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \"\") : \"\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\n\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \"\") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \"%\") / 100;\n\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \"px\" values instead of allowing \"%\" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\tbs = bn + \"%\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if (esfx === \"em\" || esfx === \"rem\" || esfx === \"vw\" || esfx === \"vh\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\n\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t} else if (esfx !== \"px\") {\n\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\tesfx = \"px\"; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \"px\" || p === \"zIndex\")), 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t//DEBUG: _log(\"tween \"+p+\" from \"+pt.b+\" (\"+bn+esfx+\") to \"+pt.e+\" with suffix: \"+pt.xs0);\n\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \"\" === \"NaN\" || es == null)) {\n\t\t\t\t\t\t\t_log(\"invalid \" + p + \" tween value: \" + vars[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = (es === \"none\" && (p === \"display\" || p.indexOf(\"Style\") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \"display\" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t//DEBUG: _log(\"non-tweening value \"+p+\": \"+pt.xs0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\n\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\tp.setRatio = function(v) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tval, str, i;\n\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \"position\" or \"float\" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\tval = Math.round(pt.s + pt.c);\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\n\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t} else {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * @private\n\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t *\n\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t */\n\t\tp._enableTransforms = function(threeD) {\n\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t};\n\n\t\tvar lazySet = function(v) {\n\t\t\tthis.t[this.p] = this.e;\n\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t};\n\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\tp._addLazySet = function(t, p, v) {\n\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\tpt.e = v;\n\t\t\tpt.setRatio = lazySet;\n\t\t\tpt.data = this;\n\t\t};\n\n\t\t/** @private **/\n\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\tif (pt) {\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = pt;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t}\n\t\t\t\tif (pt._prev) {\n\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t}\n\t\t\t\tif (prev) {\n\t\t\t\t\tprev._next = pt;\n\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t}\n\t\t\t\tpt._next = next;\n\t\t\t\tpt._prev = prev;\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar pt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (typeof(lookup[pt.p]) === \"function\" && lookup[pt.p] === Math.round) { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \"r\" as an indicator that the value should be rounded internally..\n\t\t\t\t\tpt.r = 1;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \"visibility\" property.\n\t\tp._kill = function(lookup) {\n\t\t\tvar copy = lookup,\n\t\t\t\tpt, p, xfirst;\n\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t}\n\t\t\t\tcopy.opacity = 1;\n\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \"xfirst\".\n\t\t\t\txfirst = pt.xfirst;\n\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t}\n\t\t\t\tthis._classNamePT = null;\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\tp = pt.plugin;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t};\n\n\n\n\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\tvar children, i, child, type;\n\t\t\t\tif (e.slice) {\n\t\t\t\t\ti = e.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchildren = e.childNodes;\n\t\t\t\ti = children.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\ttype = child.type;\n\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t/**\n\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t * and it would create other problems. For example:\n\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t *\n\t\t * @param {Object} target object to be tweened\n\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t * @param {Object} Object containing the end values, like {className:\"newClass\", ease:Linear.easeNone}\n\t\t * @return {Array} An array of TweenLite instances\n\t\t */\n\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\tresults = [tween],\n\t\t\t\tb = [],\n\t\t\t\te = [],\n\t\t\t\ttargets = [],\n\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\ti, difs, p, from;\n\t\t\ttarget = tween._targets || tween.target;\n\t\t\t_getChildStyles(target, b, targets);\n\t\t\ttween.render(duration, true, true);\n\t\t\t_getChildStyles(target, e);\n\t\t\ttween.render(0, true, true);\n\t\t\ttween._enabled(true);\n\t\t\ti = targets.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfrom = {};\n\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t}\n\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t\tTweenPlugin.activate([CSSPlugin]);\n\t\treturn CSSPlugin;\n\n\t}, true);\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * RoundPropsPlugin\n * ----------------------------------------------------------------\n */\n\t(function() {\n\n\t\tvar RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"roundProps\",\n\t\t\t\tversion: \"1.6.0\",\n\t\t\t\tpriority: -1,\n\t\t\t\tAPI: 2,\n\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}),\n\t\t\t_roundLinkedList = function(node) {\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\tnode.m = Math.round;\n\t\t\t\t\t}\n\t\t\t\t\tnode = node._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\tp = RoundPropsPlugin.prototype;\n\n\t\tp._onInitAllProps = function() {\n\t\t\tvar tween = this._tween,\n\t\t\t\trp = (tween.vars.roundProps.join) ? tween.vars.roundProps : tween.vars.roundProps.split(\",\"),\n\t\t\t\ti = rp.length,\n\t\t\t\tlookup = {},\n\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\tprop, pt, next;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t}\n\t\t\ti = rp.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tprop = rp[i];\n\t\t\t\tpt = tween._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t} else if (pt.n === prop) {\n\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._add(pt.t, prop, pt.s, pt.c);\n\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\ttween._propLookup[prop] = rpt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._add = function(target, p, s, c) {\n\t\t\tthis._addTween(target, p, s, s + c, p, Math.round);\n\t\t\tthis._overwriteProps.push(p);\n\t\t};\n\n\t}());\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * AttrPlugin\n * ----------------------------------------------------------------\n */\n\n\t(function() {\n\n\t\t_gsScope._gsDefine.plugin({\n\t\t\tpropName: \"attr\",\n\t\t\tAPI: 2,\n\t\t\tversion: \"0.6.0\",\n\n\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\tvar p, end;\n\t\t\t\tif (typeof(target.setAttribute) !== \"function\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (p in value) {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tthis._addTween(target, \"setAttribute\", target.getAttribute(p) + \"\", end + \"\", p, false, p);\n\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t});\n\n\t}());\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * DirectionalRotationPlugin\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine.plugin({\n\t\tpropName: \"directionalRotation\",\n\t\tversion: \"0.3.0\",\n\t\tAPI: 2,\n\n\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\tinit: function(target, value, tween, index) {\n\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\tvalue = {rotation:value};\n\t\t\t}\n\t\t\tthis.finals = {};\n\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tp, v, start, end, dif, split;\n\t\t\tfor (p in value) {\n\t\t\t\tif (p !== \"useRadians\") {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tsplit = (end + \"\").split(\"_\");\n\t\t\t\t\tv = split[0];\n\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \"function\") ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]() );\n\t\t\t\t\tend = this.finals[p] = (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? start + parseInt(v.charAt(0) + \"1\", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\tdif = end - start;\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tv = split.join(\"_\");\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\tset: function(ratio) {\n\t\t\tvar pt;\n\t\t\tif (ratio !== 1) {\n\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t} else {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t})._autoCSS = true;\n\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * EasePack\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"easing.Back\", [\"easing.Ease\"], function(Ease) {\n\t\t\n\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\tgs = w.com.greensock,\n\t\t\t_2PI = Math.PI * 2,\n\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t_class = gs._class,\n\t\t\t_create = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(){}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\tvar C = _class(\"easing.\"+name, {\n\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t}, true);\n\t\t\t\t_easeReg(C, name);\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\tthis.t = time;\n\t\t\t\tthis.v = value;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis.next = next;\n\t\t\t\t\tnext.prev = this;\n\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//Back\n\t\t\t_createBack = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(overshoot) {\n\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t},\n\n\t\t\tBack = _wrap(\"Back\",\n\t\t\t\t_createBack(\"BackOut\", function(p) {\n\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackIn\", function(p) {\n\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t})\n\t\t\t),\n\n\n\t\t\t//SlowMo\n\t\t\tSlowMo = _class(\"easing.SlowMo\", function(linearRatio, power, yoyoMode) {\n\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t}\n\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t}, true),\n\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\tSteppedEase, RoughEase, _createElastic;\n\n\t\tp.constructor = SlowMo;\n\t\tp.getRatio = function(p) {\n\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\tif (p < this._p1) {\n\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t} else if (p > this._p3) {\n\t\t\t\treturn this._calcEnd ? 1 - (p = (p - this._p3) / this._p1) * p : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p);\n\t\t\t}\n\t\t\treturn this._calcEnd ? 1 : r;\n\t\t};\n\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\n\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t};\n\n\n\t\t//SteppedEase\n\t\tSteppedEase = _class(\"easing.SteppedEase\", function(steps) {\n\t\t\t\tsteps = steps || 1;\n\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\tthis._p2 = steps + 1;\n\t\t\t}, true);\n\t\tp = SteppedEase.prototype = new Ease();\n\t\tp.constructor = SteppedEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (p < 0) {\n\t\t\t\tp = 0;\n\t\t\t} else if (p >= 1) {\n\t\t\t\tp = 0.999999999;\n\t\t\t}\n\t\t\treturn ((this._p2 * p) >> 0) * this._p1;\n\t\t};\n\t\tp.config = SteppedEase.config = function(steps) {\n\t\t\treturn new SteppedEase(steps);\n\t\t};\n\n\n\t\t//RoughEase\n\t\tRoughEase = _class(\"easing.RoughEase\", function(vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar taper = vars.taper || \"none\",\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\ti = points,\n\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\tstrength = (typeof(vars.strength) === \"number\") ? vars.strength * 0.4 : 0.4,\n\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\twhile (--i > -1) {\n\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\tif (taper === \"none\") {\n\t\t\t\t\tbump = strength;\n\t\t\t\t} else if (taper === \"out\") {\n\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t} else if (taper === \"in\") {\n\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t} else if (x < 0.5) {  //\"both\" (start)\n\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t} else {\t\t\t\t//\"both\" (end)\n\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t}\n\t\t\t\tif (randomize) {\n\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t} else if (i % 2) {\n\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t} else {\n\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t}\n\t\t\t\tif (clamp) {\n\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\ty = 1;\n\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t}\n\t\t\ta.sort(function(a, b) {\n\t\t\t\treturn a.x - b.x;\n\t\t\t});\n\n\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\ti = points;\n\t\t\twhile (--i > -1) {\n\t\t\t\tobj = a[i];\n\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t}\n\n\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t}, true);\n\t\tp = RoughEase.prototype = new Ease();\n\t\tp.constructor = RoughEase;\n\t\tp.getRatio = function(p) {\n\t\t\tvar pnt = this._prev;\n\t\t\tif (p > pnt.t) {\n\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t}\n\t\t\t\tpnt = pnt.prev;\n\t\t\t} else {\n\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._prev = pnt;\n\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t};\n\t\tp.config = function(vars) {\n\t\t\treturn new RoughEase(vars);\n\t\t};\n\t\tRoughEase.ease = new RoughEase();\n\n\n\t\t//Bounce\n\t\t_wrap(\"Bounce\",\n\t\t\t_create(\"BounceOut\", function(p) {\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t}\n\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t}),\n\t\t\t_create(\"BounceIn\", function(p) {\n\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t}\n\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t}),\n\t\t\t_create(\"BounceInOut\", function(p) {\n\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\tif (invert) {\n\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t} else {\n\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t}\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}\n\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t})\n\t\t);\n\n\n\t\t//CIRC\n\t\t_wrap(\"Circ\",\n\t\t\t_create(\"CircOut\", function(p) {\n\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t}),\n\t\t\t_create(\"CircIn\", function(p) {\n\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t}),\n\t\t\t_create(\"CircInOut\", function(p) {\n\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t})\n\t\t);\n\n\n\t\t//Elastic\n\t\t_createElastic = function(n, f, def) {\n\t\t\tvar C = _class(\"easing.\" + n, function(amplitude, period) {\n\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t}, true),\n\t\t\t\tp = C.prototype = new Ease();\n\t\t\tp.constructor = C;\n\t\t\tp.getRatio = f;\n\t\t\tp.config = function(amplitude, period) {\n\t\t\t\treturn new C(amplitude, period);\n\t\t\t};\n\t\t\treturn C;\n\t\t};\n\t\t_wrap(\"Elastic\",\n\t\t\t_createElastic(\"ElasticOut\", function(p) {\n\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticIn\", function(p) {\n\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t}, 0.45)\n\t\t);\n\n\n\t\t//Expo\n\t\t_wrap(\"Expo\",\n\t\t\t_create(\"ExpoOut\", function(p) {\n\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t}),\n\t\t\t_create(\"ExpoIn\", function(p) {\n\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t}),\n\t\t\t_create(\"ExpoInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t})\n\t\t);\n\n\n\t\t//Sine\n\t\t_wrap(\"Sine\",\n\t\t\t_create(\"SineOut\", function(p) {\n\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t}),\n\t\t\t_create(\"SineIn\", function(p) {\n\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t}),\n\t\t\t_create(\"SineInOut\", function(p) {\n\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t})\n\t\t);\n\n\t\t_class(\"easing.EaseLookup\", {\n\t\t\t\tfind:function(s) {\n\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t//register the non-standard eases\n\t\t_easeReg(w.SlowMo, \"SlowMo\", \"ease,\");\n\t\t_easeReg(RoughEase, \"RoughEase\", \"ease,\");\n\t\t_easeReg(SteppedEase, \"SteppedEase\", \"ease,\");\n\n\t\treturn Back;\n\t\t\n\t}, true);\n\n\n});\n\nif (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case TweenLite was already loaded separately.\n\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * Base classes like TweenLite, SimpleTimeline, Ease, Ticker, etc.\n * ----------------------------------------------------------------\n */\n(function(window, moduleName) {\n\n\t\t\"use strict\";\n\t\tvar _exports = {},\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl, hasModule;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\thasModule = (typeof(module) !== \"undefined\" && module.exports);\n\t\t\t\t\t\t\tif (!hasModule && typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t} else if (hasModule){ //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\t_blankArray = [],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && document.visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = (vars.immediateRender === true);\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = (vars.reversed === true);\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tsetTimeout(_checkTimeout, 2000);\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime()) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tvar pauseTime = this._pauseTime,\n\t\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\treturn this._uncache(false);\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = child._startTime + ((this.rawTime() - child._startTime) / child._timeScale);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"1.19.0\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\treturn (typeof(document) === \"undefined\") ? e : (document.querySelectorAll ? document.querySelectorAll(e) : document.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m(val, this._target || pt.t);\n\t\t\t\t\t} else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [start, end],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : 0};\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar s = (start === \"get\") ? target[prop] : start,\n\t\t\t\t\ttype = typeof(target[prop]),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob, getterName;\n\t\t\t\tif (type !== \"number\") {\n\t\t\t\t\tif (type === \"function\" && start === \"get\") {\n\t\t\t\t\t\tgetterName = ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3));\n\t\t\t\t\t\tpt.s = s = funcParam ? target[getterName](funcParam) : target[getterName]();\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(s) === \"string\" && (funcParam || isNaN(s))) {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, end, stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t:blob, p:\"setRatio\", s:0, c:1, f:2, pg:0, n:overwriteProp || prop, pr:0, m:0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else if (!isRelative) {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar i = _lazyTweens.length,\n\t\t\t\t\ttween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t//ignore\n\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tthis._startAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tthis._startAt.render(-1, true);\n\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar prevTime = this._time,\n\t\t\t\tduration = this._duration,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = this._time = duration;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\tif (!this._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._totalTime = this._time = time;\n\n\t\t\t\tif (this._easeType) {\n\t\t\t\t\tvar r = time / duration, type = this._easeType, pow = this._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t} else if (time / duration < 0.5) {\n\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._init();\n\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) {\n\t\t\t\t\tthis._time = this._totalTime = prevTime;\n\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(this);\n\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tthis._lazy = false;\n\t\t\t}\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.onStart) if (this._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (this._onUpdate) {\n\t\t\t\tif (time < 0) if (this._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (this._time !== prevTime || isComplete || force) {\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative.\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n})((typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window, \"TweenMax\");\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gsap/src/uncompressed/TweenMax.js\n ** module id = 17\n ** module chunks = 0\n **/","module.exports = __webpack_amd_options__;\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-options.js\n ** module id = 18\n ** module chunks = 0\n **/","import { ArrayUtils } from \"neo-common\";\nimport { TweenLite, Ease } from \"gsap\";\n\nexport class CustomEase extends Ease {\n    private id: string;\n    private data: string;\n    private lookup: Array<any>;\n    private points: Array<any>;\n    private rawBezier: Array<number>;\n\n    private fast: boolean;\n    private l: number;\n\n    private _numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\n    private _svgPathExp = /[achlmqstvz]|(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\n    private _scientific = /[\\+\\-]?\\d*\\.?\\d+e[\\+\\-]?\\d+/gi;\n    private _needsParsingExp = /[cLlsS]/g;\n    private _bezierError = \"CustomEase only accepts Cubic Bezier data.\";\n\n    constructor(id: string, data: string, config?: any) {\n        super();\n\n        this.id = id;\n        if (id) {\n            Ease.map[id] = this;\n        }\n\n        this._calcEnd = true;\n        this.getRatio = this._getRatio; //speed optimization, faster lookups.\n\n        this.setData(data, config);\n    }\n\n    private _bezierToPoints(\n        x1: number,\n        y1: number,\n        x2: number,\n        y2: number,\n        x3: number,\n        y3: number,\n        x4: number,\n        y4: number,\n        threshold: number,\n        points: Array<any>,\n        index: number,\n    ) {\n        let x12 = (x1 + x2) / 2;\n        let y12 = (y1 + y2) / 2;\n        let x23 = (x2 + x3) / 2;\n        let y23 = (y2 + y3) / 2;\n        let x34 = (x3 + x4) / 2;\n        let y34 = (y3 + y4) / 2;\n        let x123 = (x12 + x23) / 2;\n        let y123 = (y12 + y23) / 2;\n        let x234 = (x23 + x34) / 2;\n        let y234 = (y23 + y34) / 2;\n        let x1234 = (x123 + x234) / 2;\n        let y1234 = (y123 + y234) / 2;\n        let dx = x4 - x1;\n        let dy = y4 - y1;\n        let d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx);\n        let d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx);\n        let length: number;\n\n        if (!points) {\n            points = [\n                { x: x1, y: y1 },\n                { x: x4, y: y4 },\n            ];\n            index = 1;\n        }\n        points.splice(index || points.length - 1, 0, { x: x1234, y: y1234 });\n        if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {\n            length = points.length;\n            this._bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);\n            this._bezierToPoints(\n                x1234,\n                y1234,\n                x234,\n                y234,\n                x34,\n                y34,\n                x4,\n                y4,\n                threshold,\n                points,\n                index + 1 + (points.length - length),\n            );\n        }\n        return points;\n    }\n\n    private _pathDataToBezier(d: string) {\n        let a: RegExpMatchArray =\n            (d + \"\")\n                .replace(this._scientific, function (m) {\n                    let n = +m;\n                    let result = n < 0.0001 && n > -0.0001 ? 0 : n;\n                    return result.toString();\n                })\n                .match(this._svgPathExp) || [];\n\n        let path: Array<any> = [];\n        let relativeX = 0;\n        let relativeY = 0;\n        let elements = a.length;\n        let l = 2;\n        let i: number;\n        let x: number;\n        let y: number;\n        let command: string;\n        let isRelative: boolean;\n        let segment: any;\n        let startX: number;\n        let startY: number;\n        let prevCommand: string;\n        let difX: number;\n        let difY: number;\n        for (i = 0; i < elements; i++) {\n            prevCommand = command;\n            if (isNaN(parseFloat(a[i]))) {\n                command = a[i].toUpperCase();\n                isRelative = command !== a[i]; //lower case means relative\n            } else {\n                //commands like \"C\" can be strung together without any new command characters between.\n                i--;\n            }\n            x = +a[i + 1];\n            y = +a[i + 2];\n            if (isRelative) {\n                x += relativeX;\n                y += relativeY;\n            }\n            if (!i) {\n                startX = x;\n                startY = y;\n            }\n            if (command === \"M\") {\n                if (segment && segment.length < 8) {\n                    //if the path data was funky and just had a M with no actual drawing anywhere, skip it.\n                    path.length -= 1;\n                    l = 0;\n                }\n                relativeX = startX = x;\n                relativeY = startY = y;\n                segment = [x, y];\n                l = 2;\n                path.push(segment);\n                i += 2;\n                command = \"L\"; //an \"M\" with more than 2 values gets interpreted as \"lineTo\" commands (\"L\").\n            } else if (command === \"C\") {\n                if (!segment) {\n                    segment = [0, 0];\n                }\n                segment[l++] = x;\n                segment[l++] = y;\n                if (!isRelative) {\n                    relativeX = relativeY = 0;\n                }\n                segment[l++] = relativeX + parseFloat(a[i + 3]); //note: \"*1\" is just a fast/short way to cast the value as a Number. WAAAY faster in Chrome, slightly slower in Firefox.\n                segment[l++] = relativeY + parseFloat(a[i + 4]);\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 5]);\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 6]);\n                i += 6;\n            } else if (command === \"S\") {\n                if (prevCommand === \"C\" || prevCommand === \"S\") {\n                    difX = relativeX - segment[l - 4];\n                    difY = relativeY - segment[l - 3];\n                    segment[l++] = relativeX + difX;\n                    segment[l++] = relativeY + difY;\n                } else {\n                    segment[l++] = relativeX;\n                    segment[l++] = relativeY;\n                }\n                segment[l++] = x;\n                segment[l++] = y;\n                if (!isRelative) {\n                    relativeX = relativeY = 0;\n                }\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 3]);\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 4]);\n                i += 4;\n            } else if (command === \"L\" || command === \"Z\") {\n                if (command === \"Z\") {\n                    x = startX;\n                    y = startY;\n                    segment.closed = true;\n                }\n                if (command === \"L\" || Math.abs(relativeX - x) > 0.5 || Math.abs(relativeY - y) > 0.5) {\n                    segment[l++] = relativeX + (x - relativeX) / 3;\n                    segment[l++] = relativeY + (y - relativeY) / 3;\n                    segment[l++] = relativeX + ((x - relativeX) * 2) / 3;\n                    segment[l++] = relativeY + ((y - relativeY) * 2) / 3;\n                    segment[l++] = x;\n                    segment[l++] = y;\n                    if (command === \"L\") {\n                        i += 2;\n                    }\n                }\n                relativeX = x;\n                relativeY = y;\n            } else {\n                throw this._bezierError;\n            }\n        }\n        return path[0];\n    }\n\n    private _findMinimum(values: Array<number>) {\n        let l = values.length,\n            min = 999999999999,\n            i: number;\n        for (i = 1; i < l; i += 6) {\n            if (+values[i] < min) {\n                min = +values[i];\n            }\n        }\n        return min;\n    }\n\n    private _normalize(values: Array<number>, height?: number, originY?: number) {\n        //takes all the points and translates/scales them so that the x starts at 0 and ends at 1.\n        if (!originY && originY !== 0) {\n            originY = Math.max(+values[values.length - 1], +values[1]);\n        }\n        let tx = +values[0] * -1,\n            ty = -originY,\n            l = values.length,\n            sx = 1 / (+values[l - 2] + tx),\n            sy =\n                -height ||\n                (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0])\n                    ? this._findMinimum(values) + ty\n                    : +values[l - 1] + ty),\n            i: number;\n        if (sy) {\n            //typically y ends at 1 (so that the end values are reached)\n            sy = 1 / sy;\n        } else {\n            //in case the ease returns to its beginning value, scale everything proportionally\n            sy = -sx;\n        }\n        for (i = 0; i < l; i += 2) {\n            values[i] = (+values[i] + tx) * sx;\n            values[i + 1] = (+values[i + 1] + ty) * sy;\n        }\n    }\n\n    private _getRatio(p: number) {\n        var point = this.lookup[(p * this.l) | 0] || this.lookup[this.l - 1];\n        if (point.nx < p) {\n            point = point.n;\n        }\n        let result = point.y + ((p - point.x) / point.cx) * point.cy;\n        return result;\n    }\n\n    private setData(data: string, config?: any) {\n        this.data = data || \"0,0,1,1\";\n        this.points = [];\n        this.lookup = [];\n\n        let values = ArrayUtils.numberArray(this.data.match(this._numbersExp).join(\";\"));\n        let closest = 1;\n\n        let a1: any,\n            a2: any,\n            i: number,\n            inc: number,\n            j: number,\n            point: any,\n            prevPoint: any,\n            p: number,\n            precision: number;\n\n        precision = (config && config.precision) || 1;\n        this.fast = precision <= 1;\n\n        if (this._needsParsingExp.test(data) || (data.indexOf(\"M\") !== -1 && data.indexOf(\"C\") === -1)) {\n            values = this._pathDataToBezier(data);\n        }\n\n        this.l = values.length;\n\n        if (this.l === 4) {\n            values.unshift(0, 0);\n            values.push(1, 1);\n            this.l = 8;\n        } else if ((this.l - 2) % 6) {\n            throw this._bezierError;\n        }\n        if (+values[0] !== 0 || +values[this.l - 2] !== 1) {\n            let height = config && config.height ? config.height : null;\n            let originY = config && config.originY ? config.originY : null;\n            this._normalize(values, height, originY);\n        }\n\n        this.rawBezier = values;\n\n        for (i = 2; i < this.l; i += 6) {\n            a1 = { x: +values[i - 2], y: +values[i - 1] };\n            a2 = { x: +values[i + 4], y: +values[i + 5] };\n            this.points.push(a1, a2);\n            this._bezierToPoints(\n                a1.x,\n                a1.y,\n                +values[i],\n                +values[i + 1],\n                +values[i + 2],\n                +values[i + 3],\n                a2.x,\n                a2.y,\n                1 / (precision * 200000),\n                this.points,\n                this.points.length - 1,\n            );\n        }\n\n        this.l = this.points.length;\n        for (i = 0; i < this.l; i++) {\n            point = this.points[i];\n            prevPoint = this.points[i - 1] || point;\n            if (point.x > prevPoint.x || (prevPoint.y !== point.y && prevPoint.x === point.x) || point === prevPoint) {\n                //if a point goes BACKWARD in time or is a duplicate, just drop it.\n                prevPoint.cx = point.x - prevPoint.x; //change in x between this point and the next point (performance optimization)\n                prevPoint.cy = point.y - prevPoint.y;\n                prevPoint.n = point;\n                prevPoint.nx = point.x; //next point's x value (performance optimization, making lookups faster in getRatio()). Remember, the lookup will always land on a spot where it's either this point or the very next one (never beyond that)\n                if (\n                    this.fast &&\n                    i > 1 &&\n                    Math.abs(prevPoint.cy / prevPoint.cx - this.points[i - 2].cy / this.points[i - 2].cx) > 2\n                ) {\n                    //if there's a sudden change in direction, prioritize accuracy over speed. Like a bounce ease - you don't want to risk the sampling chunks landing on each side of the bounce anchor and having it clipped off.\n                    this.fast = false;\n                }\n                if (prevPoint.cx < closest) {\n                    if (!prevPoint.cx) {\n                        prevPoint.cx = 0.001; //avoids math problems in getRatio() (dividing by zero)\n                        if (i === this.l - 1) {\n                            //in case the final segment goes vertical RIGHT at the end, make sure we end at the end.\n                            prevPoint.x -= 0.001;\n                            closest = Math.min(closest, 0.001);\n                            this.fast = false;\n                        }\n                    } else {\n                        closest = prevPoint.cx;\n                    }\n                }\n            } else {\n                this.points.splice(i--, 1);\n                this.l--;\n            }\n        }\n\n        this.l = (1 / closest + 1) | 0;\n        inc = 1 / this.l;\n        j = 0;\n        point = this.points[0];\n        if (this.fast) {\n            for (i = 0; i < this.l; i++) {\n                //for fastest lookups, we just sample along the path at equal x (time) distance. Uses more memory and is slightly less accurate for anchors that don't land on the sampling points, but for the vast majority of eases it's excellent (and fast).\n                p = i * inc;\n                if (point.nx < p) {\n                    point = this.points[++j];\n                }\n                a1 = point.y + ((p - point.x) / point.cx) * point.cy;\n                this.lookup[i] = { x: p, cx: inc, y: a1, cy: 0, nx: 9 };\n                if (i) {\n                    this.lookup[i - 1].cy = a1 - this.lookup[i - 1].y;\n                }\n            }\n            this.lookup[this.l - 1].cy = this.points[this.points.length - 1].y - a1;\n        } else {\n            //this option is more accurate, ensuring that EVERY anchor is hit perfectly. Clipping across a bounce, for example, would never happen.\n            for (i = 0; i < this.l; i++) {\n                //build a lookup table based on the smallest distance so that we can instantly find the appropriate point (well, it'll either be that point or the very next one). We'll look up based on the linear progress. So it's it's 0.5 and the lookup table has 100 elements, it'd be like lookup[Math.floor(0.5 * 100)]\n                if (point.nx < i * inc) {\n                    point = this.points[++j];\n                }\n                this.lookup[i] = point;\n            }\n\n            if (j < this.points.length - 1) {\n                this.lookup[i - 1] = this.points[this.points.length - 2];\n            }\n        }\n        this._calcEnd = this.points[this.points.length - 1].y !== 1 || this.points[0].y !== 0; //ensures that we don't run into floating point errors. As long as we're starting at 0 and ending at 1, tell GSAP to skip the final calculation and use 0/1 as the factor.\n    }\n\n    public static create(id: string, data: string, config?: any): CustomEase {\n        return new CustomEase(id, data, config);\n    }\n\n    public static get(id: string): Ease {\n        return Ease.map[id];\n    }\n\n    public static _createOwnEasing(): void {\n        // let dataNeonOut = \"M0,0 C0.18,0 0.259,1 0.259,1 0.259,1 0.297,0.51 0.41,0.51 0.5,0.51 0.566,1 0.566,1 0.566,1 0.595,0.783 0.657,0.783 0.705,0.783 0.75,1 0.75,1 0.75,1 0.768,0.913 0.804,0.913 0.832,0.913 0.859,1 0.859,1 0.859,1 0.869,0.968 0.891,0.968 0.909,0.968 0.924,1 0.924,1 0.924,1 0.929,0.989 0.943,0.989 0.953,0.989 0.963,1 0.963,1 0.963,1 0.965,0.997 0.973,0.997 0.981,0.997 0.986,1 0.986,1 0.986,1 0.987,0.999 0.993,0.999 0.997,0.999 1,1 1,1\";\n        let dataNeonOut =\n            \"M0,0,C0.18,0,0.259,1,0.259,1,0.259,1,0.297,0.422,0.41,0.422,0.5,0.422,0.566,1,0.566,1,0.566,1,0.595,0.67,0.657,0.67,0.705,0.67,0.75,1,0.75,1,0.75,1,0.768,0.81,0.804,0.81,0.832,0.81,0.859,1,0.859,1,0.859,1,0.869,0.912,0.891,0.912,0.909,0.912,0.924,1,0.924,1,0.924,1,0.929,0.958,0.943,0.958,0.953,0.958,0.963,1,0.963,1,0.963,1,0.965,0.997,0.973,0.997,0.981,0.997,0.986,1,0.986,1,0.986,1,0.987,0.999,0.993,0.999,0.997,0.999,1,1,1,1\";\n        CustomEase.create(\"neonOut\", dataNeonOut);\n\n        // let dataNeonIn = \"M0,0 C0,0 0.003,0.001 0.007,0.001 0.013,0.001 0.014,0 0.014,0 0.014,0 0.019,0.003 0.027,0.003 0.035,0.003 0.037,0 0.037,0 0.037,0 0.047,0.011 0.057,0.011 0.071,0.011 0.076,0 0.076,0 0.076,0 0.097,0.032 0.109,0.032 0.12,0.032 0.141,0 0.141,0 0.141,0 0.168,0.087 0.196,0.087 0.232,0.087 0.25,0 0.25,0 0.25,0 0.295,0.217 0.343,0.217 0.405,0.217 0.434,0 0.434,0 0.434,0 0.5,0.49 0.59,0.49 0.703,0.49 0.758,0 0.758,0 0.758,0 0.87,1 1,1\";\n        let dataNeonIn =\n            \"M0,0,C0,0,0.003,0.001,0.007,0.001,0.013,0.001,0.014,0,0.014,0,0.014,0,0.019,0.003,0.027,0.003,0.035,0.003,0.037,0,0.037,0,0.037,0,0.047,0.044,0.057,0.044,0.071,0.044,0.076,0,0.076,0,0.076,0,0.097,0.094,0.109,0.094,0.12,0.094,0.141,0,0.141,0,0.141,0,0.172,0.2,0.2,0.2,0.236,0.2,0.25,0,0.25,0,0.25,0,0.295,0.332,0.343,0.332,0.405,0.332,0.434,0,0.434,0,0.434,0,0.5,0.586,0.59,0.586,0.703,0.586,0.758,0,0.758,0,0.758,0,0.87,1,1,1\";\n        CustomEase.create(\"neonIn\", dataNeonIn);\n\n        let dataNeonLost =\n            \"M0,0 C0,0 0.044,0.2 0.1,0.2 0.155,0.2 0.2,0 0.2,0 0.2,0 0.246,0.5 0.3,0.5 0.362,0.5 0.4,0 0.4,0 0.4,0 0.398,1 0.5,1 0.598,1 0.6,0 0.6,0 0.6,0 0.65,0.492 0.708,0.491 0.773,0.491 0.8,0 0.8,0 0.8,0 0.844,0.2 0.9,0.2 0.955,0.2 1,0 1,0\";\n        CustomEase.create(\"neonLost\", dataNeonLost);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/CustomEase.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\n\n/**\n * The StyleManager class is used for storing styles for canvas elements and html elements.\n * @class StyleManager\n */\nexport class StyleManager {\n    static Styles: { [id: string]: any } = {};\n    static HtmlStyles: { [id: string]: any } = {};\n\n    static cleanup() {\n        // NOTE(psulek) perf-tunning\n        // - cleanup of 'StyleManager.HtmlStyles' is safe because it is used only in preloader active phase and not in runtime!\n        // - do not cleanup 'StyleManager.Styles' because this is used in runtime\n        StyleManager.HtmlStyles = null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"StyleManager\", data);\n        }\n    }\n\n    /**\n     * Parse style elements and store them by type to static variables.\n     * @method parseElements\n     * @param startNode Element\n     * @return void\n     */\n    static parseElements(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        const nodes: Array<Element> = StyleManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") !== \"\");\n\n        nodes\n            .filter((node: Element) =>\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.Style),\n            )\n            .forEach((node: Element) => {\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                style.create(node);\n                StyleManager.Styles[node.nodeName] = style;\n            });\n\n        nodes\n            .filter((node: Element) =>\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlStyle),\n            )\n            .forEach((node: Element) => {\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                style.create(node);\n                StyleManager.HtmlStyles[node.nodeName] = style;\n            });\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = StyleManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/StyleManager.ts\n **/","import { StringUtils } from \"neo-common\";\n\n/**\n * @class Attributes\n */\nexport class Attributes {\n    /**\n     * @method assignIntAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @param radix\n     * @return {number} parsed attribute value\n     */\n    static assignIntAttribute(node: Element, attribute: string, defaultValue: number, radix?: number): number {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return parseInt(node.getAttribute(attribute), radix);\n    }\n\n    /**\n     * @method assignFloatAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {number} parsed attribute value\n     */\n    static assignFloatAttribute(node: Element, attribute: string, defaultValue: number): number {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return parseFloat(node.getAttribute(attribute));\n    }\n\n    /**\n     * @method assignBooleanAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {boolean} parsed attribute value\n     */\n    static assignBooleanAttribute(node: Element, attribute: string, defaultValue: boolean): boolean {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return StringUtils.parseBoolean(node.getAttribute(attribute));\n    }\n\n    /**\n     * @method assignBooleanAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {boolean} parsed attribute value\n     */\n    static assignStringAttribute(node: Element, attribute: string, defaultValue: any): any {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return node.getAttribute(attribute);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Attributes.ts\n **/","import { FrameTimer } from \"./FrameTimer\";\n\nexport class FrameTimerPool {\n    public static pool: Object = {};\n    public static paused: boolean = false;\n\n    public static add(key: string, item: any): void {\n        FrameTimerPool.pool[key] = item;\n    }\n\n    public static remove(key: string): void {\n        delete FrameTimerPool.pool[key];\n    }\n\n    public static pause(force: boolean = false): void {\n        if (FrameTimerPool.paused && !force) {\n            return;\n        }\n        for (let key in FrameTimerPool.pool) {\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\n                FrameTimerPool.pool[key].pause();\n            }\n        }\n        FrameTimerPool.paused = true;\n    }\n\n    public static unpause(force: boolean = false): void {\n        if (!FrameTimerPool.paused && !force) {\n            return;\n        }\n        for (let key in FrameTimerPool.pool) {\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\n                FrameTimerPool.pool[key].unpause();\n            }\n        }\n        FrameTimerPool.paused = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimerPool.ts\n **/","import { JackpotCounter } from \"../Jackpot/JackpotCounter\";\nimport { JackpotHistoryDialog } from \"../Jackpot/JackpotHistoryDialog\";\nimport { Scaling } from \"../../../Utils/Scaling\";\nimport { CreateFrameTimer, FrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { JackpotGame } from \"../Jackpot/JackpotGame\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Communication } from \"neo-games/Engine/index\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\ntype ProgressiveBonusGetInfoResponse = Communication.Game.ProgressiveBonusGetInfoResponse;\n\nexport class Jackpot {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public static readonly JackpotTheme: string = \"SPJackpot\";\n\n    public static Height: number = 0;\n\n    private static BonusId: number = -1;\n    private static CountersCount: number = 4;\n\n    private static WidgetRoot: HTMLElement;\n    private static GameRoot: HTMLElement;\n    private static Counters: Array<JackpotCounter> = [];\n    private static HistoryDialogs: Array<JackpotHistoryDialog> = [];\n    private static Game: JackpotGame;\n\n    private static RefreshInterval: number = 15; //in seconds\n    private static RefreshTimerId: number;\n\n    private static TouchEvent: any;\n    private static Offline: boolean = false;\n\n    private static Timer: FrameTimerEventEmitter;\n\n    //******************************************************************************************************************\n    //  INITIALIZE & SHOW\n    //******************************************************************************************************************\n\n    public static initialize(): void {\n        if (AppContext && AppContext.gameConfiguration.ProgressiveBonusId > -1) {\n            document.body.classList.add(\"jpt-on\");\n            Jackpot.WidgetRoot = document.getElementById(\"jackpotWidget\");\n            Jackpot.GameRoot = document.getElementById(\"jackpotGame\");\n            Jackpot.BonusId = AppContext.gameConfiguration.ProgressiveBonusId;\n\n            Jackpot.createCounters();\n            Jackpot.createHistoryDialogs();\n            // Jackpot.createBonusGame();\n\n            Jackpot.bindElements();\n\n            Jackpot.getBonusInfo(Jackpot.initJackpotDataReceived);\n\n            if (GameManager.gameClient) {\n                GameManager.gameClient.setBonusId(Jackpot.BonusId);\n            }\n        } else {\n            Jackpot.clearJackpot();\n        }\n    }\n\n    public static reinitialize(): void {\n        if (Jackpot.Offline) {\n            Jackpot.Offline = false;\n            Jackpot.refreshBonusInfo();\n            Jackpot.refreshCounters();\n        }\n    }\n\n    public static show(): void {\n        if (Jackpot.WidgetRoot) {\n            if (Jackpot.Counters.length > 0) {\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\n                    Jackpot.Counters[i].createCurrency(DataManager.getDataById(GameData.DataCurrency));\n                    Jackpot.HistoryDialogs[i].updateDataWithCurrency();\n                }\n\n                Jackpot.Height = Jackpot.Counters[0].getHeight();\n                Scaling.PortraitMobileRatio = 0.76; //ToDo hot fix 222732\n                Scaling.resizeRoot();\n            }\n        }\n    }\n\n    private static clearJackpot(): void {\n        let jackpotWidget = document.getElementById(\"jackpotWidget\");\n        let jackpotGame = document.getElementById(\"jackpotGame\");\n        if (jackpotWidget && jackpotWidget.parentNode && jackpotGame && jackpotGame.parentNode) {\n            jackpotWidget.parentNode.removeChild(jackpotWidget);\n            jackpotGame.parentNode.removeChild(jackpotGame);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    private static createCounters(): void {\n        if (Jackpot.WidgetRoot) {\n            Jackpot.getCustomContent(\"jackpotLogo.jpg\", Jackpot.createLogo, Jackpot.createLogo);\n\n            Jackpot.createElement(\"div\", \"jackpotCountersBg\", Jackpot.WidgetRoot);\n            let holder = Jackpot.createElement(\"div\", \"jackpotCounters\", Jackpot.WidgetRoot);\n            holder.id = \"jackpotCounters\";\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                let counter = new JackpotCounter(i + 1, holder, Jackpot.refreshCounters);\n\n                Jackpot.Counters.push(counter);\n            }\n        }\n    }\n\n    private static createLogo(contentUrl: string = \"\"): void {\n        let logo = Jackpot.createElement(\"div\", \"jackpotLogo\", Jackpot.WidgetRoot);\n        logo = Jackpot.createElement(\"div\", \"\", logo);\n        logo.id = \"jackpotLogo\";\n\n        if (contentUrl != \"\") {\n            logo.style.background = `url(${contentUrl})`;\n        }\n    }\n\n    private static createHistoryDialogs(): void {\n        if (Jackpot.WidgetRoot) {\n            let holder = Jackpot.createElement(\"div\", \"jackpotHistory\", Jackpot.WidgetRoot);\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                let dialog = new JackpotHistoryDialog(i + 1, holder);\n\n                Jackpot.HistoryDialogs.push(dialog);\n            }\n        }\n    }\n\n    private static createBonusGame(): void {\n        if (Jackpot.GameRoot) {\n            let holder = Jackpot.createElement(\"div\", \"jackpotGameHolder\", Jackpot.GameRoot);\n            Jackpot.Game = new JackpotGame(holder);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH\n    //******************************************************************************************************************\n\n    public static refreshCounters(): void {\n        for (let i = 0; i < Jackpot.CountersCount; i++) {\n            Jackpot.Counters[i].refreshWithReset();\n        }\n    }\n\n    public static showError(useResetAnim: boolean = false): void {\n        clearTimeout(this.RefreshTimerId);\n\n        if (Jackpot.WidgetRoot) {\n            if (Jackpot.Counters && Jackpot.HistoryDialogs) {\n                Jackpot.Offline = true;\n\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\n                    Jackpot.Counters[i].error(useResetAnim);\n                    Jackpot.HistoryDialogs[i].error(useResetAnim);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH\n    //******************************************************************************************************************\n\n    public static refreshBonusInfo(): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive);\n    }\n\n    public static refreshBonusInfoInMiniGame(overrideLevelData: IProgressiveBonusLevel): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, { overrideLeveldata: overrideLevelData, priority: true });\n    }\n\n    public static refreshBonusInfoWithWinValue(overrideLevelData: IProgressiveBonusLevel): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, {\n            overrideLeveldata: overrideLevelData,\n            priority: true,\n            fromMiniGame: overrideLevelData.code,\n        });\n    }\n\n    public static refreshBonusInfoBeforeSpin(spinCallback: () => void): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfoBeforeSpin(spinCallback, { priority: true });\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    private static getBonusInfo(\n        callback: (response: ProgressiveBonusGetInfoResponse, customData?: any) => void,\n        customData?: any,\n    ): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\n                .then((response: ProgressiveBonusGetInfoResponse) => {\n                    callback(response, customData);\n                    return null;\n                })\n                .catch((error) => {\n                    Jackpot.showError(true);\n                });\n        }\n    }\n\n    private static getBonusInfoBeforeSpin(callback: () => void, customData?: any): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\n                .then((response: ProgressiveBonusGetInfoResponse) => {\n                    Jackpot.jackpotDataReceive(response, customData);\n                    callback();\n                    return null;\n                })\n                .catch((error) => {\n                    Jackpot.showError(true);\n                });\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE RESPONSE\n    //******************************************************************************************************************\n\n    private static initJackpotDataReceived(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\n        if (response != null) {\n            Jackpot.RefreshInterval = response.refreshInterval;\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].initialize(response.levels[i], response.timestamp);\n                Jackpot.HistoryDialogs[i].initialize(response.levels[i]);\n            }\n        } else {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].error();\n                Jackpot.HistoryDialogs[i].error();\n            }\n        }\n\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\n    }\n\n    private static jackpotDataReceive(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\n        if (response != null) {\n            Jackpot.RefreshInterval = response.refreshInterval;\n\n            let winOverride = customData != null && customData[\"overrideLeveldata\"] != null;\n            let priority = customData != null && customData[\"priority\"] != null;\n            let fromMiniGame =\n                customData != null && customData[\"fromMiniGame\"] != null ? customData[\"fromMiniGame\"] : \"\";\n\n            if (winOverride) {\n                response = Jackpot.updateReponseData(response, customData[\"overrideLeveldata\"]);\n            }\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].assign(\n                    response.levels[i],\n                    response.timestamp,\n                    priority,\n                    response.levels[i][\"overridedLastWinAmount\"],\n                    fromMiniGame == response.levels[i].code,\n                );\n                Jackpot.HistoryDialogs[i].assign(response.levels[i]);\n            }\n        } else {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].error();\n                Jackpot.HistoryDialogs[i].error();\n            }\n        }\n\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\n    }\n\n    private static updateReponseData(\n        response: ProgressiveBonusGetInfoResponse,\n        overrideLevelData: IProgressiveBonusLevel,\n    ): ProgressiveBonusGetInfoResponse {\n        if (overrideLevelData != null) {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                if (response.levels[i].code == overrideLevelData.code) {\n                    //to always show minigame win value in counter\n                    if (overrideLevelData.lastWinAmount != null) {\n                        response.levels[i][\"overridedLastWinAmount\"] = overrideLevelData.lastWinAmount;\n                    } else {\n                        response.levels[i] = overrideLevelData;\n                    }\n                }\n            }\n        }\n\n        return response;\n    }\n\n    //******************************************************************************************************************\n    //  BIND EVENTS\n    //******************************************************************************************************************\n\n    private static bindElements(): void {\n        for (let i = 0; i < Jackpot.Counters.length; i++) {\n            if (window[\"CHANNEL\"] === \"mobile\") {\n                Jackpot.Counters[i]\n                    .getRoot()\n                    .addEventListener(\"click\", (event: Event) => Jackpot.toggleHistoryDialog(event, i));\n\n                //prevent close when clicked into dialog\n                for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\n                    Jackpot.HistoryDialogs[i]\n                        .getRoot()\n                        .addEventListener(\"click\", (event: Event) => Jackpot.preventDefault(event));\n                    Jackpot.HistoryDialogs[i]\n                        .getRoot()\n                        .addEventListener(\"touchstart\", (event: Event) => Jackpot.preventDefault(event));\n                }\n            } else {\n                Jackpot.Counters[i].getRoot().addEventListener(\"click\", Jackpot.showHistoryDialog.bind(this, i));\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseover\", Jackpot.showHistoryDialog.bind(this, i));\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseout\", Jackpot.hideHistoryDialog.bind(this, i));\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE HISTORY DIALOGS\n    //******************************************************************************************************************\n\n    public static closeAllHistoryDialogs(): void {\n        if (Jackpot.WidgetRoot) {\n            Jackpot.WidgetRoot.removeEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\n            for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\n                Jackpot.HistoryDialogs[i].closeDialog();\n            }\n        }\n    }\n\n    private static showHistoryDialog(index: number): void {\n        this.closeAllHistoryDialogs();\n\n        if (Jackpot.HistoryDialogs[index]) {\n            if (window[\"CHANNEL\"] === \"mobile\") {\n                HtmlController.dispatchAction(\"\");\n                Jackpot.WidgetRoot.addEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\n            }\n\n            Jackpot.TouchEvent = Jackpot.hideHistoryDialog.bind(this, index);\n            document.addEventListener(\"touchstart\", Jackpot.TouchEvent);\n\n            Jackpot.HistoryDialogs[index].openDialog();\n        }\n    }\n\n    private static toggleHistoryDialog(event: Event, index: number): void {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (Jackpot.HistoryDialogs[index] && !Jackpot.HistoryDialogs[index].isOpen()) {\n            this.showHistoryDialog(index);\n        } else {\n            this.closeAllHistoryDialogs();\n        }\n    }\n\n    private static hideHistoryDialog(index: number): void {\n        if (Jackpot.HistoryDialogs[index]) {\n            Jackpot.HistoryDialogs[index].closeDialog();\n            document.removeEventListener(\"touchstart\", Jackpot.TouchEvent);\n        }\n    }\n\n    private static preventDefault(event: Event): void {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    //******************************************************************************************************************\n    //  MINI GAME\n    //******************************************************************************************************************\n\n    /**\n     * Send minigame init request\n     * @param autostart - start minigame after init request past\n     * @param callback - if init request is ok and autoplay mode is true, run callback (disable base ui)\n     */\n    public static initMiniGame(autostart: boolean, callback: () => void): void {\n        if (!Jackpot.Game) {\n            Jackpot.createBonusGame();\n        }\n\n        Jackpot.Game.init(autostart, callback);\n    }\n\n    public static startMiniGame(): void {\n        if (!Jackpot.Game.hasStartedGame()) {\n            Jackpot.Game.start();\n        }\n    }\n\n    public static hasActiveGame(): boolean {\n        if (!Jackpot.Game) {\n            return false;\n        }\n\n        return Jackpot.Game.hasStartedGame();\n    }\n\n    public static hasInitializedGame(): boolean {\n        return Jackpot.Game && Jackpot.Game.hasInitializedGame();\n    }\n\n    /**\n     * Return if the mini game is prepared and ready to play.\n     */\n    public static hasMiniGame(): boolean {\n        //check already running game\n        if (Jackpot.Game && Jackpot.Game.hasStartedGame()) {\n            return true;\n        }\n\n        //check counters\n        if (Jackpot.countersInError()) {\n            return false;\n        }\n\n        if (Jackpot.Game && Jackpot.Game.hasInitializedGame()) {\n            return true;\n        }\n\n        return GameManager.gameResponse[\"progressiveBonus\"] && GameManager.gameResponse[\"progressiveBonus\"].ticket;\n    }\n\n    public static disableMiniGameAutostart(): void {\n        if (Jackpot.Game) {\n            Jackpot.Game.disableAutostart();\n        }\n    }\n\n    public static waitForMiniGameInitialization(): boolean {\n        return (\n            AppContext &&\n            (AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" ||\n                AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"AfterGameRound\")\n        );\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    private static createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    private static countersInError(): boolean {\n        if (Jackpot.Counters && Jackpot.Counters.length > 0) {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                if (Jackpot.Counters[i].hasError()) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private static getCustomContent(name: string, success: Function, error: Function): void {\n        if (AppContext.gameConfiguration == null) {\n            if (error) error();\n            return;\n        }\n\n        if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\n            if (error) error();\n            return;\n        }\n\n        let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\n        if (theme == \"\") {\n            if (AppContext.gameConfiguration.UseJackpotLocalization) {\n                theme = Jackpot.JackpotTheme;\n            } else {\n                if (error) error();\n                return;\n            }\n        }\n\n        const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\n        const spbFolder = \"SynotProgressiveBonus\";\n        const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}`;\n        let img = document.createElement(\"img\");\n        img.setAttribute(\"src\", url);\n\n        img.addEventListener(\"load\", (ev) => {\n            if (success) success(url);\n        });\n        img.addEventListener(\"error\", (ev) => {\n            if (error) error();\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/Jackpot.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\nimport { TweenLite } from \"gsap\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Tweens } from \"../../../Components/Effects/Tweens\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\n\nexport class JackpotCounter {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    private static LeadingZeroLetter: string = \" \";\n\n    private static WinAnimDuration: number = 240; //in frames\n\n    private static WinFromMinigameAnimDuration: number = 540; //in frames\n\n    private static Length: number = 10;\n\n    private static DecimalPlaces: number = 2;\n\n    private static DigitAnimDuration: number = 0.1; //in seconds\n\n    //could be in conflict with priority assign (if reset animations haven't been finished)\n    private static MinResetAnimCount: number = 15;\n\n    private static UseThousandsSeparator: boolean = true;\n\n    private static MaxNextTimeDiff: number = 2 * 60; //in seconds\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected root: HTMLElement;\n\n    protected currentData: IProgressiveBonusLevel;\n\n    protected currentCounterValue: number;\n\n    protected previousCounterValue: number;\n\n    protected nextDate: number;\n\n    protected nextValue: number;\n\n    protected previousValue: number;\n\n    protected lastWinValue: number;\n\n    protected lastWinCount: number;\n\n    protected overridedLastWinValue: number;\n\n    protected serverTimeOffset: number;\n\n    protected resetAnimCount: number;\n\n    protected isCounting: boolean;\n\n    protected inError: boolean;\n\n    protected winFromMinigame: boolean;\n\n    protected winAnimationDelay: FrameTimerEventEmitter;\n\n    protected mainTween: TweenLite;\n\n    protected digitTween: TweenLite;\n\n    protected decimalDot: HTMLElement;\n\n    protected idleValue: number;\n\n    protected lastUpdateTime: number;\n\n    protected resetCallback: Function;\n\n    protected digits: {\n        from: HTMLElement;\n        to: HTMLElement;\n    }[];\n\n    protected settings: {\n        width: number;\n        height: number;\n    };\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(index: number, holder: HTMLElement, resetCallback: Function) {\n        if (AppContext.gameConfiguration != null) {\n            JackpotCounter.DecimalPlaces = AppContext.gameConfiguration.ShowDecimalPlaces;\n        }\n\n        this.root = this.createBaseLayout(index);\n        holder.appendChild(this.root);\n        this.createDigits();\n        this.createDecimalPoint();\n\n        this.currentCounterValue = 0;\n        this.previousCounterValue = 0;\n        this.lastWinValue = -1;\n        this.lastWinCount = -1;\n        this.overridedLastWinValue = -1;\n\n        this.winAnimationDelay = CreateFrameTimer(\"winAnimationDelayTimer\");\n        this.winAnimationDelay.on(FrameTimerEvents.Complete, this.winAnimationFinished.bind(this));\n\n        this.mainTween = null;\n        this.digitTween = null;\n        this.winFromMinigame = false;\n\n        this.lastUpdateTime = Date.now();\n        this.resetCallback = resetCallback;\n\n        this.reset();\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    protected createBaseLayout(index: number): HTMLElement {\n        let root = this.createElement(\"div\", \"jackpotCounter l-\" + index);\n\n        //create childs\n        this.createElement(\"div\", \"jackpotFrame\", root);\n        let level = this.createElement(\"div\", \"jackpotLevel\", root);\n        this.createElement(\"div\", \"jackpotIconError\", level);\n\n        this.createElement(\"div\", \"jackpotDigitsHolder\", root);\n        this.createElement(\"div\", \"jackpotGradient\", root);\n        let currency = this.createElement(\"div\", \"jackpotCurrency\", root);\n\n        //create currency letters\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n\n        return root;\n    }\n\n    public createCurrency(currency: string): void {\n        if (!StringUtils.isNullOrEmpty(currency)) {\n            let jackpotCurrencyLetters = this.root.getElementsByClassName(\"jackpotCurrencyLetter\");\n\n            for (let i = 0; i < jackpotCurrencyLetters.length; i++) {\n                if (currency.length > i) {\n                    jackpotCurrencyLetters[i].textContent = currency.charAt(i);\n                }\n            }\n\n            jackpotCurrencyLetters[0].parentElement.classList.add(\"ln-\" + currency.length);\n        }\n    }\n\n    protected createDigits(): void {\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\n        const digitsArray: Array<HTMLElement> = [];\n        this.digits = [];\n\n        let digit: HTMLElement;\n        for (let i = 0; i < JackpotCounter.Length; i++) {\n            let className =\n                i == JackpotCounter.Length - JackpotCounter.DecimalPlaces ? \"digits decimalOffset\" : \"digits\";\n            digit = this.createElement(\"div\", className, digitsHolder);\n            let from = this.createElement(\"div\", \"digit\", digit);\n            let to = this.createElement(\"div\", \"digit\", digit);\n\n            digitsArray.push(digit);\n            this.digits.push({ from: from, to: to });\n        }\n\n        if (JackpotCounter.UseThousandsSeparator) {\n            digitsHolder.classList.add(\"thousandsFormat\");\n\n            for (let i = 0; i < digitsArray.length; i++) {\n                const index = digitsArray.length - 1 - i;\n                const hasThousandsOffset =\n                    index > 0 && i > JackpotCounter.DecimalPlaces && (i + 1 - JackpotCounter.DecimalPlaces) % 3 == 0;\n\n                if (hasThousandsOffset && digitsArray[index] != null) {\n                    digitsArray[index].classList.add(\"thousandsOffset\");\n                }\n            }\n        }\n\n        //save digit height/width\n        this.settings = {\n            width: parseInt(window.getComputedStyle(digit).width),\n            height: parseInt(window.getComputedStyle(digit).height),\n        };\n    }\n\n    protected createDecimalPoint() {\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\n\n        if (JackpotCounter.DecimalPlaces > 0) {\n            this.decimalDot = this.createElement(\"div\", \"digit nDot\", digitsHolder);\n            this.decimalDot.style.right = JackpotCounter.DecimalPlaces * this.settings.width + \"px\";\n        }\n    }\n\n    //******************************************************************************************************************\n    //  INIT\n    //******************************************************************************************************************\n\n    public initialize(data: IProgressiveBonusLevel, serverTimestamp: string): void {\n        this.assign(data, serverTimestamp);\n    }\n\n    //******************************************************************************************************************\n    //  ASSIGN\n    //******************************************************************************************************************\n\n    public assign(\n        data: IProgressiveBonusLevel,\n        serverTimestamp: string,\n        priority: boolean = false,\n        overridedLastWinValue: number = -1,\n        winFromMinigame: boolean = false,\n    ): void {\n        this.currentData = data;\n\n        this.nextValue = this.normalizeValue(data.nextValue);\n        this.nextDate = Date.now() + (new Date(data.nextTimestamp).getTime() - new Date(serverTimestamp).getTime());\n        this.previousValue = this.normalizeValue(data.previousValue);\n        this.winFromMinigame = winFromMinigame;\n\n        const oldValuesReset = Date.now() - this.lastUpdateTime > JackpotCounter.MaxNextTimeDiff * 1000;\n\n        if (overridedLastWinValue > -1) {\n            this.overridedLastWinValue = this.normalizeValue(overridedLastWinValue);\n        }\n\n        //if current animated values are too old, force reset animation on all counters\n        if (oldValuesReset && this.resetCallback != null) {\n            this.resetCallback();\n            return;\n        }\n\n        //reset counter if it's in error\n        if (this.inError) {\n            this.removeError();\n            this.reset();\n            return;\n        }\n\n        if (!this.isCounting || priority) {\n            this.refresh();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ERROR\n    //******************************************************************************************************************\n\n    public error(useResetAnim: boolean = false): void {\n        if (!this.inError) {\n            this.inError = true;\n            this.isCounting = false;\n\n            if (useResetAnim) {\n                this.resetMainTween();\n                this.resetDigitTween(true);\n                this.errorResetAnim();\n                return;\n            }\n\n            if (this.decimalDot) {\n                this.decimalDot.style.display = \"none\";\n            }\n\n            this.root.classList.add(\"jackpotError\");\n            const oldValue = this.formatValue(\n                this.previousCounterValue > 0 ? this.previousCounterValue.toString() : \"\",\n                true,\n            );\n            const newValue = this.formatValue(\"OFFLINE\", true);\n\n            this.resetDigitTween(true);\n            this.animateDigits(\n                oldValue,\n                newValue,\n                false,\n                false,\n                JackpotCounter.DigitAnimDuration * 2,\n                0,\n                \"linear\",\n                false,\n                null,\n            );\n        }\n    }\n\n    private errorResetAnim(): void {\n        this.root.classList.add(\"jackpotExpired\");\n    }\n\n    private checkError(): boolean {\n        if (this.inError) {\n            this.resetMainTween();\n            this.resetDigitTween();\n            this.isCounting = false;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    private removeError(): void {\n        if (this.inError) {\n            this.inError = false;\n\n            this.root.classList.remove(\"jackpotError\");\n            if (this.decimalDot) {\n                this.decimalDot.style.display = \"block\";\n            }\n        }\n    }\n\n    public hasError(): boolean {\n        return this.inError;\n    }\n\n    public refreshWithReset(): void {\n        this.hasWin(); //update last wins to not showing old wins\n        this.root.classList.remove(\"jackpotWin\");\n        this.winAnimationDelay.stop();\n        this.resetMainTween();\n        this.resetDigitTween();\n        this.resetDigitsTween();\n        this.isCounting = false;\n        this.removeError();\n        this.reset(JackpotCounter.MinResetAnimCount - 3);\n    }\n\n    private resetDigitsTween(): void {\n        for (let i = 0; i < this.digits.length; i++) {\n            TweenLite.killTweensOf(this.digits[i].to);\n            TweenLite.killTweensOf(this.digits[i].from);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  COUNTING\n    //******************************************************************************************************************\n\n    protected animateDigits(\n        oldValue: string,\n        newValue: string,\n        useBitmap: boolean,\n        checkFirstDiff: boolean,\n        duration: number,\n        delay: number,\n        ease: string,\n        shuffle: boolean,\n        callback: () => void,\n    ): void {\n        let firstDigitIndex = 0;\n        if (checkFirstDiff) {\n            for (let i = 0; i < JackpotCounter.Length; i++) {\n                const oldDigit = oldValue.charAt(i);\n                const newDigit = newValue.charAt(i);\n\n                if (oldDigit !== newDigit) {\n                    firstDigitIndex = i;\n                    break;\n                }\n            }\n        }\n\n        for (let i = firstDigitIndex; i < JackpotCounter.Length; i++) {\n            const oldDigit = oldValue.charAt(i);\n            const newDigit = newValue.charAt(i);\n\n            this.animateDigit(\n                i,\n                oldDigit,\n                newDigit,\n                duration,\n                delay,\n                ease,\n                useBitmap,\n                shuffle ? (i % 2 === 0 ? 1 : -1) : 1,\n                i === JackpotCounter.Length - 1 ? callback : null,\n            );\n        }\n    }\n\n    protected animateDigit(\n        index: number,\n        fromValue: string,\n        toValue: string,\n        duration: number,\n        delay: number,\n        ease: string,\n        useBitmap: boolean,\n        direction: number,\n        callback: () => void,\n    ): void {\n        const from = this.digits[index].from;\n        this.setTransformY(from, 0, delay);\n        this.setDigitValue(from, fromValue, useBitmap, true);\n        TweenLite.fromTo(\n            from,\n            duration,\n            { y: 0 },\n            { y: this.settings.height * direction * -1, ease: ease, delay: delay },\n        );\n\n        const to = this.digits[index].to;\n        this.setTransformY(to, this.settings.height * direction, delay);\n        this.setDigitValue(to, toValue, useBitmap);\n        TweenLite.killTweensOf(to); //prevent tween from bad finishing, progress stop at 0.8 and don't emit onComplete\n        let tween = TweenLite.fromTo(\n            to,\n            duration,\n            { y: this.settings.height * direction },\n            { y: 0, ease: ease, delay: delay },\n        );\n\n        if (!Utils.isNullOrUndefined(callback)) {\n            this.digitTween = tween;\n            this.digitTween.eventCallback(\"onComplete\", callback, [], this);\n        }\n    }\n\n    protected setDigitValue(elem: HTMLElement, value: string, useBitmap: boolean, fromValue: boolean = false): void {\n        if (fromValue) {\n            if (useBitmap && elem.classList.contains(\"letter\")) {\n                useBitmap = false;\n            } else if (!useBitmap && !elem.classList.contains(\"letter\")) {\n                useBitmap = true;\n            }\n        }\n\n        if (value == null || value === JackpotCounter.LeadingZeroLetter) {\n            elem.className = \"digit leadingZero\";\n        } else {\n            if (!useBitmap) {\n                elem.textContent = value;\n                elem.className = \"digit letter\";\n            } else {\n                elem.textContent = \"\";\n                elem.className = \"digit n\" + value;\n            }\n        }\n    }\n\n    protected setTransformY(elem: HTMLElement, y: number, delay: number): void {\n        if (delay > 0) {\n            elem.style.transform = \"transform3d(0, \" + y + \"px, 0)\";\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH & RESET\n    //******************************************************************************************************************\n\n    private refresh() {\n        if (this.checkError()) {\n            return;\n        }\n\n        //if there where win\n        if (this.hasWin()) {\n            this.isCounting = true;\n            this.initWinAnimation();\n            return;\n        }\n\n        //if there is no new nextValue\n        if (this.currentCounterValue == this.nextValue) {\n            this.resetDigitTween();\n            this.resetDigitsToBasePosition();\n            this.lastUpdateTime = Date.now();\n\n            //run empty tween do handle idle state\n            const availableTime = (this.nextDate - Date.now()) * 0.001;\n            if (availableTime > 0) {\n                this.resetMainTween();\n                this.mainTween = TweenLite.fromTo(\n                    this,\n                    availableTime,\n                    { idleValue: 0 },\n                    { idleValue: 100, ease: \"linear\" },\n                );\n                this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\n            } else {\n                this.isCounting = false;\n            }\n\n            return;\n        }\n\n        //if new value is lower then current value\n        if (this.currentCounterValue > this.nextValue) {\n            this.isCounting = false;\n            return;\n        }\n\n        const availableTime = (this.nextDate - Date.now()) * 0.001;\n        this.resetMainTween();\n        this.mainTween = TweenLite.fromTo(\n            this,\n            availableTime,\n            { currentCounterValue: this.currentCounterValue },\n            { currentCounterValue: this.nextValue, ease: \"linear\", roundProps: \"currentCounterValue\" },\n        );\n        this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\n        this.mainTween.eventCallback(\"onUpdate\", this.onRefreshTweenUpdate, [], this);\n\n        this.isCounting = true;\n    }\n\n    private onRefreshTweenUpdate(): void {\n        if (this.digitTween == null) {\n            this.refreshCounter();\n        }\n    }\n\n    private refreshCounter(): void {\n        if (this.inError) {\n            this.resetDigitTween();\n            return;\n        }\n\n        if (this.previousCounterValue == this.currentCounterValue) {\n            this.resetDigitTween();\n            return;\n        }\n\n        const oldValue = this.formatValue(this.previousCounterValue.toString(), true);\n        const newValue = this.formatValue(this.currentCounterValue.toString(), true);\n\n        this.lastUpdateTime = Date.now();\n\n        this.animateDigits(\n            oldValue,\n            newValue,\n            true,\n            true,\n            JackpotCounter.DigitAnimDuration * 2,\n            0,\n            \"linear\",\n            false,\n            this.refreshCounter,\n        );\n        this.previousCounterValue = this.currentCounterValue;\n    }\n\n    private reset(resetAnimCount: number = 0): void {\n        this.resetAnimCount = resetAnimCount;\n        this.isCounting = true;\n\n        this.resetCounter();\n    }\n\n    private resetCounter(): void {\n        if (this.checkError()) {\n            return;\n        }\n\n        if (this.resetAnimCount >= JackpotCounter.MinResetAnimCount - 1 && this.currentData != null) {\n            //if we have win right after reset\n            if (this.hasWin()) {\n                this.resetDigitTween(); //we need to reset digit tween to allow win anim start during reset anim\n                this.isCounting = true;\n                this.initWinAnimation();\n                return;\n            }\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), false);\n            const newValue = this.formatValue(this.previousValue.toString(), true);\n\n            this.currentCounterValue = this.previousValue;\n            this.previousCounterValue = this.previousValue;\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                false,\n                JackpotCounter.DigitAnimDuration * 10,\n                0,\n                \"Back.easeOut\",\n                true,\n                this.resetFinished,\n            );\n        } else {\n            this.resetAnimCount++;\n            const random = Math.random();\n            const length = Math.pow(10, JackpotCounter.Length);\n            const value = Math.round(random * length);\n\n            const oldValue = this.formatValue(\n                this.currentCounterValue > 0 ? this.currentCounterValue.toString() : \"\",\n                false,\n            );\n            const newValue = this.formatValue(value.toString(), false);\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                false,\n                JackpotCounter.DigitAnimDuration,\n                0,\n                \"linear\",\n                true,\n                this.resetCounter,\n            );\n            this.currentCounterValue = value;\n        }\n    }\n\n    private resetFinished(): void {\n        this.lastUpdateTime = Date.now();\n        this.resetDigitTween();\n        this.isCounting = false;\n        this.refresh();\n    }\n\n    //******************************************************************************************************************\n    //  WIN\n    //******************************************************************************************************************\n\n    private hasWin(): boolean {\n        let result = false;\n        if (this.currentData != null && this.currentData.lastWinAmount != null) {\n            const currentLastWin =\n                this.overridedLastWinValue > -1\n                    ? this.overridedLastWinValue\n                    : this.normalizeValue(this.currentData.lastWinAmount);\n            const currentWinCount = this.currentData.winCount; //could be undefined during minigame spin\n\n            if (this.lastWinValue > -1) {\n                result = this.lastWinValue != currentLastWin;\n\n                //second check if new win amount is same like last one\n                //check only if it is not win from minigame (it has its own override)\n                if (!result && this.lastWinCount > -1 && currentWinCount > -1 && !this.winFromMinigame) {\n                    result = this.lastWinCount != currentWinCount;\n                }\n            }\n\n            this.lastWinCount = currentWinCount;\n            this.lastWinValue = currentLastWin;\n            this.overridedLastWinValue = -1;\n        }\n\n        return result || this.winFromMinigame;\n    }\n\n    private initWinAnimation(): void {\n        this.resetMainTween();\n\n        if (this.digitTween != null) {\n            this.digitTween.eventCallback(\"onComplete\", this.startWinAnimation, [], this);\n        } else {\n            this.startWinAnimation();\n        }\n    }\n\n    private startWinAnimation(): void {\n        if (this.currentCounterValue != this.lastWinValue) {\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), true);\n            const newValue = this.formatValue(this.lastWinValue.toString(), true);\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                true,\n                JackpotCounter.DigitAnimDuration * 2,\n                0,\n                \"linear\",\n                false,\n                this.showWinAnimation,\n            );\n            this.previousCounterValue = this.currentCounterValue;\n        } else {\n            this.showWinAnimation();\n        }\n\n        this.winAnimationDelay.start(\n            this.winFromMinigame ? JackpotCounter.WinFromMinigameAnimDuration : JackpotCounter.WinAnimDuration,\n        );\n    }\n\n    private showWinAnimation(): void {\n        this.forceWinValue();\n        this.root.classList.add(\"jackpotWin\");\n\n        if (this.winFromMinigame) {\n            this.root.classList.add(\"fromMinigame\");\n        }\n    }\n\n    private winAnimationFinished(): void {\n        this.winFromMinigame = false;\n        this.root.classList.remove(\"jackpotWin\", \"fromMinigame\");\n        this.reset();\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    public getHeight(): number {\n        if (this.root.parentElement != null) {\n            this.root.parentElement.classList.add(\"baseCounterHeight\");\n            this.root.parentElement.offsetWidth;\n\n            let height = parseInt(window.getComputedStyle(this.root.parentElement).height);\n            this.root.parentElement.classList.remove(\"baseCounterHeight\");\n\n            return height;\n        }\n\n        return 0;\n    }\n\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    protected normalizeValue(value: number): number {\n        let formattedValue = Languages.formatText(Languages.FormatMoney, value.toString());\n        formattedValue = formattedValue.replace(\".\", \"\");\n\n        value = parseInt(formattedValue);\n\n        if (value >= Math.pow(10, JackpotCounter.Length)) {\n            let normalizedValue = \"\";\n\n            for (let i = 0; i < JackpotCounter.Length; i++) {\n                normalizedValue = `9${normalizedValue}`;\n            }\n\n            return parseInt(normalizedValue);\n        }\n\n        return value;\n    }\n\n    protected formatValue(formattedValue: string, leading: boolean): string {\n        if (formattedValue.length > JackpotCounter.Length) {\n            formattedValue = formattedValue.substr(formattedValue.length - JackpotCounter.Length);\n        } else {\n            while (formattedValue.length < JackpotCounter.DecimalPlaces + 1) {\n                formattedValue = `0${formattedValue}`;\n            }\n\n            while (formattedValue.length < JackpotCounter.Length) {\n                formattedValue = `${leading ? JackpotCounter.LeadingZeroLetter : \"0\"}${formattedValue}`;\n            }\n        }\n\n        return formattedValue;\n    }\n\n    protected resetMainTween(): void {\n        if (this.mainTween != null) {\n            this.mainTween.kill();\n            this.mainTween.eventCallback(\"onComplete\", null);\n            this.mainTween.eventCallback(\"onUpdate\", null);\n            this.mainTween = null;\n        }\n    }\n\n    protected resetDigitTween(onlyCallback: boolean = false): void {\n        if (this.digitTween != null) {\n            this.digitTween.eventCallback(\"onComplete\", null);\n\n            if (!onlyCallback) {\n                this.digitTween.kill();\n            }\n\n            this.digitTween = null;\n        }\n    }\n\n    protected resetDigitsToBasePosition(): void {\n        const currentValue = this.formatValue(this.currentCounterValue.toString(), true);\n\n        for (let i = 0; i < this.digits.length; i++) {\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\n\n            this.digits[i].from.setAttribute(\n                \"style\",\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\n            );\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\n        }\n    }\n\n    protected forceWinValue(): void {\n        const currentValue = this.formatValue(this.lastWinValue.toString(), true);\n\n        for (let i = 0; i < this.digits.length; i++) {\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\n\n            this.digits[i].from.setAttribute(\n                \"style\",\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\n            );\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotCounter.ts\n **/","import { NumberUtils, Logger } from \"neo-common\";\nimport { Strings } from \"../../Common/Strings\";\nimport { AppContext } from \"../../Common/AppContext\";\n\n/**\n * Working with languages and texts. Get langugages based on rid, format and filter texts.\n * @class Languages\n */\nexport class Languages {\n    // formats static variables\n    static FormatMoney: string = \"MONEY\";\n\n    // filters static variables\n    static FilterNoZero: string = \"NO_ZERO\";\n\n    /**\n     * Return text based on rid.\n     * @method getRid\n     * @param rid string\n     * @param ...value Array<string>\n     * @return string\n     */\n    static getRid(rid: string, ...value: Array<string>): string {\n        if (value != null && value.length > 0) {\n            return Strings.getWithValues(rid, ...value);\n        } else {\n            return Strings.get(rid);\n        }\n    }\n\n    /**\n     * Format text based in ridType.\n     * @method formatText\n     * @param ridType string\n     * @param text string\n     * @return string\n     */\n    static formatText(ridType: string, text: string): string {\n        switch (ridType) {\n            case this.FormatMoney:\n                return NumberUtils.valueToNumber(text, AppContext.gameConfiguration.ShowDecimalPlaces);\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknow RidType: \" + ridType);\n                }\n        }\n        return text;\n    }\n\n    /**\n     * Filter text based on RidFilter.\n     * @method filtertext\n     * @param ridFilter string\n     * @param text string\n     * @return string\n     */\n    static filterText(ridFilter: string, text: string): string {\n        switch (ridFilter) {\n            case this.FilterNoZero:\n                if (parseFloat(text) <= 0) {\n                    return \"\";\n                } else {\n                    return text;\n                }\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknow RidFilter: \" + ridFilter);\n                }\n        }\n        return text;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Languages\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Languages.ts\n **/","import { DateUtils, StringUtils, CommonTypes } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { JackpotData } from \"../Datas/JackpotData\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\n\nexport class JackpotHistoryDialog {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected root: HTMLElement;\n\n    protected currency: string;\n\n    protected historyDataElements: { [dataId: string]: HTMLElement };\n\n    protected initialized: boolean;\n\n    protected lastData: IProgressiveBonusLevel;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(index: number, holder: HTMLElement) {\n        this.root = this.createBaseLayout(index);\n        this.currency = \"\";\n        this.historyDataElements = {};\n\n        holder.appendChild(this.root);\n    }\n\n    //******************************************************************************************************************\n    //  INIT\n    //******************************************************************************************************************\n\n    public initialize(initData: IProgressiveBonusLevel): void {\n        this.createDataSections();\n        this.initialized = true;\n\n        if (initData) {\n            this.assign(initData);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LAYOUT\n    //******************************************************************************************************************\n\n    protected createBaseLayout(index: number): HTMLElement {\n        return this.createElement(\"div\", \"jackpotHistoryDialog _disabled l-\" + index);\n    }\n\n    protected createDataSections(): void {\n        if (this.root) {\n            let section: HTMLElement;\n            let dataHolder: HTMLElement;\n\n            //close btn only in mobile\n            // if (window[\"CHANNEL\"] === 'mobile') {\n            let closeBtn = this.createElement(\"div\", \"jackpotCloseBtn\", this.root);\n            closeBtn.addEventListener(\"touchstart\", (e: Event) => {\n                e.preventDefault();\n                e.stopPropagation();\n                Jackpot.closeAllHistoryDialogs();\n            });\n            closeBtn.addEventListener(\"click\", () => {\n                Jackpot.closeAllHistoryDialogs();\n            });\n            // }\n\n            //DataCode\n            section = this.createElement(\"div\", \"jackpotHistorySection\", this.root);\n            this.createElement(\"div\", \"jackpotLevel\", section);\n            this.createDataElement(\"div\", \"jackpotTitle\", JackpotData.DataCode, section);\n\n            //DataHighestWinAmount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_HIGHEST_WIN\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataHighestWinDate, dataHolder);\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataHighestWinAmount, section);\n\n            this.assingData(JackpotData.DataHighestWinDate, \"-\");\n            this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n\n            //DataWinCount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_NUM_WINS\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataWinCount, dataHolder);\n\n            this.assingData(JackpotData.DataWinCount, \"-\");\n\n            //DataLastWinAmount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_LAST_WIN\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataLastWinDate, dataHolder);\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataLastWinAmount, section);\n\n            this.assingData(JackpotData.DataLastWinDate, \"-\");\n            this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n\n            this.showWins(false);\n        }\n    }\n\n    public updateDataWithCurrency(): void {\n        if (this.lastData != null) {\n            this.assign(this.lastData);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ERRORS\n    //******************************************************************************************************************\n\n    public error(useResetAnim: boolean = false): void {\n        if (useResetAnim) {\n            this.root.classList.add(\"jackpotExpired\");\n        } else {\n            if (this.initialized) {\n                this.showWins(false);\n\n                this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n                this.assingData(JackpotData.DataLastWinDate, \"-\");\n                this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n                this.assingData(JackpotData.DataHighestWinDate, \"-\");\n                this.assingData(JackpotData.DataWinCount, \"-\");\n            } else {\n                this.initialize(null);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ASSIGN\n    //******************************************************************************************************************\n\n    public assign(data: IProgressiveBonusLevel): void {\n        this.lastData = data;\n\n        if (this.initialized) {\n            this.assingData(JackpotData.DataCode, data.code);\n            this.assingData(\n                JackpotData.DataLastWinAmount,\n                data.lastWinAmount ? Languages.formatText(Languages.FormatMoney, data.lastWinAmount.toString()) : null,\n                \"money\",\n            );\n            this.assingData(JackpotData.DataLastWinDate, data.lastWinDate, \"date\");\n            this.assingData(\n                JackpotData.DataHighestWinAmount,\n                data.highestWinAmount\n                    ? Languages.formatText(Languages.FormatMoney, data.highestWinAmount.toString())\n                    : null,\n                \"money\",\n            );\n            this.assingData(JackpotData.DataHighestWinDate, data.highestWinDate, \"date\");\n            this.assingData(JackpotData.DataWinCount, data.winCount ? data.winCount.toString() : null);\n\n            this.showWins();\n        } else {\n            this.initialize(data);\n        }\n    }\n\n    private assingData(dataId: string, value: string, format: string = \"\"): void {\n        if (this.historyDataElements && this.historyDataElements[dataId] && !StringUtils.isNullOrEmpty(value)) {\n            if (format != \"\") {\n                switch (format) {\n                    case \"money\":\n                        value = value + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                        break;\n                    case \"date\":\n                        let date = new Date(value);\n                        value =\n                            this.zerosPad(date.getDate(), 2) +\n                            \". \" +\n                            this.zerosPad(date.getMonth() + 1, 2) +\n                            \". \" +\n                            date.getFullYear();\n                }\n            }\n\n            this.historyDataElements[dataId].textContent = value;\n        }\n    }\n\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    //******************************************************************************************************************\n    //  HANDLER\n    //******************************************************************************************************************\n\n    public openDialog(): void {\n        this.root.classList.remove(\"_disabled\");\n    }\n\n    public closeDialog(): void {\n        this.root.classList.add(\"_disabled\");\n    }\n\n    public isOpen(): boolean {\n        return !this.root.classList.contains(\"_disabled\");\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    private showWins(enabled: boolean = true): void {\n        const winSections = this.root.getElementsByClassName(\"jackpotHistoryData\");\n\n        for (let i = 0; i < winSections.length; i++) {\n            const elem = <HTMLElement>winSections[i];\n            elem.style.display = enabled ? \"\" : \"none\";\n        }\n\n        const titleSections = this.root.getElementsByClassName(\"jackpotTitle\");\n\n        for (let i = 0; i < titleSections.length; i++) {\n            const elem = <HTMLElement>titleSections[i];\n            elem.style.display = enabled ? (elem.textContent == \"\" ? \"none\" : \"\") : \"none\";\n        }\n\n        //NoWins\n        const noWinSections = this.root.getElementsByClassName(\"jackpotHistoryNoWins\");\n        if (enabled) {\n            for (let i = 0; i < noWinSections.length; i++) {\n                noWinSections[i].parentNode.removeChild(noWinSections[i]);\n            }\n        } else {\n            if (noWinSections.length == 0) {\n                const section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryNoWins\", this.root);\n                this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataNoWins, section);\n                this.assingData(JackpotData.DataNoWins, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n            }\n        }\n    }\n\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n        elem.textContent = text;\n\n        return elem;\n    }\n\n    private createDataElement(tag: string, className: string, dataId: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n\n        if (this.historyDataElements) {\n            this.historyDataElements[dataId] = elem;\n        }\n\n        return elem;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotHistoryDialog.ts\n **/","export class JackpotData {\n    static DataCode: string = \"code\";\n    static DataHighestWinDate: string = \"highestWinDate\";\n    static DataHighestWinAmount: string = \"highestWinAmount\";\n    static DataWinCount: string = \"winCount\";\n    static DataLastWinDate: string = \"lastWinDate\";\n    static DataLastWinAmount: string = \"lastWinAmount\";\n    static DataNoWins: string = \"noWins\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/JackpotData.ts\n **/","export class GameData {\n    static DataTicker: string = \"TICKER\";\n    static DataRoundId: string = \"ROUND_ID\";\n    static DataBuildVersion: string = \"BUILD_VERSION\";\n    static DataBalanceReal: string = \"BALANCE_REAL\";\n    static DataBalanceBonus: string = \"BALANCE_BONUS\";\n    static DataBalanceTotal: string = \"BALANCE_TOTAL\";\n    static DataBalanceRealDenom: string = \"BALANCE_REAL_DENOM\";\n    static DataBalanceBonusDenom: string = \"BALANCE_BONUS_DENOM\";\n    static DataBalanceTotalDenom: string = \"BALANCE_TOTAL_DENOM\";\n    static DataCurrency: string = \"CURRENCY\";\n    static DataDenomination: string = \"DENOMINATION\";\n    static DataCurrentWin: string = \"CURRENT_WIN\";\n    static DataTotalWin: string = \"TOTAL_WIN\";\n    static DataTotalWinDenom: string = \"TOTAL_WIN_DENOM\";\n    static DataCoinSize: string = \"COIN_SIZE\";\n    static DataCointCount: string = \"COIN_COUNT\";\n    static DataPaylineCount: string = \"PAYLINE_COUNT\";\n    static DataBet: string = \"BET\";\n    static DataBetPosition: string = \"BET_POSITION\";\n    static DataGambleCurrentWin: string = \"GAMBLE_WIN\";\n    static DataGambleColorWin: string = \"GAMBLE_COLOR_WIN\";\n    static DataGambleCurrentWinDenom: string = \"GAMBLE_WIN_DENOM\";\n    static DataGambleColorWinDenom: string = \"GAMBLE_COLOR_WIN_DENOM\";\n    static DataAutoplayCount: string = \"AUTOPLAY_COUNT\";\n    static DataFreeSpinTotalWin: string = \"FREESPIN_TOTAL_WIN\";\n    static DataFreeSpinTotalWinDenom: string = \"FREESPIN_TOTAL_WIN_DENOM\";\n    static DataFreeSpinsCount: string = \"FREESPINS_COUNT\";\n    static DataFreeSpinsRemainingCount: string = \"FREESPINS_REMAINING_COUNT\";\n    static DataFreeSpinsWonCount: string = \"FREESPINS_WON_COUNT\";\n    static DataGambleAttempts: string = \"GAMBLE_ATTEMPTS\";\n    static DataHelpGameLimit: string = \"HELP_GAME_LIMIT\";\n    static DataHelpGambleLimit: string = \"HELP_GAMBLE_LIMIT\";\n    static DataHelpGambleCountLimit: string = \"HELP_GAMBLE_COUNT_LIMIT\";\n    static DataHelpRTP: string = \"HELP_RTP\";\n    static DataHelpMaxPayoutProbability: string = \"HELP_MAX_PAYOUT_PROBABILITY\";\n    static DataHelpMaxPayoutFrequency: string = \"HELP_MAX_PAYOUT_FREQUENCY\";\n    static DataHelpMinBet: string = \"HELP_MIN_BET\";\n    static DataHelpMaxBet: string = \"HELP_MAX_BET\";\n    static DataHelpVersion: string = \"HELP_VERSION\";\n    static DataExpirationResolveHours: string = \"EXPIRATION_RESOLVE_HOURS\";\n    static DataFrbRemainginCount: string = \"FRB_REMAINING_COUNT\";\n    static DataFrbAssignedCount: string = \"FRB_ASSIGNED_COUNT\";\n    static DataFrbRulesLink: string = \"FRB_RULES_LINK\";\n    static DataFrbValidTo: string = \"FRB_VALID_TO\";\n    static DataFrbExpiryTime: string = \"FRB_EXPIRY_TIME\";\n    static DataFrbWin: string = \"FRB_WIN\";\n    static DataGameTitle: string = \"GAME_TITLE\";\n    static DataHelpJackpotVisibleLimit: string = \"HELP_JACKPOT_VISIBLE_LIMIT\";\n    static DataHelpJackpotQualifyingBetsMin: string = \"HELP_JACKPOT_QUALIFYING_BETS_MIN\";\n    static DataHelpJackpotQualifyingBetsMax: string = \"HELP_JACKPOT_QUALIFYING_BETS_MAX\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/GameData.ts\n **/","import { ArrayUtils, Logger, NumberUtils, StringUtils, Utils } from \"neo-common\";\nimport { ClientHost, Communication, Plugins, Platforms } from \"neo-games\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { BetManager } from \"./BetManager\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { Languages } from \"../Utils/Languages\";\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\nimport { GameApp } from \"../GameApp\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { FreeRoundBonusExtended } from \"../Channels/Common/Bonuses/FreeRoundBonusExtended\";\nimport { UserAction } from \"../HTMLComponents/UserAction\";\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { StageController } from \"../Components/StageController\";\nimport { IReel } from \"neo-games/Engine/Communication/Game/Types/IReel\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\n\ntype InitResponse = Communication.Game.InitResponse;\nvar GameEvents = ClientHost.GameEvents;\n\ntype ServerTimeResponse = Communication.Game.ServerTimeResponse;\n\nexport type CustomBetData = { betAmount: number; reelsData: Array<IReel> };\n\nexport class DataManager {\n    private static _gameData: { [data: string]: string } = {};\n\n    public static DisplayCurrencies: { [data: string]: string } = null;\n\n    private static serverTimeOffset: number = -1;\n\n    private static time: string = \"\";\n\n    private static utcTime: string = \"\";\n\n    private static serverTimeResponseTimestamp: number = 0;\n\n    private static TrustedUserActions: Array<string> = [];\n\n    static GameRoundClosed: boolean = false;\n    static Collectable: boolean = true;\n    static GameLimit: boolean = false;\n\n    static AutoplayCount: string = \"∞\";\n    static AutoplayLossLimit: string = \"∞\";\n    static AutoplayWinLimit: string = \"∞\";\n    private static _autoplay: boolean = false;\n    static AutoplayEnabled: boolean = true;\n    static AutoplayAfterGamble: boolean = false;\n\n    static QuickspinEnabled: boolean = false;\n    private static _quickstopTimes: Array<number> = [];\n\n    static VibrationEnabled: boolean = false;\n\n    static HelpDataGameLimit: number = 0;\n    static HelpDataGambleLimit: number = 0;\n\n    static BackSoundsPlayingFromGame: boolean = true;\n\n    static SimilarGames: SimilarGames;\n\n    static customBetsData: CustomBetData[] = [];\n\n    static AutoplayStarted: boolean = false;\n\n    static set Autoplay(value: boolean) {\n        if (DataManager._autoplay != value) {\n            if (value) {\n                DataManager.AutoplayStarted = true;\n                Platforms.Platforms.autoplayStarted();\n            } else {\n                Platforms.Platforms.autoplayFinished({\n                    autoplayCount: this.AutoplayCount,\n                    autoplayLossLimit: this.AutoplayLossLimit,\n                    autoplayWinLimit: this.AutoplayWinLimit,\n                });\n            }\n\n            DataManager._autoplay = value;\n        } else {\n            DataManager.AutoplayStarted = false;\n        }\n    }\n\n    static get Autoplay() {\n        return DataManager._autoplay;\n    }\n\n    static controlAutoplay(): void {\n        if (GameApp.gameClient != null) {\n            GameApp.gameClient.setAutoplay(DataManager.Autoplay);\n        }\n    }\n\n    static autoplayEnabled(): boolean {\n        if (AppContext.gameConfiguration.AutoplayModeEnabled && DataManager.AutoplayEnabled) {\n            return true;\n        }\n        return false;\n    }\n\n    static quickspinEnabled(): boolean {\n        return DataManager.gameEnableQuickSpin() && DataManager.QuickspinEnabled;\n    }\n\n    static gameEnableQuickSpin(): boolean {\n        return (\n            AppContext.gameConfiguration.GameEnableReelsStop &&\n            AppContext.gameConfiguration.MinGameRoundDuration == 0 &&\n            AppContext.gameConfiguration.GameRoundMinSpan == 0 &&\n            AppContext.gameConfiguration.GameEnableQuickSpin\n        );\n    }\n\n    static quickspinSet(toValue?: boolean): boolean {\n        if (DataManager.gameEnableQuickSpin()) {\n            if (typeof toValue === \"boolean\") {\n                DataManager.QuickspinEnabled = toValue;\n                HtmlController.updateDataElement(UserAction.ActionQuickspinToggle, toValue ? \"true\" : \"false\");\n            } else {\n                DataManager.QuickspinEnabled = !DataManager.QuickspinEnabled;\n                HtmlController.updateDataElement(\n                    UserAction.ActionQuickspinToggle,\n                    DataManager.QuickspinEnabled ? \"true\" : \"false\",\n                );\n            }\n            if (DEBUG) {\n                this.log(\"Quickspin \" + (DataManager.QuickspinEnabled ? \"on\" : \"off\"));\n            }\n        }\n        Platforms.Platforms.quickSpinEnabled(DataManager.QuickspinEnabled);\n        return DataManager.QuickspinEnabled;\n    }\n\n    static quickspinStopped() {\n        if (DataManager._quickstopTimes != null) {\n            DataManager._quickstopTimes.push(Date.now() * 0.001);\n\n            //we have enough quickstop clicks, check interval\n            if (DataManager._quickstopTimes.length == AppContext.gameConfiguration.QuickSpinDialogCount) {\n                let timeDiff =\n                    DataManager._quickstopTimes[DataManager._quickstopTimes.length - 1] -\n                    DataManager._quickstopTimes[0];\n\n                if (timeDiff < AppContext.gameConfiguration.QuickSpinDecayDelay) {\n                    if (DataManager.gameEnableQuickSpin() && !DataManager.QuickspinEnabled) {\n                        QuickspinDialog.openDialog();\n                        DataManager._quickstopTimes = null;\n                    }\n                } else {\n                    DataManager._quickstopTimes.shift();\n                }\n            }\n        }\n    }\n\n    static vibrationSet(toValue?: boolean): boolean {\n        if (AppContext.gameConfiguration.GameEnableVibration) {\n            if (typeof toValue === \"boolean\") {\n                DataManager.VibrationEnabled = toValue;\n                HtmlController.updateDataElement(UserAction.ActionVibrationToggle, toValue ? \"true\" : \"false\");\n            } else {\n                DataManager.VibrationEnabled = !DataManager.VibrationEnabled;\n                HtmlController.updateDataElement(\n                    UserAction.ActionVibrationToggle,\n                    DataManager.VibrationEnabled ? \"true\" : \"false\",\n                );\n            }\n            if (DEBUG) {\n                this.log(\"Vibration \" + (DataManager.VibrationEnabled ? \"on\" : \"off\"));\n            }\n        }\n\n        return DataManager.VibrationEnabled;\n    }\n\n    static updateResponseData(init?: boolean): void {\n        DataManager.GameRoundClosed = false;\n\n        if (!Utils.isNullOrUndefined(GameManager.gameResponse)) {\n            let status: any = GameManager.gameResponse.status;\n\n            if (status != null && status === \"closed\") {\n                DataManager.GameRoundClosed = true;\n            }\n\n            if (GameManager.gameResponse.limits != null) {\n                DataManager.GameLimit = true;\n            } else {\n                DataManager.GameLimit = false;\n            }\n\n            if (init || !(FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n                // Don't set balance in last cumulative FRB (except init state)\n                BalanceManager.setBalance();\n            }\n\n            if (init) {\n                var initResponse = GameManager.gameResponse as InitResponse;\n                if (initResponse.initData != null && initResponse.initData.currency != null) {\n                    DataManager.updateGameDataFromModule(GameData.DataCurrency, initResponse.initData.currency);\n                }\n\n                BetManager.initializeBet();\n                DataManager.configureHelpData();\n\n                if (\n                    GameManager.gameResponse.balance != null &&\n                    GameManager.gameResponse.balance.bonus != null &&\n                    GameManager.gameResponse.balance.bonus >= BetManager.Bet\n                ) {\n                    ModuleManager.changeBetColor(true);\n                }\n\n                if (GameManager.baseResponse.initData != null) {\n                    if (\n                        GameManager.baseResponse.initData.customData != null &&\n                        GameManager.baseResponse.initData.customData[\"betsData\"] !== null\n                    ) {\n                        this.customBetsData = GameManager.baseResponse.initData.customData[\"betsData\"];\n                    }\n                }\n\n                DataManager.updateDataElements();\n            }\n\n            if (GameManager.gameResponse.roundId != null) {\n                const elements = document.getElementsByClassName(\"roundId\");\n\n                for (let i = 0; i < elements.length; i++) {\n                    const element = <HTMLElement>elements[i];\n\n                    if (element != null) {\n                        if (!AppContext.gameConfiguration.GameRoundIdVisible) {\n                            element.style.opacity = \"0\";\n                        } else if (GameManager.gameResponse.roundId === -1) {\n                            element.style.opacity = \"1\";\n                        }\n                    }\n                }\n\n                DataManager.updateGameDataFromModule(\n                    GameData.DataRoundId,\n                    GameManager.gameResponse.roundId === -1 ? \"DEMO\" : GameManager.gameResponse.roundId.toString(),\n                );\n            }\n\n            DataManager.updateTotalWin();\n        }\n\n        if (!Jackpot.hasMiniGame()) {\n            BalanceManager.poolingBalance();\n        }\n\n        if (\n            GameManager.gameResponse[\"progressiveBonus\"] &&\n            GameManager.gameResponse[\"progressiveBonus\"].offline === true\n        ) {\n            Jackpot.showError();\n        } else {\n            Jackpot.reinitialize();\n        }\n    }\n\n    /**\n     * Update data for bet currently playing.\n     */\n    static updateCustomBetsData() {\n        const customData = GameManager.baseResponse.customData;\n        if (!Utils.isNullOrUndefined(customData) && customData[\"betAmount\"] == BetManager.Bet) {\n            for (let key in DataManager.customBetsData) {\n                if (DataManager.customBetsData[key].betAmount == BetManager.Bet) {\n                    DataManager.customBetsData[key].reelsData = GameManager.baseResponse.screen.reels;\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Get custom bet data for selected bet amount.\n     */\n    static getCustomBetDataForCurrentBetAmount(): CustomBetData {\n        if (!Utils.isNullOrUndefined(DataManager.customBetsData)) {\n            for (let key in DataManager.customBetsData) {\n                const customBetData: CustomBetData = DataManager.customBetsData[key];\n                if (customBetData.betAmount == BetManager.Bet) {\n                    return customBetData;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     *\n     */\n    static updateTotalWin(): void {\n        if (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            // FRB cumulative win pay method\n            if (\n                GameManager.gameResponse[\"freeRounds\"] != null &&\n                GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null\n            ) {\n                if (DataManager.GameRoundClosed) {\n                    // Standard case\n                    const totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n                    DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\n\n                    if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataTotalWinDenom,\n                            parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\n                        );\n                    }\n                } else {\n                    if (GameManager.gameResponse.totalWin != null) {\n                        const totalWin = NumberUtils.add(\n                            GameManager.gameResponse[\"freeRounds\"][\"totalWin\"],\n                            GameManager.gameResponse.totalWin,\n                        );\n                        DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\n\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataTotalWinDenom,\n                                parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\n                            );\n                        }\n                    }\n                }\n            }\n        } else if (GameManager.gameResponse.totalWin != null) {\n            // Standard case\n            DataManager.updateGameDataFromModule(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n    }\n\n    static updateTotalGain(calculate: boolean = false, customWin: number = 0): void {\n        if (\n            GameManager.gameResponse.totalGain != null &&\n            AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.TOTAL_GAIN) > -1\n        ) {\n            let totalGain = GameManager.gameResponse.totalGain;\n            if (calculate) {\n                const bet = FreeRoundBonus.inFrb ? 0 : BetManager.Bet;\n                totalGain = parseFloat(NumberUtils.subtract(totalGain, bet));\n\n                if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                    totalGain = parseFloat(NumberUtils.add(totalGain, GameManager.gameResponse.totalWin));\n                }\n            }\n\n            if (customWin > 0) {\n                totalGain = parseFloat(NumberUtils.add(totalGain, customWin));\n            }\n\n            GameManager.gameResponse.totalGain = totalGain;\n            const statusBar = Plugins.StatusBar.getInstance();\n            const resize = !statusBar.hasActiveWidget();\n            statusBar.add(\n                Plugins.StatusBar.Types.TOTAL_GAIN,\n                \"totalGain\",\n                Languages.getRid(\n                    \"SB_INFO_TOTAL_GAIN\",\n                    Languages.formatText(Languages.FormatMoney, totalGain.toString()),\n                ) +\n                    \" \" +\n                    DataManager.getDataById(GameData.DataCurrency),\n            );\n\n            if (resize) {\n                Scaling.resizeRoot();\n            }\n        }\n    }\n\n    static updateGameDataFromModule(dataId: string, value: string): void {\n        if (dataId === GameData.DataCurrency) {\n            if (Utils.isNullOrUndefined(DataManager.DisplayCurrencies)) {\n                DataManager.DisplayCurrencies = {};\n\n                AppContext.gameConfiguration.DisplayCurrencies.forEach((rawPair) => {\n                    const parsedPair = ArrayUtils.stringArray(rawPair);\n\n                    DataManager.DisplayCurrencies[parsedPair[0]] = parsedPair[1];\n                });\n            }\n\n            if (DataManager.DisplayCurrencies.hasOwnProperty(value)) {\n                DataManager._gameData[dataId] = DataManager.DisplayCurrencies[value];\n                return;\n            }\n        }\n\n        DataManager._gameData[dataId] = value;\n    }\n\n    static getDataById(dataId: string): string {\n        if (DataManager._gameData[dataId] != null) {\n            return DataManager._gameData[dataId];\n        }\n        return null;\n    }\n\n    static updateDataElement(dataId: string, customValue?: string): void {\n        if (customValue != null) {\n            HtmlController.updateDataElement(dataId, customValue);\n        } else {\n            if (DataManager._gameData[dataId] != null) {\n                HtmlController.updateDataElement(dataId, DataManager._gameData[dataId]);\n            }\n        }\n    }\n\n    static updateDataElements(): void {\n        HtmlController.updateDataElements(DataManager._gameData);\n        DataManager.updateTotalGain();\n    }\n\n    static getServerTime(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient.sendServerTimerRequest().then((response: ServerTimeResponse) => {\n                DataManager.serverTimeReceived(response);\n\n                if (\n                    AppContext.gameConfiguration.UseServerTime &&\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.ApplicationGatewayUrl)\n                ) {\n                    setTimeout(() => {\n                        DataManager.getServerTime();\n                    }, 30000);\n                }\n            });\n        }\n    }\n\n    static serverTimeReceived(response: ServerTimeResponse): void {\n        if (response == null) {\n            return;\n        }\n\n        if (response.utcTime == null && response.time == null) {\n            return;\n        }\n\n        DataManager.utcTime = response.utcTime;\n        DataManager.time = response.time;\n        DataManager.serverTimeResponseTimestamp = Date.now();\n\n        if (DataManager.utcTime != null) {\n            if (DataManager.utcTime.indexOf(\"Z\") == -1) {\n                DataManager.utcTime = DataManager.utcTime + \"Z\";\n            }\n\n            Platforms.Platforms.clockSync(Date.now() - Date.parse(DataManager.utcTime));\n        }\n\n        if (DataManager.serverTimeOffset === -1) {\n            let currentTime = new Date().getTime();\n            let serverTime = Date.parse(DataManager.utcTime ? DataManager.utcTime.replace(\"Z\", \"\") : DataManager.time);\n\n            DataManager.serverTimeOffset = serverTime - currentTime;\n        }\n    }\n\n    static getFormattedTime(time: Date): string {\n        if (time == null) {\n            return null;\n        }\n\n        //{\"time\":\"2023-09-21T12:00:02.3442838\",\"utcTime\":\"2023-09-21T10:00:02.3442838\"}\n        const year = time.getFullYear();\n        const month = DataManager.zerosPad(time.getMonth() + 1, 2);\n        const day = DataManager.zerosPad(time.getDate(), 2);\n        const hours = DataManager.zerosPad(time.getHours(), 2);\n        const minutes = DataManager.zerosPad(time.getMinutes(), 2);\n        const seconds = DataManager.zerosPad(time.getSeconds(), 2);\n        const milliseconds = time.getMilliseconds();\n\n        return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}`;\n    }\n\n    static zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    static getTimeData(): { utcTime: string; machineLocalTimeZone: number } {\n        const currentTime = new Date();\n        const utcTime = DataManager.getUTCTime();\n        const machineLocalTimeZone = currentTime.getTimezoneOffset() * -1; //in minutes\n\n        return {\n            utcTime: utcTime,\n            machineLocalTimeZone: machineLocalTimeZone,\n        };\n    }\n\n    static getUTCTime(): string {\n        if (!StringUtils.isNullOrEmpty(DataManager.utcTime)) {\n            const currentTime = new Date();\n            const utcResponseTimestamp = Date.parse(DataManager.utcTime);\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\n\n            return new Date(utcResponseTimestamp + lastResponseDiff).toISOString();\n        }\n\n        return new Date().toISOString();\n    }\n\n    static getGameTime(utcTime: string): string {\n        if (utcTime.indexOf(\"Z\") == -1) {\n            utcTime = utcTime + \"Z\";\n        }\n\n        const utcTimestamp = Date.parse(utcTime.replace(\"Z\", \"\"));\n\n        if (AppContext.gameConfiguration.UseServerTime) {\n            const offset = DataManager.utcTime ? DataManager.serverTimeOffset : 0;\n            return DataManager.getFormattedTime(new Date(utcTimestamp - offset));\n        }\n\n        return DataManager.getFormattedTime(new Date(utcTime));\n    }\n\n    static getNonUTCGameTime(): string {\n        if (!AppContext.gameConfiguration.UseServerTime) {\n            return DataManager.getFormattedTime(new Date());\n        }\n\n        if (!StringUtils.isNullOrEmpty(DataManager.time)) {\n            const currentTime = new Date();\n            const utcResponseTimestamp = Date.parse(DataManager.time);\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\n            return DataManager.getFormattedTime(\n                new Date(utcResponseTimestamp + lastResponseDiff - DataManager.serverTimeOffset),\n            );\n        }\n\n        return DataManager.getFormattedTime(new Date());\n    }\n\n    static showTime(): void {\n        if (!AppContext.gameConfiguration.UIShowTime) {\n            return;\n        }\n\n        let today = new Date(DataManager.getNonUTCGameTime());\n\n        if (DataManager.utcTime != null) {\n            const timeData = DataManager.getTimeData();\n            today = new Date(DataManager.getGameTime(timeData.utcTime));\n        }\n\n        let h = today.getHours();\n        let hFixed: string = h + \"\";\n        if (h < 10) {\n            hFixed = \"0\" + h;\n        }\n\n        let m = today.getMinutes();\n        let mFixed: string = m + \"\";\n        if (m < 10) {\n            mFixed = \"0\" + m;\n        }\n        DataManager.updateDataElement(\"TIME\", hFixed + \":\" + mFixed);\n        setTimeout(() => {\n            DataManager.showTime();\n        }, 1000);\n    }\n\n    static showSessionTime(time: number): void {\n        if (AppContext.gameConfiguration.GUIShowSessionTime) {\n            if (time < 0) {\n                time = 0;\n            }\n\n            let sec_num: number = time;\n            let hours: number = Math.floor(sec_num / 3600);\n            let minutes: number = Math.floor((sec_num - hours * 3600) / 60);\n            let seconds: number = sec_num - hours * 3600 - minutes * 60;\n\n            let hoursS: string = hours.toString();\n            let minutesS: string = minutes.toString();\n            let secondsS: string = seconds.toString();\n\n            if (hours < 10) {\n                hoursS = \"0\" + hours;\n            }\n            if (minutes < 10) {\n                minutesS = \"0\" + minutes;\n            }\n            if (seconds < 10) {\n                secondsS = \"0\" + seconds;\n            }\n\n            let pre: string = AppContext.gameConfiguration.UIShowTime ? \"&nbsp;|&nbsp;\" : \"\";\n\n            DataManager.updateDataElement(\"SESSION_TIME\", pre + hoursS + \":\" + minutesS + \":\" + secondsS);\n            time++;\n            setTimeout(() => {\n                DataManager.showSessionTime(time);\n            }, 1000);\n        }\n    }\n\n    static configureGameData(): void {\n        if (AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.StatusBarMessage) > -1) {\n            if (\n                AppContext.gameConfiguration.StatusBarData != null &&\n                AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage] != null\n            ) {\n                const statusBar = Plugins.StatusBar.getInstance();\n                statusBar.add(\n                    Plugins.StatusBar.Types.StatusBarMessage,\n                    \"statusBarMessage\",\n                    AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage],\n                );\n                Scaling.resizeRoot();\n            }\n        }\n\n        const gameTitle = document.getElementById(\"gameTitle\");\n        if (gameTitle != null) {\n            DataManager.updateDataElement(GameData.DataGameTitle, gameTitle.innerHTML);\n\n            const gameHeadline = document.getElementById(\"gameHeadline\");\n            if (gameHeadline != null) {\n                gameHeadline.style.display = \"none\";\n            }\n        }\n\n        DataManager.hideDataElements(\"helpFRBNote\");\n        DataManager.hideDataElements(\"helpFRBNote2\");\n        if (AppContext.gameConfiguration.FRBGameRoundMinSpan > 0 || AppContext.gameConfiguration.GameRoundMinSpan) {\n            if (AppContext.gameConfiguration.GameEnableReelsStop) {\n                DataManager.showDataElements(\n                    AppContext.gameConfiguration.GameEnableQuickSpin ? \"helpFRBNote\" : \"helpFRBNote2\",\n                );\n            }\n        }\n\n        if (!AppContext.gameConfiguration.GameEnableReelsStop) {\n            DataManager.hideDataElements(\"GameEnableReelsStop\");\n        } else {\n            DataManager.hideDataElements(\"GameDisableReelsStop\");\n        }\n        if (!DataManager.gameEnableQuickSpin()) {\n            DataManager.hideDataElements(\"quickSpinSettings\");\n        }\n\n        if (!AppContext.gameConfiguration.GameEnableVibration) {\n            DataManager.hideDataElements(\"vibrationSettings\");\n        }\n\n        if (!DataManager.hasSettingsMenu()) {\n            DataManager.hideDataElements(\"helpGameSettings\");\n        }\n    }\n\n    private static hasSettingsMenu(): boolean {\n        if (DataManager.gameEnableQuickSpin()) {\n            return true;\n        }\n\n        return false;\n    }\n\n    static configureHelpData(): void {\n        DataManager.showDataElements(\"gambleAttempts\");\n        DataManager.showDataElements(\"helpGameLimit\");\n        DataManager.showDataElements(\"helpGambleLimit\");\n        DataManager.showDataElements(\"helpGambleCountLimit\");\n        DataManager.showDataElements(\"helpJoker\");\n        DataManager.showDataElements(\"helpRTP\");\n        DataManager.showDataElements(\"totalRTP\");\n        DataManager.hideDataElements(\"helpVersion\");\n        DataManager.showDataElements(\"helpJackpotVisibleLimit\");\n        DataManager.showDataElements(\"helpJackpotContributionAll\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsAll\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMin\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMax\");\n        DataManager.hideDataElements(\"helpShowCumulativeWinLimit\");\n        DataManager.hideDataElements(\"helpMPP\");\n        DataManager.hideDataElements(\"helpMPF\");\n\n        if (AppContext != null) {\n            if (GameManager.gameResponse != null) {\n                if (GameManager.gameResponse[\"helpData\"] == null) {\n                    DataManager.hideDataElements(\"gambleAttempts\");\n                    DataManager.hideDataElements(\"helpGameLimit\");\n                    DataManager.hideDataElements(\"helpGambleLimit\");\n                    DataManager.hideDataElements(\"helpGambleCountLimit\");\n                    DataManager.hideDataElements(\"helpJoker\");\n                    DataManager.hideDataElements(\"helpRTP\");\n                    DataManager.hideDataElements(\"totalRTP\");\n                    DataManager.hideDataElements(\"helpMPP\");\n                    DataManager.hideDataElements(\"helpMPF\");\n                } else {\n                    if (GameManager.gambleResponse == null) {\n                        DataManager.hideDataElements(\"hlpGambleSection\");\n                        DataManager.showDataElements(\"hlpNoGambleSection\", \"\");\n                    } else {\n                        DataManager.hideDataElements(\"hlpNoGambleSection\");\n                        DataManager.showDataElements(\"hlpGambleSection\", \"\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\n                        DataManager.hideDataElements(\"gambleAttempts\");\n                    } else {\n                        if (\n                            GameManager.gambleResponse != null &&\n                            GameManager.gambleResponse[\"totalCount\"] != null &&\n                            GameManager.gambleResponse[\"currentCount\"] != null\n                        ) {\n                            DataManager.updateDataElement(\n                                GameData.DataGambleAttempts,\n                                (\n                                    GameManager.gambleResponse[\"totalCount\"] -\n                                    GameManager.gambleResponse[\"currentCount\"]\n                                ).toString(),\n                            );\n                        }\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\n                        DataManager.HelpDataGameLimit = GameManager.gameResponse[\"helpData\"][\"gameLimit\"];\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGameLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGameLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                        } else {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGameLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGameLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                        }\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] == null ||\n                        !AppContext.gameConfiguration.HelpShowGameLimit\n                    ) {\n                        DataManager.hideDataElements(\"helpGameLimit\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleLimit\"] != null) {\n                        DataManager.HelpDataGambleLimit = GameManager.gameResponse[\"helpData\"][\"gambleLimit\"];\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGambleLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGambleLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                        } else {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGambleLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGambleLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                        }\n                    } else {\n                        DataManager.hideDataElements(\"helpGambleLimit\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\n                        DataManager.hideDataElements(\"helpGambleCountLimit\");\n                    } else {\n                        DataManager.updateDataElement(\n                            GameData.DataHelpGambleCountLimit,\n                            GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] + \" \",\n                        );\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"] == null ||\n                        !GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"]\n                    ) {\n                        DataManager.hideDataElements(\"helpJoker\");\n                    }\n\n                    let rtp = GameManager.gameResponse[\"helpData\"][\"rtp\"];\n                    let totalRtp = GameManager.gameResponse[\"helpData\"][\"totalRtp\"];\n                    let progressiveBonusRtp = GameManager.gameResponse[\"helpData\"][\"progressiveBonusRtp\"];\n                    let ridTotalRTP = AppContext.gameConfiguration.UseJackpotLocalization\n                        ? \"HLP_AD_INFO_TOTAL_RTP_J\"\n                        : \"HLP_AD_INFO_TOTAL_RTP\";\n                    let statusBarRtp: string;\n\n                    if (\n                        totalRtp != null &&\n                        progressiveBonusRtp != null &&\n                        rtp != null &&\n                        AppContext.gameConfiguration.HelpShowRTP\n                    ) {\n                        // BaseGameAndProgressiveBonus\n                        DataManager.hideDataElements(\"helpRTP\");\n                        DataManager.setDataElements(\n                            \"totalRTP\",\n                            Languages.getRid(\n                                ridTotalRTP,\n                                totalRtp.toString(),\n                                rtp.toString(),\n                                progressiveBonusRtp.toString(),\n                            ),\n                        );\n                        statusBarRtp = totalRtp.toString();\n                    } else if (rtp != null && AppContext.gameConfiguration.HelpShowRTP) {\n                        // BaseGame\n                        DataManager.hideDataElements(\"totalRTP\");\n                        DataManager.updateDataElement(GameData.DataHelpRTP, rtp.toString());\n                        statusBarRtp = rtp.toString();\n                    } else {\n                        // Disabled\n                        DataManager.hideDataElements(\"helpRTP\");\n                        DataManager.hideDataElements(\"totalRTP\");\n                    }\n\n                    if (\n                        statusBarRtp != null &&\n                        AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.RTP) > -1\n                    ) {\n                        const statusBar = Plugins.StatusBar.getInstance();\n                        statusBar.add(\n                            Plugins.StatusBar.Types.RTP,\n                            \"rtp\",\n                            Languages.getRid(\"SB_INFO_RTP\", statusBarRtp.toString()),\n                        );\n                        Scaling.resizeRoot();\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"version\"] == null ||\n                        !AppContext.gameConfiguration.HelpShowGameModuleVersion\n                    ) {\n                        DataManager.hideDataElements(\"helpVersion\");\n                    } else {\n                        DataManager.updateDataElement(\n                            GameData.DataHelpVersion,\n                            GameManager.gameResponse[\"helpData\"][\"version\"].toString(),\n                        );\n                        DataManager.showDataElements(\"helpVersion\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"] != null) {\n                        if (\n                            AppContext.gameConfiguration.StatusBar.indexOf(\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\n                            ) > -1\n                        ) {\n                            const statusBar = Plugins.StatusBar.getInstance();\n                            statusBar.add(\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\n                                \"maxPayoutProbability\",\n                                Languages.getRid(\n                                    \"SB_INFO_MAX_PAYOUT_PROBABILITY\",\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"],\n                                ),\n                            );\n                            Scaling.resizeRoot();\n                        }\n\n                        if (\n                            AppContext.gameConfiguration.HelpShowMaxPayoutProbabilityFrequency &&\n                            GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"] != null\n                        ) {\n                            DataManager.setDataElements(\n                                \"helpMPF\",\n                                Languages.getRid(\n                                    \"HLP_AD_INFO_MAX_PAYOUT_FREQUENCY\",\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\n                                    GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"].toString(),\n                                ),\n                            );\n                            DataManager.showDataElements(\"helpMPF\");\n                        } else if (AppContext.gameConfiguration.HelpShowMaxPayoutProbability) {\n                            DataManager.updateDataElement(\n                                GameData.DataHelpMaxPayoutProbability,\n                                GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\n                            );\n                            DataManager.showDataElements(\"helpMPP\");\n                        }\n                    }\n\n                    if (\n                        AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" &&\n                        AppContext.gameConfiguration.ProgressiveBonusHelpShowCumulativeWinLimit &&\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null\n                    ) {\n                        DataManager.showDataElements(\"helpShowCumulativeWinLimit\");\n                    }\n                }\n            }\n\n            if (BetManager.TotalBets.length > 0) {\n                DataManager.updateDataElement(\n                    GameData.DataHelpMinBet,\n                    Languages.formatText(Languages.FormatMoney, Math.min(...BetManager.TotalBets).toString()) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpMaxBet,\n                    Languages.formatText(Languages.FormatMoney, Math.max(...BetManager.TotalBets).toString()) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpMinBet\");\n                DataManager.hideDataElements(\"helpMaxBet\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusContributeOnlyQualified) {\n                DataManager.hideDataElements(\"helpJackpotContributionAll\");\n                DataManager.showDataElements(\"helpJackpotContributionQualifying\");\n            } else {\n                DataManager.showDataElements(\"helpJackpotContributionAll\");\n                DataManager.hideDataElements(\"helpJackpotContributionQualifying\");\n            }\n\n            if (\n                AppContext.gameConfiguration.ProgressiveBonusVisibleMax > 0 &&\n                AppContext.gameConfiguration.ProgressiveBonusHelpShowMaxVisibleLimit\n            ) {\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotVisibleLimit,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusVisibleMax.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotVisibleLimit\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet > 0) {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotQualifyingBetsMin,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMin\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet > 0) {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotQualifyingBetsMax,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMax\");\n            }\n\n            if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\n            } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\n            } else {\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\n            }\n\n            if (!AppContext.gameConfiguration.AutoplayModeEnabled) {\n                DataManager.hideDataElements(\"helpAutoplayEnabled\");\n            } else {\n                DataManager.hideDataElements(\"helpAutoplayDisabled\");\n            }\n\n            if (!AppContext.gameConfiguration.ShowHomeButton) {\n                DataManager.hideDataElements(\"gameHomeBtn\");\n            }\n\n            if (!AppContext.gameConfiguration.ShowGameRoundsHistory) {\n                DataManager.hideDataElements(\"historyBtn\");\n                DataManager.hideDataElements(\"helpHistoryBtn\");\n            }\n\n            if (AppContext.gameConfiguration.ExpirationResolveHours > 0) {\n                DataManager.updateDataElement(\n                    GameData.DataExpirationResolveHours,\n                    AppContext.gameConfiguration.ExpirationResolveHours.toString(),\n                );\n            } else {\n                DataManager.hideDataElements(\"expirationResolveHours\");\n            }\n        }\n    }\n\n    static setDataElements(cls: string, text: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.innerHTML = text;\n            }\n        }\n    }\n\n    static hideDataElements(cls: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.style.display = \"none\";\n            }\n        }\n    }\n\n    static showDataElements(cls: string, display: string = \"block\"): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.style.display = display;\n            }\n        }\n    }\n\n    static cleanUpElements(): void {\n        var elements: HTMLCollectionOf<Element>;\n        if (AppContext != null && AppContext.gameConfiguration != null && AppContext.gameConfiguration.UseCoins) {\n            elements = document.getElementsByClassName(\"useCoinsFalse\");\n        } else {\n            elements = document.getElementsByClassName(\"useCoinsTrue\");\n        }\n\n        if (elements != null && elements.length > 0) {\n            while (elements.length > 0) {\n                elements[0].parentNode.removeChild(elements[0]);\n            }\n        }\n\n        if (AppContext.gameConfiguration.UseJackpotLocalization) {\n            elements = document.getElementsByClassName(\"helpJackpotB\");\n        } else {\n            elements = document.getElementsByClassName(\"helpJackpotJ\");\n        }\n\n        if (elements != null && elements.length > 0) {\n            while (elements.length > 0) {\n                elements[0].parentNode.removeChild(elements[0]);\n            }\n        }\n\n        elements = document.getElementsByClassName(\"settingTabItem\");\n        let hideSettingsButton = true;\n        for (let i = 0; i < elements.length; i++) {\n            if ((<HTMLElement>elements[i]).style.display != \"none\") {\n                hideSettingsButton = false;\n            }\n        }\n\n        if (hideSettingsButton) {\n            elements = document.getElementsByClassName(\"settingsBtn\");\n            if (elements != null && elements.length > 0) {\n                while (elements.length > 0) {\n                    elements[0].parentNode.removeChild(elements[0]);\n                }\n            }\n        }\n    }\n\n    static addTrustedUserAction(actionId: string): void {\n        if (DataManager.TrustedUserActions.indexOf(actionId) == -1) {\n            const groupActionId = DataManager.getGroupActionId(actionId);\n\n            DataManager.TrustedUserActions.push(groupActionId);\n        }\n    }\n\n    static getTrustedUserAction(groupActionId: string): boolean {\n        const index = DataManager.TrustedUserActions.indexOf(groupActionId);\n        if (index == -1) {\n            return false;\n        } else {\n            DataManager.TrustedUserActions.splice(index, 1);\n            return true;\n        }\n    }\n\n    private static getGroupActionId(actionId: string): string {\n        let result = actionId;\n        switch (actionId) {\n            case \"BET_PLUS\":\n            case \"BET_MINUS\":\n            case \"BET_CYCLE\":\n            case \"MAX_BET\":\n            case \"COIN_SIZE_PLUS\":\n            case \"COIN_SIZE_PLUS_CYCLE\":\n            case \"COIN_SIZE_MINUS\":\n            case \"PAYLINE_COUNT_PLUS\":\n            case \"PAYLINE_COUNT_PLUS_CYCLE\":\n            case \"PAYLINE_COUNT_MINUS\":\n                result = \"BET_CHANGE\";\n                break;\n            case \"SPIN\":\n                result = \"SPIN\";\n                break;\n            case \"SPIN_OR_STOP\":\n                if (HtmlController.ActionElements[\"SPIN_STOP\"] != null) {\n                    const btn = HtmlController.ActionElements[\"SPIN_STOP\"][0];\n                    if (btn != null && btn.instance.classList.contains(\"_disabled\")) {\n                        result = \"SPIN\";\n                    }\n                }\n        }\n\n        return result;\n    }\n\n    static stopAutoplayIfLossLimit(): void {\n        if (DataManager.AutoplayLossLimit === \"∞\") {\n            return;\n        }\n\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\n        if (GameManager.baseResponse != null && GameManager.baseResponse.totalWin > 0) {\n            lossLimit += GameManager.baseResponse.totalWin;\n        }\n\n        if (lossLimit - BetManager.Bet < 0) {\n            DataManager.Autoplay = false;\n        }\n    }\n\n    static updateLossLimit(win: number = 0): void {\n        if (DataManager.AutoplayLossLimit === \"∞\") {\n            return;\n        }\n\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\n\n        if (win > 0) {\n            lossLimit += win;\n        } else {\n            if (BetManager.Bet != null) {\n                lossLimit = NumberUtils.toNumber(NumberUtils.subtract(lossLimit, BetManager.Bet));\n            }\n        }\n\n        DataManager.AutoplayLossLimit = lossLimit + \"\";\n    }\n\n    static stopAutoplayIfWinLimit(): boolean {\n        if (!DataManager.Autoplay) {\n            return false;\n        }\n\n        if (DataManager.AutoplayWinLimit == \"∞\") {\n            return false;\n        } else {\n            if (\n                GameManager.gameResponse != null &&\n                GameManager.gameResponse.totalWin > 0 &&\n                GameManager.gameResponse.totalWin >= parseFloat(DataManager.AutoplayWinLimit)\n            ) {\n                DataManager.Autoplay = false;\n                return true;\n            }\n        }\n    }\n\n    static gameState(state: string): void {\n        if (AppContext.clientHost) {\n            const messageId = GameManager.gameResponse.messageId;\n            const unpaidWin = GameManager.gameResponse.totalWin;\n            const gameRoundId = GameManager.gameResponse.roundId;\n            let gameEvent: any;\n            switch (state) {\n                case \"PrimaryGameEscrow\":\n                    gameEvent = GameEvents.PrimaryGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"PrimaryGameStarted\":\n                    gameEvent = GameEvents.PrimaryGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"PrimaryGameEnded\":\n                    gameEvent = GameEvents.PrimaryGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEntered\":\n                    gameEvent = GameEvents.SecondaryGameEntered(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEscrow\":\n                    gameEvent = GameEvents.SecondaryGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameStarted\":\n                    gameEvent = GameEvents.SecondaryGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameCollectEscrow\":\n                    gameEvent = GameEvents.GameCollectEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameCollectEscrow\":\n                    gameEvent = GameEvents.SecondaryGameCollectEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEnded\":\n                    gameEvent = GameEvents.SecondaryGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameEnded\":\n                    gameEvent = GameEvents.GameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameHalved\":\n                    gameEvent = GameEvents.SecondaryGameHalved(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"AutoPlayStarted\":\n                    gameEvent = GameEvents.AutoPlayStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"AutoPlayEnded\":\n                    gameEvent = GameEvents.AutoPlayEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GamePlayDisabled\":\n                    gameEvent = GameEvents.GamePlayDisabled(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GamePlayEnabled\":\n                    gameEvent = GameEvents.GamePlayEnabled(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameLoaded\":\n                    gameEvent = GameEvents.GameLoaded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameEnded\":\n                    gameEvent = GameEvents.BonusGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameEscrow\":\n                    gameEvent = GameEvents.BonusGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameStarted\":\n                    gameEvent = GameEvents.BonusGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameTriggered\":\n                    gameEvent = GameEvents.BonusGameTriggered(messageId, unpaidWin, gameRoundId);\n                    break;\n            }\n\n            if (gameEvent != null) {\n                AppContext.clientHost.notifyEventFromGame(gameEvent);\n            }\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"DataManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/DataManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { Controller } from \"../GameComponents/Controller\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { GameClient } from \"neo-games/Engine/Communication/Game/GameClient\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { BetManager } from \"./BetManager\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { DataManager } from \"./DataManager\";\nimport { Languages } from \"../Utils/Languages\";\nimport { DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\nimport { GameApp } from \"../GameApp\";\nimport { ResponsibleDialog1 } from \"../Channels/Common/Dialogs/ResponsibleDialog1\";\nimport { GameModuleFreespinResponse } from \"neo-games/Engine/Communication/Game/Responses/GameModuleFreespinResponse\";\nimport { Game } from \"neo-games/Engine/Communication/index\";\nimport { MessageManager } from \"./MessageManager\";\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\nimport { FreeRoundBonusExtended } from \"../Channels/Common/Bonuses/FreeRoundBonusExtended\";\nimport { LimitDialog } from \"../Channels/Common/Dialogs/LimitDialog\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { NotificationManager } from \"./NotificationManager\";\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\n\nimport { SessionTimer } from \"../Channels/Common/Platforms/Playtech/SessionTimer\";\nimport { StageController } from \"../Components/StageController\";\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\nimport { SplashScreen } from \"../CustomComponents/SplashScreen\";\n\nimport { FreespinsModel } from \"../GameComponents/Freespins/FreespinsModel\";\nimport { BaseModel } from \"../GameComponents/Base/BaseModel\";\n\ntype InitResponse = Communication.Game.InitResponse;\ntype GameResponse = Communication.Game.GameResponse;\ntype GameModuleBaseResponse = Communication.Game.GameModuleBaseResponse;\ntype GameModuleGambleResponse = Communication.Game.GameModuleGambleResponse;\ntype GameModuleFreespinsResponse = Communication.Game.GameModuleFreespinResponse;\ntype FreeRoundsOffersRequest = Communication.Game.FreeRoundsOffersRequest;\nvar GameModules = Communication.Game.GameModules;\n\nexport class GameManager {\n    private static _app: GameEngine.IApp;\n    private static _gameClient: GameClient;\n    private static _collectModule: string = GameModules.Base;\n\n    static gameResponse: GameResponse;\n    static baseResponse: GameModuleBaseResponse;\n    static gambleResponse: GameModuleGambleResponse;\n    static freespinsResponse: GameModuleFreespinsResponse;\n\n    static requestSend: boolean = false;\n\n    static exitOnCollect: boolean = false;\n\n    static disableOnCollect: boolean = false;\n    static disableGamePlay: boolean = false;\n\n    static dontEnableGamePlay: boolean = false;\n\n    public static get gameClient(): Communication.Game.GameClient {\n        return GameManager._gameClient;\n    }\n\n    static startGame(gameClient: Communication.Game.GameClient, app: GameEngine.IApp): void {\n        if (DEBUG) {\n            GameManager.log(\"startGame\");\n        }\n\n        ArgValidator.ensureIsNotNullOrUndefined(gameClient, \"gameClient\");\n        GameManager._gameClient = gameClient;\n        GameManager._gameClient.onErrorResponse = GameManager.errorReceived;\n        DataManager.BackSoundsPlayingFromGame =\n            AppContext.current.isBackgroundMusicEnabled && AppContext.current.getBackgroundMusic();\n        NotificationManager.initialize();\n\n        GameManager._app = app;\n\n        if (ModuleManager.connectModules()) {\n            if (FreeRoundBonusExtended.wasInitialized) {\n                GameManager.init();\n            } else {\n                setTimeout(() => {\n                    GameManager.init();\n                }, 3000);\n            }\n        } else {\n            if (DEBUG) {\n                GameManager.log(\"ERROR cant connect channel and game modules\");\n            }\n        }\n    }\n\n    static showGame(): void {\n        if (DEBUG) {\n            GameManager.log(\"showGame\");\n        }\n\n        var loading: HTMLElement = document.getElementById(\"loading\");\n        var canvas: HTMLElement = document.getElementById(\"canvas\");\n\n        if (loading != null && canvas != null) {\n            Scaling.onLoadComplete();\n            Jackpot.show();\n            RetentionPanel.show();\n            Paytable.openAtStart();\n\n            //showGame is called after prepare new game and showFreeRounds, so if we have game then close frb\n            if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonusExtended.inFrb) {\n                FreeRoundBonusExtended.disableUi();\n            }\n\n            DataManager.cleanUpElements();\n            loading.style.display = \"none\";\n            canvas.style.display = \"block\";\n            DataManager.updateDataElements();\n        } else {\n            if (DEBUG) {\n                GameManager.log(\"ERROR loading or canvas doesnt exist\");\n            }\n        }\n    }\n\n    static setupGame(response: InitResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"setupGame\");\n        }\n\n        GameManager.parseScreensForModules(response);\n        GameManager.parseResponses(response);\n        DataManager.updateResponseData(true);\n        ModuleManager.initModules();\n        DataManager.SimilarGames = new SimilarGames();\n        DataManager.SimilarGames.initialize();\n        FreeRoundBonusExtended.showFreeRounds();\n    }\n\n    static init(): void {\n        if (DEBUG) {\n            GameManager.log(\"init\");\n        }\n\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n\n        DataManager.getServerTime();\n        DataManager.controlAutoplay();\n        FreeRoundBonusExtended.initializeFreeRounds();\n        Jackpot.initialize();\n        GameManager._gameClient.init().then((response: InitResponse) => {\n            GameManager.initReceived(response);\n        });\n    }\n\n    static softInit(): void {\n        if (DEBUG) {\n            GameManager.log(\"soft init\");\n        }\n\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n\n        DataManager.controlAutoplay();\n        GameManager._gameClient.init().then((response: InitResponse) => {\n            GameManager.softInitReceived(response);\n        });\n    }\n\n    static collect(module: string): void {\n        if (DEBUG) {\n            GameManager.log(\"collect module: \" + module);\n        }\n\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n\n        if (!AppContext.gameDefinition.Gamble) {\n            DataManager.Collectable = true;\n        }\n\n        GameManager.canExit();\n\n        this._collectModule = module;\n\n        DataManager.controlAutoplay();\n        if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n            GameManager.gameClient.collect().then(GameManager.collectReceived);\n        }\n    }\n\n    static initReceived(response: InitResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"initReceived\");\n        }\n\n        if (Utils.isNullOrUndefined(response)) {\n            if (DEBUG) {\n                GameManager.log(\"initReceived NULL response (error in send?)\");\n            }\n            return;\n        }\n\n        DataManager.showTime();\n        if (!Utils.isNullOrUndefined(AppContext.gameConfiguration.GUIShowSessionTimeStartValue)) {\n            DataManager.showSessionTime(AppContext.gameConfiguration.GUIShowSessionTimeStartValue);\n        } else {\n            DataManager.showSessionTime(0);\n        }\n\n        if (SplashScreen.suspendInitReceived(response)) {\n            return;\n        }\n\n        MessageManager.postpone(GameManager.continueInitReceived, response);\n    }\n\n    static continueInitReceived(response: InitResponse): void {\n        GameManager.setupGame(response);\n        GameManager.showGame();\n\n        SplashScreen.hideSplashScreen();\n\n        Platforms.Platforms.gameDataLoaded({\n            PlayerTokenId: AppContext.gameConfiguration.PlayerTokenId,\n            HomeUrl: AppContext.gameConfiguration.ExitUrl,\n            ClientToken: AppContext.gameConfiguration.ClientToken,\n            GameName: GameApp.key,\n            SessionData: {\n                SessionBalance: AppContext.gameConfiguration.SessionBalance,\n                TotalWin: AppContext.gameConfiguration.TotalWin,\n                TotalBet: AppContext.gameConfiguration.TotalBet,\n            },\n            CurrencyCode: response.initData.currency != null ? response.initData.currency : \"\",\n            Balance: GameManager.gameResponse.balance.real,\n            Bet: BetManager.Bet,\n        });\n\n        Platforms.Platforms.rendererType(StageController.Renderer instanceof PIXI.CanvasRenderer ? \"canvas\" : \"webGL\");\n        DataManager.gameState(\"GameLoaded\");\n\n        GameManager.requestSend = false;\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                // Collect only when freespins is not enabled/active\n                if (!ModuleManager.freespinsEnabled() && !ModuleManager.freespinsActive()) {\n                    ModuleManager.collect(GameModules.Base);\n                }\n            }\n        }\n    }\n\n    static softInitReceived(response: InitResponse): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n        DataManager.updateGameDataFromModule(GameData.DataTotalWin, \"0\");\n        LimitDialog.closeDialog();\n\n        GameManager.parseResponses(response);\n        DataManager.updateResponseData(true);\n        GameManager.requestSend = false;\n        ModuleManager.restoreGameRound(GameModules.Base);\n        FreeRoundBonusExtended.openOther();\n    }\n\n    static collectReceived(response: GameResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"collectReceived\");\n        }\n\n        MessageManager.postpone(GameManager.continueCollectReceived, response);\n    }\n\n    static continueCollectReceived(response: GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n            ModuleManager.collectInModule(GameManager._collectModule);\n            GameManager.canExit();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    static errorReceived(apiError: ApiClientCommunication.Types.ApiClientError): void {\n        let requestName: string = (apiError.requestInfo.request as any).constructor.name;\n        if (requestName === \"FreeRoundsOffersRequest\") {\n            FreeRoundBonusExtended.wasInitialized = true;\n            return;\n        }\n\n        if (DEBUG) {\n            GameManager.log(\"errorReceived\");\n        }\n\n        // mute sounds and remove focus handling\n        window.onblur = null;\n        window.onfocus = null;\n        PIXI.sound.muteAll();\n\n        let localizedText = \"\";\n        let isError = true;\n        let code = apiError.httpStatusCode.toString();\n        let customData: DialogOpenData = {\n            special: false,\n            gameRoundId: Utils.valueOrDefault(DataManager.getDataById(\"ROUND_ID\"), \"0\"),\n            errorId: Utils.isNullOrUndefined(apiError.error) ? \"\" : apiError.error.errorId,\n            actions: Utils.isNullOrUndefined(apiError.error) ? [] : apiError.error[\"actions\"], //ToDo Dostat to do ApiClientCommunication.Types.ApiClientError\n        };\n\n        let ignoreShowDialog = false;\n        let hasMessages = false;\n        let callbackFnc: ((arg: any) => void) | null = null;\n        let isFatalError = true;\n\n        if (apiError.error) {\n            let resource = \"ERROR_\" + apiError.httpStatusCode + \"_\" + apiError.error.code;\n            code = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\n            localizedText = Languages.getRid(resource);\n\n            hasMessages = apiError.error.messages != null;\n\n            if (localizedText == null) {\n                resource = \"ERROR_\" + apiError.httpStatusCode;\n                code = apiError.httpStatusCode.toString();\n                localizedText = Languages.getRid(resource);\n            }\n\n            // errors displayed as info messages with \"Reload\" button\n            if (\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1009) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2005) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2013) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2014) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2017) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2018)\n            ) {\n                customData.special = true;\n                customData.errorId = \"\";\n                isError = false;\n            }\n\n            // errors displayed as info messages with \"Close\" button\n            if (\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2001) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2002) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2012)\n            ) {\n                (<any>customData).ultraSpecial = true;\n            }\n\n            // errors with server message shown instead of resource message\n            if (\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2015) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016)\n            ) {\n                code = \"\";\n                localizedText = apiError.error.message;\n            }\n\n            // extend FRB error message with \"collect partial\" msg\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2017) {\n                //expired FRB offer\n                if (FreeRoundBonusExtended.collectPartial) {\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_ALLOWED\");\n                } else {\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\n                }\n            }\n\n            // extend FRB error message with \"collect partial not allowed\" msg\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2018) {\n                //canceled FRB offer\n                localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\n            }\n\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2019) {\n                //playtech ignored error but messages are allowed\n                if (!hasMessages) {\n                    ignoreShowDialog = true;\n                }\n                callbackFnc = MessageManager.callbackFnc;\n                isFatalError = false;\n            }\n\n            if (\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012)\n            ) {\n                let spbSufix = AppContext.gameConfiguration.UseJackpotLocalization ? \"_J\" : \"\";\n                localizedText = Languages.getRid(resource + spbSufix);\n            }\n\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2020) {\n                //playtech session timer\n                SessionTimer.postpone(SessionTimer.callbackFnc, SessionTimer.prepareData(apiError.error));\n                return;\n            }\n        } else {\n            // errors displayed as info messages with \"Close\" button\n            if (apiError.httpStatusCode === 401) {\n                (<any>customData).ultraSpecial = true;\n            }\n\n            let resource = \"ERROR_\" + apiError.httpStatusCode.toString();\n            localizedText = Languages.getRid(resource);\n        }\n\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"GameManager\",\n                `[errorReceived] calling ` +\n                    `AppContext.current.showDialog('${localizedText}', ${isError}, '${code}', \n                    ${customData.errorId}, ${customData.gameRoundId}, ${JSON.stringify(customData)})`,\n            );\n        }\n\n        if (isError) {\n            let error_code_for_platforms = apiError.httpStatusCode.toString();\n            if (apiError.error) {\n                error_code_for_platforms = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\n            }\n            Platforms.Platforms.error(error_code_for_platforms, localizedText);\n            if (isFatalError) {\n                Jackpot.showError();\n                NotificationManager.disconnect();\n            }\n        }\n\n        //if platform shows dialog itself, skip showing error dialog in our game window\n        if (Platforms.Platforms.handleShowErrorDialog || ignoreShowDialog) {\n            return;\n        }\n\n        if (hasMessages) {\n            MessageManager.postpone(callbackFnc, apiError.error);\n        } else {\n            AppContext.current.showDialog(\n                localizedText,\n                isError,\n                code,\n                customData.errorId,\n                customData.gameRoundId,\n                customData,\n            );\n        }\n    }\n\n    static parseScreensForModules(response: GameResponse): void {\n        if (response.module<GameModuleBaseResponse>(GameModules.Base) != null) {\n            BaseModel.LastScreen = response.module<GameModuleBaseResponse>(GameModules.Base).screen;\n        }\n\n        if (response.module<GameModuleFreespinsResponse>(GameModules.Freespins) != null) {\n            FreespinsModel.LastScreen = response.module<GameModuleFreespinsResponse>(GameModules.Freespins).screen;\n        }\n    }\n\n    static parseResponses(response: GameResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"parseResponses\");\n        }\n\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.gameResponse = response;\n            if (response.module<GameModuleBaseResponse>(GameModules.Base) != null) {\n                GameManager.baseResponse = response.module<GameModuleBaseResponse>(GameModules.Base);\n            } else {\n                GameManager.baseResponse = null;\n            }\n\n            if (response.module<GameModuleGambleResponse>(GameModules.Gamble) != null) {\n                GameManager.gambleResponse = response.module<GameModuleGambleResponse>(GameModules.Gamble);\n            } else {\n                GameManager.gambleResponse = null;\n            }\n\n            if (response.module<GameModuleFreespinResponse>(GameModules.Freespins) != null) {\n                GameManager.freespinsResponse = response.module<GameModuleFreespinResponse>(GameModules.Freespins);\n            } else {\n                GameManager.freespinsResponse = null;\n            }\n        }\n    }\n\n    static collectable(): boolean {\n        if (ModuleManager.gambleActive()) {\n            return false;\n        }\n\n        if (FreeRoundBonusExtended.endMsgDisplayed) {\n            return false;\n        }\n\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame()) {\n            return false;\n        }\n\n        if (DataManager.GameRoundClosed && DataManager.Collectable) {\n            return true;\n        }\n\n        return false;\n    }\n\n    static canExit(exit: boolean = false): boolean {\n        let canExit = GameManager.collectable();\n\n        if (DEBUG) {\n            console.log(`GameManager.canExit(exit: ${exit}) -> afterCollect: ${canExit}`);\n        }\n\n        if (\n            canExit &&\n            !exit &&\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            ResponsibleDialog1.responsibleDialog1Data != null &&\n            !FreeRoundBonusExtended.isLastFrb\n        ) {\n            DataManager.Autoplay = false;\n            DataManager.AutoplayAfterGamble = false;\n            ResponsibleDialog1.openDialog(ResponsibleDialog1.responsibleDialog1Data);\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\n            ResponsibleDialog1.responsibleDialog1Data = null;\n            ModuleManager.disableBase();\n            ModuleManager.disableGamble();\n            ModuleManager.resetWinAnimator(GameModules.Base);\n        }\n\n        if (GameManager.exitOnCollect && canExit) {\n            if (DEBUG) {\n                console.log(\n                    `GameManager.canExit(exit: ${exit}) -> manuall call of GameApp.exit() ` +\n                        `because of GameManager.exitOnCollect = ${GameManager.exitOnCollect}`,\n                );\n            }\n            GameApp.exit();\n            return false;\n        }\n        if (canExit && exit) {\n            return canExit;\n        } else {\n            if (!GameManager.exitOnCollect && exit) {\n                if (DEBUG) {\n                    console.log(\n                        `GameManager.canExit(exit: ${exit}) -> ` +\n                            `changing GameManager.exitOnCollect(${GameManager.exitOnCollect}) to value '${exit}'`,\n                    );\n                }\n\n                GameManager.exitOnCollect = true; //exit;\n            }\n        }\n\n        if (DEBUG) {\n            console.log(`GameManager.canExit(exit: ${exit}) -> returns: ${canExit}`);\n        }\n\n        return canExit;\n    }\n\n    static showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\n        if (GameManager.canExit()) {\n            DataManager.Autoplay = false;\n            DataManager.AutoplayAfterGamble = false;\n            ResponsibleDialog1.openDialog(data);\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\n            ResponsibleDialog1.responsibleDialog1Data = null;\n            ModuleManager.disableBase();\n            ModuleManager.disableGamble();\n            ModuleManager.resetWinAnimator(GameModules.Base);\n        } else {\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\n            ResponsibleDialog1.responsibleDialog1Data = data;\n        }\n    }\n\n    static disablePlay(): void {\n        GameManager.disableOnCollect = true;\n        if (GameManager.collectable()) {\n            GameManager.disableGamePlay = true;\n            ModuleManager.disableBase();\n            DataManager.gameState(\"GamePlayDisabled\");\n        }\n    }\n\n    static enablePlay(): void {\n        GameManager.disableOnCollect = false;\n        GameManager.disableGamePlay = false;\n        if (!GameManager.dontEnableGamePlay) {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n        DataManager.gameState(\"GamePlayEnabled\");\n    }\n\n    static openConfirmationDialog(module: string, text: string): void {\n        const dialogData = {\n            text: text,\n            actions: [\n                {\n                    type: \"restore\",\n                    text: Languages.getRid(\"CONTINUE\"),\n                    customData: module,\n                },\n            ],\n            special: true,\n        };\n        ModuleManager.disableChannelModule(module);\n        AppContext.current.showDialog(text, false, null, null, null, dialogData);\n    }\n\n    static closeResponsibleDialog1(): void {\n        GameManager.requestSend = false;\n        ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\n        ModuleManager.restoreGameRound(GameModules.Base);\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/GameManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"./DataManager\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { HtmlDenomContainerElement } from \"../HTMLComponents/Custom/HtmlDenomContainerElement\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlBetSelectorContainerElement } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { HtmlBetSelectorContainerElement2 } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement2\";\nimport { FreeRoundBonusExtended } from \"../Channels/Common/Bonuses/FreeRoundBonusExtended\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\nvar SpinBet = Communication.Game.SpinBet;\nvar BetType = Communication.Game.BetType;\n\nexport class BetManager {\n    static CoinSize: number;\n    static CoinCount: number;\n    static Bet: number;\n\n    static Coins: { [coinSize: number]: Array<number> };\n    static TotalBets: Array<number>;\n\n    static DenomContainer: HtmlDenomContainerElement;\n    static CoinCountContainer: HtmlBetSelectorContainerElement;\n    static BetContainer: HtmlBetSelectorContainerElement2;\n\n    static minBet: boolean = false;\n    static maxBet: boolean = false;\n\n    static initializeBet(): void {\n        if (AppContext.current.getHideAmounts()) {\n            this.hideValues(true);\n        }\n        if (GameManager.baseResponse.initData != null) {\n            if (\n                GameManager.baseResponse.initData.betSettings != null &&\n                GameManager.baseResponse.initData.betSettings.totalBets != null\n            ) {\n                BetManager.TotalBets = GameManager.baseResponse.initData.betSettings.totalBets;\n            }\n\n            if (\n                GameManager.baseResponse.initData.betSettings != null &&\n                GameManager.baseResponse.initData.betSettings.coins != null\n            ) {\n                BetManager.Coins = GameManager.baseResponse.initData.betSettings.coins;\n            }\n\n            if (\n                GameManager.baseResponse.initData.lastBet != null &&\n                GameManager.baseResponse.initData.lastBet.betType === BetType.Total\n            ) {\n                if (\n                    GameManager.baseResponse.initData.lastBet.totalBet != null &&\n                    !AppContext.gameConfiguration.UseCoins\n                ) {\n                    if (\n                        BetManager.Bet != null &&\n                        BetManager.Bet !== GameManager.baseResponse.initData.lastBet.totalBet\n                    ) {\n                        ModuleManager.initNewBet();\n                    } else {\n                        ModuleManager.initNewBet(false);\n                    }\n                    BetManager.Bet = BetHigherThanMinDialog.getGameStartedWithoutFeature()\n                        ? BetManager.TotalBets[0]\n                        : GameManager.baseResponse.initData.lastBet.totalBet;\n                    BetManager.updateBetPosition();\n                    DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                } else {\n                    if (!DataManager.GameRoundClosed) {\n                        if (GameManager.baseResponse.initData.lastBet.coinSize != null) {\n                            BetManager.CoinSize = GameManager.baseResponse.initData.lastBet.coinSize;\n                            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                        }\n                        if (GameManager.baseResponse.initData.lastBet.coinCount != null) {\n                            BetManager.CoinCount = parseInt(\n                                GameManager.baseResponse.initData.lastBet.coinCount.toString(),\n                            );\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataCointCount,\n                                BetManager.CoinCount.toString(),\n                            );\n                        }\n                        if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                            BetManager.Bet = parseFloat(\n                                NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount),\n                            );\n                            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                        }\n                        BalanceManager.recalculateDenomBalance();\n                    } else if (AppContext.current.getDenomination() != null && BetManager.Coins != null) {\n                        if (BetManager.Coins[AppContext.current.getDenomination()] != null) {\n                            BetManager.changeDenom(AppContext.current.getDenomination(), true);\n                        } else {\n                            BetManager.changeDefaultDenom();\n                        }\n                    } else {\n                        BetManager.changeDefaultDenom();\n                    }\n                    if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                        BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                    }\n                }\n            }\n\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.addValues();\n            }\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.addValues();\n            }\n        }\n    }\n\n    static changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        BetHigherThanMinDialog.closeDialog(true);\n        if (DataManager.GameRoundClosed) {\n            FreeRoundBonusExtended.enableUi();\n        }\n\n        BetManager.unHideValues();\n\n        if (AppContext.gameConfiguration.UseCoins) {\n            if (cycle) {\n                BetManager.cycleCoinCount();\n                return;\n            } else if (max) {\n                BetManager.maxCoinCount();\n                return;\n            }\n        }\n\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        var real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n\n        if (BetManager.Bet != null && BetManager.TotalBets != null && BetManager.TotalBets.length > 0) {\n            var index: number;\n            for (var i: number = 0; i < BetManager.TotalBets.length; i++) {\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\n                    index = i;\n                }\n            }\n            if (index != null) {\n                if (decrease) {\n                    if (index === 0) {\n                        if (cycle) {\n                            index = BetManager.TotalBets.length - 1;\n                        }\n                    } else {\n                        index--;\n                    }\n                } else {\n                    if (max) {\n                        var findMax: boolean = false;\n\n                        if (!findMax) {\n                            for (var jj: number = BetManager.TotalBets.length - 1; jj >= 0; jj--) {\n                                if (BetManager.TotalBets[jj] <= bonus && findMax === false) {\n                                    findMax = true;\n                                    index = jj;\n                                }\n                                if (BetManager.TotalBets[jj] <= real && findMax === false) {\n                                    findMax = true;\n                                    index = jj;\n                                }\n                            }\n                        }\n                    } else {\n                        if (index === BetManager.TotalBets.length - 1) {\n                            if (cycle) {\n                                index = 0;\n                            }\n                        } else {\n                            index++;\n                        }\n                    }\n                }\n\n                BetManager.Bet = BetManager.TotalBets[index];\n\n                if (bonus != null) {\n                    if (bonus >= BetManager.Bet) {\n                        ModuleManager.changeBetColor(true);\n                    } else {\n                        ModuleManager.changeBetColor();\n                    }\n                }\n\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({\n                    totalBet: BetManager.Bet,\n                    maxBetAction: max,\n                    userAction: DataManager.getTrustedUserAction(\"BET_CHANGE\"),\n                });\n                BetManager.updateBetPosition();\n            }\n        }\n        BalanceManager.poolingBalance();\n    }\n\n    static sortNumber(a: any, b: any) {\n        return a - b;\n    }\n\n    static changeDefaultDenom(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            let lowestDenom: number;\n            for (let key in BetManager.Coins) {\n                if (lowestDenom == null) {\n                    lowestDenom = parseFloat(key);\n                } else {\n                    if (parseFloat(key) < lowestDenom) {\n                        lowestDenom = parseFloat(key);\n                    }\n                }\n            }\n\n            BetManager.CoinSize = lowestDenom;\n            AppContext.current.setDenomination(BetManager.CoinSize);\n\n            BetManager.Coins[lowestDenom].sort(BetManager.sortNumber);\n\n            // let found: boolean = false;\n            // for(let i: number = 0; i < BetManager.Coins[value].length; i++) {\n            //     if(BetManager.Coins[value][i] === BetManager.CoinCount) {\n            //         found = true;\n            //     }\n            // }\n            //\n            // if(!found) {\n            //     BetManager.CoinCount = BetManager.Coins[value][0];\n            // }\n\n            BetManager.CoinCount = BetManager.Coins[lowestDenom][0];\n\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n            DataManager.updateDataElement(GameData.DataCoinSize);\n            DataManager.updateDataElement(GameData.DataCointCount);\n            DataManager.updateDataElement(GameData.DataBet);\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n            BalanceManager.recalculateDenomBalance();\n        }\n    }\n\n    static changeDenom(value: number, init: boolean = false): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null && BetManager.Coins[value] != null) {\n            BetManager.CoinSize = value;\n            AppContext.current.setDenomination(BetManager.CoinSize);\n\n            BetManager.Coins[value].sort(BetManager.sortNumber);\n\n            if (!init && BetManager.CoinCount != null && !AppContext.gameConfiguration.ResetCoinCountOnDenomChange) {\n                let found: boolean = false;\n                let coinCount: number = BetManager.CoinCount;\n                for (let i: number = 0; i < BetManager.Coins[value].length; i++) {\n                    if (BetManager.Coins[value][i] <= BetManager.CoinCount) {\n                        found = true;\n                        coinCount = BetManager.Coins[value][i];\n                    }\n                }\n\n                if (!found) {\n                    BetManager.CoinCount = BetManager.Coins[value][0];\n                } else {\n                    BetManager.CoinCount = coinCount;\n                }\n            } else {\n                BetManager.CoinCount = BetManager.Coins[value][0];\n            }\n\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n            DataManager.updateDataElement(GameData.DataCoinSize);\n            DataManager.updateDataElement(GameData.DataCointCount);\n            DataManager.updateDataElement(GameData.DataBet);\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n            BalanceManager.recalculateDenomBalance();\n        }\n\n        if (DataManager.HelpDataGameLimit != 0) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.UseCoins &&\n                BetManager.CoinSize != null\n            ) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataHelpGameLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpGameLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n\n        if (DataManager.HelpDataGambleLimit != 0) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.UseCoins &&\n                BetManager.CoinSize != null\n            ) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataHelpGambleLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpGambleLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n    }\n\n    static changeBetByValue(value: number): void {\n        BetManager.unHideValues();\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        BetManager.Bet = value;\n\n        if (bonus != null) {\n            if (bonus >= BetManager.Bet) {\n                ModuleManager.changeBetColor(true);\n            } else {\n                ModuleManager.changeBetColor();\n            }\n        }\n\n        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n        DataManager.updateDataElement(GameData.DataBet);\n        Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n        BetManager.updateBetPosition();\n    }\n\n    static changeCoinCount(value: number): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null) {\n                BetManager.CoinCount = value;\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static cycleCoinCount(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                let index: number = 0;\n                let coinSizes: Array<number> = [];\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\n                    coinSizes.push(BetManager.Coins[BetManager.CoinSize][i]);\n                }\n                coinSizes.sort(BetManager.sortNumber);\n                for (let i: number = 0; i < coinSizes.length; i++) {\n                    if (BetManager.CoinCount === coinSizes[i]) {\n                        index = i;\n                    }\n                }\n\n                if (coinSizes[index + 1] != null) {\n                    BetManager.CoinCount = coinSizes[index + 1];\n                } else {\n                    BetManager.CoinCount = coinSizes[0];\n                }\n\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static maxCoinCount(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                let credit: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n                let coinCount: number = BetManager.CoinCount;\n\n                BetManager.Coins[BetManager.CoinSize].sort(BetManager.sortNumber);\n\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\n                    let bet: number = parseFloat(\n                        NumberUtils.multiply(BetManager.CoinSize, BetManager.Coins[BetManager.CoinSize][i]),\n                    );\n                    if (credit >= bet) {\n                        coinCount = BetManager.Coins[BetManager.CoinSize][i];\n                    }\n                }\n\n                BetManager.CoinCount = coinCount;\n\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static updateBetPosition(): void {\n        if (BetManager.TotalBets != null) {\n            for (let i: number = 0; i < BetManager.TotalBets.length; i++) {\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\n                    if (i <= 0) {\n                        BetManager.minBet = true;\n                        BetManager.maxBet = false;\n                    } else if (i >= BetManager.TotalBets.length - 1) {\n                        BetManager.minBet = false;\n                        BetManager.maxBet = true;\n                    } else {\n                        BetManager.minBet = false;\n                        BetManager.maxBet = false;\n                    }\n\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataBetPosition,\n                        i + 1 + \"/\" + BetManager.TotalBets.length,\n                    );\n                    DataManager.updateDataElement(GameData.DataBetPosition);\n                }\n            }\n        }\n    }\n\n    static unHideValues(credit: boolean = false): void {\n        for (let i = 0; i < HtmlController.HideButtons.length; i++) {\n            HtmlController.HideButtons[i].unHide(credit);\n        }\n    }\n\n    static hideValues(credit: boolean = false): void {\n        for (let i = 0; i < HtmlController.HideButtons.length; i++) {\n            HtmlController.HideButtons[i].hide(credit);\n        }\n    }\n\n    static createBetForSpin(): Communication.Game.SpinBet {\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null && BetManager.CoinCount != null) {\n            return new SpinBet(BetType.Total, BetManager.CoinSize, BetManager.CoinCount, null, null);\n        } else {\n            return new SpinBet(BetType.Total, null, null, null, BetManager.Bet);\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"BetManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BetManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Controller } from \"../GameComponents/Controller\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { DataManager } from \"./DataManager\";\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\nexport class ModuleManager {\n    private static _gameModules: Object = {};\n    private static _channelModules: Object = {};\n\n    static registerGameModule(key: string, module: Controller): void {\n        if (DEBUG) {\n            ModuleManager.log(\"registerGameModule \" + key);\n        }\n\n        if (ModuleManager._gameModules[key] == null) {\n            ModuleManager._gameModules[key] = module;\n        } else {\n            if (DEBUG) {\n                ModuleManager.log(\"ERROR try to register game module with same key: \" + key);\n            }\n        }\n    }\n\n    static registerChannelModule(key: string, module: UserControls): void {\n        if (DEBUG) {\n            ModuleManager.log(\"registerChannelModule \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] == null) {\n            ModuleManager._channelModules[key] = module;\n        } else {\n            if (DEBUG) {\n                ModuleManager.log(\"ERROR try to register channel module with same key: \" + key);\n            }\n        }\n    }\n\n    static connectModules(): boolean {\n        if (DEBUG) {\n            ModuleManager.log(\"connectModules\");\n        }\n\n        let allChannelsHaveController: boolean = true;\n\n        for (let key in ModuleManager._channelModules) {\n            if (ModuleManager._gameModules[key] != null) {\n                ModuleManager._channelModules[key].addController(ModuleManager._gameModules[key]);\n                if (DEBUG) {\n                    ModuleManager.log(\"connect module key: \" + key);\n                }\n            } else {\n                if (DEBUG) {\n                    ModuleManager.log(\"cant connect module key: \" + key);\n                }\n                allChannelsHaveController = false;\n            }\n        }\n\n        return allChannelsHaveController;\n    }\n\n    static initModules(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"initModules\");\n        }\n\n        for (let key in ModuleManager._channelModules) {\n            ModuleManager._channelModules[key].initReceived();\n        }\n\n        if (ModuleManager.gambleActive() && ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].initIntro();\n        } else if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].initIntro();\n        } else {\n            if (ModuleManager._channelModules[GameModules.Base] != null) {\n                ModuleManager._channelModules[GameModules.Base].initIntro();\n            }\n        }\n    }\n\n    static gambleEnabled(): boolean {\n        if (!AppContext.gameDefinition.Gamble) {\n            return false;\n        }\n\n        if (DataManager.Autoplay && !AppContext.gameConfiguration.AutoplayGambleEnabled) {\n            return false;\n        }\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Enabled) {\n            return true;\n        }\n        return false;\n    }\n\n    static gambleActive(): boolean {\n        if (!AppContext.gameDefinition.Gamble) {\n            return false;\n        }\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Active) {\n            return true;\n        }\n        return false;\n    }\n\n    static freespinsEnabled(): boolean {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.status === GameStatuses.Enabled) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static freespinsActive(): boolean {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.status === GameStatuses.Active) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static enableGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enableGamble\");\n        }\n\n        if (ModuleManager.gambleEnabled() && ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].enable();\n        }\n    }\n\n    static startGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"startGamble\");\n        }\n\n        if (ModuleManager.gambleActive()) {\n            ModuleManager.outroModule(GameModules.Base);\n        }\n    }\n\n    static enableFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enableFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].enable();\n        }\n    }\n\n    static startFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"startFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].start();\n        }\n    }\n\n    static endFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"endFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].end();\n        }\n    }\n\n    static disableGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disableGamble\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].disable();\n        }\n    }\n\n    static disableBase(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disableBase\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].disable();\n        }\n    }\n\n    /**\n     * Disable channel module\n     * @param key\n     */\n    static disableChannelModule(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disable\" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].disable();\n        }\n    }\n\n    static changeBetColor(green: boolean = false): void {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].changeBetColor(green);\n        }\n    }\n\n    static initNewBet(animate: boolean = true): void {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].initNewBet(animate);\n        }\n    }\n\n    static introModule(key: string, long: boolean = false): void {\n        if (DEBUG) {\n            ModuleManager.log(\"introModule key: \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].intro(long);\n        }\n    }\n\n    static outroModule(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"outroModule key: \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].outro();\n        }\n    }\n\n    static collect(key: string): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].collect();\n        }\n    }\n\n    static collectInModule(key: string): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].collectReceived();\n        }\n    }\n\n    static restoreGameRound(key: string, collect: boolean = false): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].restoreGameRound(collect);\n        }\n    }\n\n    static dispatchAction(action: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"dispatchAction action: \" + action);\n        }\n\n        for (let key in ModuleManager._channelModules) {\n            ModuleManager._channelModules[key].dispatchAction(action);\n        }\n    }\n\n    static cycleHelp(): void {\n        if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].cycleHelp();\n        } else {\n            if (ModuleManager._channelModules[GameModules.Base] != null) {\n                ModuleManager._channelModules[GameModules.Base].cycleHelp();\n            }\n        }\n    }\n\n    /**\n     * Set autoplay in Base module to true/false.\n     * @param {boolean} tf\n     */\n    static setAutoplayAfterFeature(tf: boolean): void {\n        if (DEBUG) {\n            ModuleManager.log(\"setAutoplayAfterFeature to \" + tf);\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].setAutoplayAfterFeature(tf);\n        }\n    }\n\n    static primaryGameEnded(): boolean {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            return ModuleManager._channelModules[GameModules.Base].primaryGameEnded();\n        }\n    }\n\n    static toggleModuleSounds(key: string, enable: boolean): void {\n        if (ModuleManager._gameModules[key] != null) {\n            ModuleManager._gameModules[key].toggleSounds(enable);\n        }\n    }\n\n    static resetSceneAsOnCollect(key: string): void {\n        if (ModuleManager._gameModules[key] != null) {\n            ModuleManager._gameModules[key].collect();\n        }\n    }\n\n    static resetWinAnimator(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"resetWinAnimator:\" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].resetWinAnimator();\n        }\n    }\n\n    static getActiveGameModules(): Array<string> {\n        let activeModulesArray: Array<string> = [];\n        if (GameManager.gameResponse != null && GameManager.gameResponse.modules != null) {\n            for (var key in GameManager.gameResponse.modules) {\n                if (GameManager.gameResponse.modules[key].status !== GameStatuses.Disabled) {\n                    activeModulesArray.push(key);\n                }\n            }\n        }\n        return activeModulesArray;\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ModuleManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/ModuleManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"./DataManager\";\nimport { BetManager } from \"./BetManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Languages } from \"../Utils/Languages\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { CashierDialog } from \"../Channels/Common/Dialogs/CashierDialog\";\nimport { FreeRoundBonusExtended } from \"../Channels/Common/Bonuses/FreeRoundBonusExtended\";\n\ntype BalanceResponse = Communication.Game.BalanceResponse;\nvar GameModules = Communication.Game.GameModules;\ntype IBalance = Communication.Game.IBalance;\n\nexport class BalanceManager {\n    private static _poolBalance: boolean = false;\n\n    static setBalance(): void {\n        if (GameManager.gameResponse.balance != null) {\n            if (GameManager.gameResponse.balance.real != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceReal,\n                    GameManager.gameResponse.balance.real.toString(),\n                );\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataBalanceRealDenom,\n                        parseInt(\n                            NumberUtils.devide(GameManager.gameResponse.balance.real, BetManager.CoinSize),\n                        ).toString(),\n                    );\n                }\n            }\n\n            if (GameManager.gameResponse.balance.bonus != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceBonus,\n                    GameManager.gameResponse.balance.bonus.toString(),\n                );\n            }\n\n            if (GameManager.gameResponse.balance.real != null && GameManager.gameResponse.balance.bonus != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(GameManager.gameResponse.balance.real, GameManager.gameResponse.balance.bonus),\n                );\n            }\n        }\n    }\n\n    static fixBalance(): void {\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n        let realDenom: number = parseFloat(DataManager.getDataById(GameData.DataBalanceRealDenom));\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\n        let winDenom: number;\n        let total: number = parseFloat(NumberUtils.add(bonus, real));\n        let bet: number = BetManager.Bet;\n        let betDenom: number = BetManager.CoinCount;\n        let denom: number = BetManager.CoinSize;\n\n        if (FreeRoundBonusExtended.inFrb) {\n            if (AppContext.gameDefinition.Gamble && FreeRoundBonusExtended.winPayMethod !== \"cumulative\") {\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\n                    let totalRealBalance: number = DataManager.GameRoundClosed ? real : parseFloat(NumberUtils.add(real, win));\n                    let totalBalance: number = DataManager.GameRoundClosed ? total : parseFloat(NumberUtils.add(total, win));\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, totalRealBalance.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, totalBalance.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, totalBalance.toString());\n                }\n            } else if (!AppContext.gameDefinition.Gamble && !DataManager.Collectable) {\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, total.toString());\n                }\n            }\n            return;\n        }\n\n        if (denom != null && win != null) {\n            winDenom = parseFloat(NumberUtils.devide(win, denom));\n        }\n\n        if (DataManager.GameRoundClosed) {\n            if (bonus != null && bonus > 0 && bonus >= bet) {\n                ModuleManager.changeBetColor(true);\n                DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n            } else {\n                ModuleManager.changeBetColor();\n                DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\n                if (denom != null && betDenom != null) {\n                    DataManager.updateDataElement(\n                        GameData.DataBalanceRealDenom,\n                        NumberUtils.subtract(realDenom, betDenom),\n                    );\n                }\n            }\n            DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n            DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n        } else {\n            if (win > 0) {\n                if (bonus != null && bonus > 0 && bonus >= bet) {\n                    ModuleManager.changeBetColor(true);\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.add(real, win));\n                    if (denom != null && winDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.add(realDenom, winDenom),\n                        );\n                    }\n                } else {\n                    ModuleManager.changeBetColor();\n                    DataManager.updateDataElement(\n                        GameData.DataBalanceReal,\n                        NumberUtils.add(NumberUtils.subtract(real, bet), win),\n                    );\n                    if (denom != null && winDenom != null && betDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.add(NumberUtils.subtract(realDenom, betDenom), winDenom),\n                        );\n                    }\n                }\n                DataManager.updateDataElement(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\n                );\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\n                );\n            } else {\n                if (bonus != null && bonus > 0 && bonus >= bet) {\n                    ModuleManager.changeBetColor(true);\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n                } else {\n                    ModuleManager.changeBetColor();\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\n                    if (denom != null && betDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.subtract(realDenom, betDenom),\n                        );\n                    }\n                }\n                DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n                DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n            }\n        }\n    }\n\n    static hasCredit(maxBet: boolean = false, onSpin: boolean = false): boolean {\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\n        let bet: number = BetManager.Bet;\n        let canPlay: boolean = true;\n\n        if (DataManager.GameRoundClosed) {\n            win = 0;\n        }\n\n        if (bonus != null && bonus > 0) {\n            if (bonus >= bet) {\n                ModuleManager.changeBetColor(true);\n                return true;\n            } else {\n                ModuleManager.changeBetColor();\n            }\n        }\n\n        if (FreeRoundBonusExtended.inFrb) {\n            if (AppContext.current) {\n                AppContext.current.closeDialog();\n            }\n\n            if (CashierDialog.opened) {\n                CashierDialog.onClose();\n            }\n\n            if (onSpin) {\n                FreeRoundBonusExtended.disableUi();\n            }\n\n            canPlay = true;\n        } else if (real <= 0 || real < bet) {\n            var credit: number = parseFloat(NumberUtils.add(real, win));\n            if (credit > 0 && credit >= bet) {\n                if (AppContext.current) {\n                    AppContext.current.closeDialog();\n                }\n\n                if (CashierDialog.opened) {\n                    CashierDialog.onClose();\n                }\n\n                if (onSpin) {\n                    FreeRoundBonusExtended.disableUi();\n                }\n\n                canPlay = true;\n            } else {\n                if (AppContext.current && onSpin) {\n                    ModuleManager.collect(GameModules.Base);\n\n                    if (AppContext.gameConfiguration.ShowCashierMessage) {\n                        CashierDialog.openDialog();\n                    } else {\n                        AppContext.current.showDialog(Languages.getRid(\"NOT_ENOUGH_CREDIT\"), false);\n                    }\n\n                    Platforms.Platforms.clientError(\"NOT_ENOUGH_CREDIT\", Languages.getRid(\"NOT_ENOUGH_CREDIT\"));\n\n                    GameManager.requestSend = false;\n                }\n                canPlay = false;\n            }\n        } else {\n            if (AppContext.current) {\n                AppContext.current.closeDialog();\n            }\n\n            if (CashierDialog.opened) {\n                CashierDialog.onClose();\n            }\n\n            if (onSpin) {\n                FreeRoundBonusExtended.disableUi();\n            }\n\n            canPlay = true;\n        }\n        return canPlay;\n    }\n\n    static poolingBalance(): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.PollCredit > 0 &&\n            DataManager.GameRoundClosed\n        ) {\n            let balance: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n            if (balance != null && BetManager.Bet != null && balance >= BetManager.Bet) {\n                return;\n            } else {\n                if (!BalanceManager._poolBalance) {\n                    setTimeout(() => {\n                        BalanceManager.refreshBalance();\n                    }, AppContext.gameConfiguration.PollCredit);\n                    BalanceManager._poolBalance = true;\n                }\n            }\n        }\n    }\n\n    static refreshBalance(forced: boolean = false): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient.balance().then((response: BalanceResponse) => {\n                BalanceManager.balanceReceived(response, forced);\n            });\n        }\n    }\n\n    static balanceReceived(response: IBalance, forced: boolean = false): void {\n        BalanceManager._poolBalance = false;\n        let bonus: string = response.bonus.toString();\n        let real: string = response.real.toString();\n        let total: string = NumberUtils.add(response.bonus, response.real);\n\n        DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus);\n        DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real);\n        DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total);\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataBalanceRealDenom,\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\n            );\n        }\n\n        DataManager.updateDataElement(GameData.DataBalanceBonus, bonus);\n        DataManager.updateDataElement(GameData.DataBalanceReal, real);\n        DataManager.updateDataElement(GameData.DataBalanceTotal, total);\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\n            DataManager.updateDataElement(\n                GameData.DataBalanceRealDenom,\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\n            );\n        }\n        BalanceManager.poolingBalance();\n\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(total), forced: forced });\n    }\n\n    static recalculateDenomBalance(): void {\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataBalanceRealDenom,\n                parseInt(\n                    NumberUtils.devide(\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\n                        BetManager.CoinSize,\n                    ),\n                ).toString(),\n            );\n            DataManager.updateDataElement(\n                GameData.DataBalanceRealDenom,\n                parseInt(\n                    NumberUtils.devide(\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\n                        BetManager.CoinSize,\n                    ),\n                ).toString(),\n            );\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"BalanceManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BalanceManager.ts\n **/","import { Logger, StringUtils } from \"neo-common\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Platforms } from \"neo-games\";\nimport { Dialog } from \"./Dialog\";\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class CashierDialog {\n    static opened: boolean = false;\n\n    private static _element: HTMLElement;\n    private static _cashierButton: HTMLElement;\n    private static _refreshButton: HTMLElement;\n    private static _closeButton: HTMLElement;\n    private static _closeButtonIcon: HTMLElement;\n\n    static openDialog(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `openDialog()`);\n        }\n\n        Platforms.Platforms.dialogOpened(\"cashier\", true);\n\n        CashierDialog.opened = true;\n\n        CashierDialog._element = document.getElementById(\"cashierDialog\");\n        if (CashierDialog._element != null) {\n            CashierDialog._cashierButton = document.getElementById(\"cashierButton\");\n            if (CashierDialog._cashierButton != null) {\n                CashierDialog._cashierButton.onclick = CashierDialog.onCashier;\n            }\n\n            CashierDialog._refreshButton = document.getElementById(\"refreshButton\");\n            if (CashierDialog._refreshButton != null) {\n                if (AppContext.gameConfiguration.CashierMessageShowRefreshBalanceButton) {\n                    CashierDialog._refreshButton.onclick = CashierDialog.onRefreshBalance;\n                } else {\n                    CashierDialog._refreshButton.style.display = \"none\";\n                }\n            }\n\n            CashierDialog._closeButton = document.getElementById(\"cashierCloseButton\");\n            if (CashierDialog._closeButton != null) {\n                CashierDialog._closeButton.onclick = CashierDialog.onClose;\n            }\n\n            CashierDialog._closeButtonIcon = document.getElementById(\"cashierCloseButtonIcon\");\n            if (CashierDialog._closeButtonIcon != null) {\n                CashierDialog._closeButtonIcon.onclick = CashierDialog.onClose;\n            }\n\n            if (CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\n                CashierDialog._element.classList.remove(Dialog.DisabledClass);\n            }\n        }\n    }\n\n    static onCashier(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onCashier()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\n            Platforms.Platforms.gotoCasier({\n                reason: \"InsufficientFunds\",\n                target: AppContext.gameConfiguration.CashierUrl,\n            }); //todo Second available reason: 'InsufficientFunds'\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\n        } else {\n            Platforms.Platforms.gotoCasier();\n        }\n    }\n\n    static onRefreshBalance(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onRefreshBalance()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n\n        BalanceManager.refreshBalance();\n    }\n\n    static onClose(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onClose()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n        CashierDialog.opened = false;\n\n        Platforms.Platforms.dialogOpened(\"cashier\", false);\n\n        if (!CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\n            CashierDialog._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (FreeRoundBonusExtended.id != null || FreeRoundBonusExtended.otherOfferes.length > 0) {\n            FreeRoundBonusExtended.enableUi();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/CashierDialog.ts\n **/","import { Utils, Logger, StringUtils } from \"neo-common\";\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\nimport { GameApp } from \"../../../GameApp\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { BaseModel } from \"../../../GameComponents/Base/BaseModel\";\nimport { GameConfiguration } from \"../../../../Common/GameConfiguration\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\nexport type DialogOpenData = {\n    special: boolean;\n    gameRoundId: string;\n    errorId: string;\n    actions: Array<Object>;\n};\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class Dialog {\n    static DisabledClass: string = \"_disabled\";\n    static InfoClass: string = \"info\";\n    static ErrorClass: string = \"error\";\n\n    private _app: GameEngine.IApp;\n\n    private _element: HTMLElement;\n    private _elementHeading: HTMLElement;\n    private _elementCode: HTMLElement;\n    private _elementText: HTMLElement;\n    private _elementButton: HTMLElement;\n    private _elementButtonReload: HTMLElement;\n    private _elementCustomButtons: HTMLElement;\n    private _elementInfo: HTMLElement;\n    private _elementError: HTMLElement;\n\n    private _timer: FrameTimerEventEmitter;\n\n    private _customData: any;\n\n    constructor(app: GameEngine.IApp) {\n        this._app = app;\n        this._element = document.getElementById(\"dialog\");\n        this._elementHeading = document.getElementById(\"dialogHeading\");\n        this._elementCode = document.getElementById(\"errorCode\");\n        this._elementText = document.getElementById(\"dialogText\");\n        this._elementButton = document.getElementById(\"dialogButton\");\n        this._elementButtonReload = document.getElementById(\"dialogReloadButton\");\n        this._elementCustomButtons = document.getElementById(\"dialogCustomButtons\");\n        this._elementInfo = document.getElementById(\"dialogInfo\");\n        this._elementError = document.getElementById(\"dialogError\");\n\n        if (this._element != null && !this._element.classList.contains(Dialog.DisabledClass)) {\n            this._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (this._elementInfo != null) {\n            this._elementInfo.style.display = \"none\";\n        }\n\n        if (this._elementError != null) {\n            this._elementError.style.display = \"none\";\n        }\n\n        this._timer = CreateFrameTimer(\"dialogTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.closeDialog.bind(this));\n\n        this.onClickError = this.onClickError.bind(this);\n        this.onClickRefresh = this.onClickRefresh.bind(this);\n\n        this._customData = null;\n    }\n\n    openDialog(\n        text: string,\n        code: string = \"\",\n        errorId: string = \"\",\n        error: boolean = false,\n        special: boolean = false,\n        gameRoundId: string = \"0\",\n        customData: any = null,\n    ): void {\n        this._customData = customData;\n\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"Dialog\",\n                `openDialog('${text}', code: '${code}', errorId: '${errorId}', error: ${error}, special: ${special}, ` +\n                    `gameRoundId: ${gameRoundId}, customData: ${customData ? JSON.stringify(customData) : \"\"})`,\n            );\n        }\n\n        Platforms.Platforms.dialogOpened(\"default\", true);\n\n        if (this._element != null) {\n            const ultraSpecial =\n                !Utils.isNullOrUndefined(this._customData) &&\n                !Utils.isNullOrUndefined(this._customData.data) &&\n                !Utils.isNullOrUndefined(this._customData.data.ultraSpecial) &&\n                this._customData.data.ultraSpecial === true;\n\n            if (this._elementText != null) {\n                this._elementText.innerHTML = text;\n            }\n\n            if (this._elementCode != null) {\n                if (code !== \"\" && this._elementCode != null && !special) {\n                    if (errorId === \"\") {\n                        errorId = \"0\";\n                    }\n\n                    let errorString: string = gameRoundId + \"-\" + errorId;\n                    code = \"CODE_\" + code.replace(\"-\", \"_\");\n                    let errorValue: string = Languages.getRid(code, errorString);\n                    this._elementCode.textContent = errorValue.replace(/ /g, \"\");\n                    this._elementCode.style.display = \"block\";\n                } else {\n                    this._elementCode.style.display = \"none\";\n                }\n            }\n\n            if (error && !ultraSpecial) {\n                if (this._element.classList.contains(Dialog.InfoClass)) {\n                    this._element.classList.remove(Dialog.InfoClass);\n                }\n\n                if (!this._element.classList.contains(Dialog.ErrorClass)) {\n                    this._element.classList.add(Dialog.ErrorClass);\n                }\n\n                if (this._elementInfo != null) {\n                    this._elementInfo.style.display = \"none\";\n                }\n                if (this._elementError != null) {\n                    this._elementError.style.display = \"block\";\n                }\n\n                if (this._elementHeading != null) {\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_ERROR\");\n                }\n\n                if (this._elementButtonReload != null) {\n                    this._elementButtonReload.style.display = \"none\";\n                }\n\n                if (this._elementButton != null) {\n                    this._elementButton.style.display = \"block\";\n                    this._elementButton.onclick = this.onClickError;\n                }\n            } else {\n                if (!this._element.classList.contains(Dialog.InfoClass)) {\n                    this._element.classList.add(Dialog.InfoClass);\n                }\n\n                if (this._element.classList.contains(Dialog.ErrorClass)) {\n                    this._element.classList.remove(Dialog.ErrorClass);\n                }\n\n                if (this._elementInfo != null) {\n                    this._elementInfo.style.display = \"block\";\n                }\n                if (this._elementError != null) {\n                    this._elementError.style.display = \"none\";\n                }\n\n                if (this._elementHeading != null) {\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_INFO\");\n                }\n\n                if (this._elementButton != null) {\n                    this._elementButton.style.display = \"none\";\n                }\n\n                if (this._elementButtonReload) {\n                    this._elementButtonReload.style.display = \"none\";\n                }\n\n                if (ultraSpecial) {\n                    if (this._elementCode != null) {\n                        this._elementCode.style.display = \"none\";\n                    }\n\n                    if (this._elementButton != null) {\n                        this._elementButton.style.display = \"block\";\n                        this._elementButton.onclick = this.onClickError;\n                    }\n                } else if (special) {\n                    if (this._elementCode != null) {\n                        this._elementCode.style.display = \"none\";\n                    }\n\n                    if (this._elementButtonReload != null) {\n                        this._elementButtonReload.style.display = \"block\";\n                        this._elementButtonReload.onclick = this.onClickRefresh;\n                    }\n                } else {\n                    //in case, not enough credit dialog is already opened, send close dialog event\n                    if (this._timer.isPlaying()) {\n                        Platforms.Platforms.dialogOpened(\"default\", false);\n                    }\n\n                    this._timer.stop();\n                    this._timer.start(180);\n                }\n            }\n\n            if (\n                !Utils.isNullOrUndefined(this._customData.data) &&\n                !Utils.isNullOrUndefined(this._customData.data.actions)\n            ) {\n                this.handleCustomActions(this._customData.data.actions);\n            }\n\n            if (this._element.classList.contains(Dialog.DisabledClass)) {\n                this._element.classList.remove(Dialog.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                Logger.errorGroup(\"Dialog\", \"ERROR no dialog\");\n            }\n        }\n    }\n\n    closeDialog(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Dialog\", `closeDialog()`);\n        }\n\n        this._timer.stop();\n\n        Platforms.Platforms.dialogOpened(\"default\", false);\n\n        if (!this._element.classList.contains(Dialog.DisabledClass)) {\n            this._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (FreeRoundBonusExtended.id != null || FreeRoundBonusExtended.otherOfferes.length > 0) {\n            FreeRoundBonusExtended.enableUi();\n        }\n\n        BetHigherThanMinDialog.setOpenedStatus();\n    }\n\n    private onClickError(): void {\n        let clientHost = AppContext.clientHost as ClientHost.IClientHost;\n        if (clientHost) {\n            var request: ClientHost.Types.ClientHostEndGameRequest = null;\n            if (!Utils.isNullOrUndefined(this._customData)) {\n                let dialogRequest = this._customData as ClientHost.Types.ClientHostDialogRequest;\n\n                request = dialogRequest.error as any;\n                request.reason = dialogRequest.error.errorMessageTitle;\n            }\n\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"Dialog\",\n                    `onClickError -> calling client host '${AppContext.gameDefinition.ClientHostType}.endGame()', request: `,\n                    request,\n                );\n            }\n\n            Platforms.Platforms.exitHandler = \"dialog\";\n            Platforms.Platforms.gameClosing();\n            clientHost.endGame(this._app, request);\n        }\n    }\n\n    private onClickRefresh(): void {\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    private handleCustomActions(actions: Array<Object>): void {\n        if (actions.length > 0) {\n            this.hideAllButtons();\n\n            //handle font size of custom text\n            let buttons: Array<HTMLElement> = [];\n            let imageWidthCorrection = 0.82; //transparent pixels correction\n            let baseWidth = 0;\n            let baseFontSize = 0;\n            let maxWidth = 0;\n\n            for (let i = 0; i < actions.length; i++) {\n                let currentAction = actions[i];\n\n                if (currentAction && currentAction[\"type\"]) {\n                    let button: HTMLElement = document.createElement(\"div\");\n                    button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n\n                    //append child to get computed style\n                    this._elementCustomButtons.appendChild(button);\n\n                    baseWidth =\n                        parseInt(window.getComputedStyle(button).getPropertyValue(\"width\")) * imageWidthCorrection;\n                    baseFontSize = parseInt(window.getComputedStyle(button).getPropertyValue(\"font-size\"));\n                    let currentWidth = 0;\n\n                    if (currentAction[\"text\"]) {\n                        currentWidth = this.getButtonTextWidth(currentAction[\"text\"], baseFontSize);\n                        button.textContent = currentAction[\"text\"];\n                    }\n\n                    if (currentWidth > maxWidth) {\n                        maxWidth = currentWidth;\n                    }\n\n                    switch (currentAction[\"type\"]) {\n                        case \"continue\":\n                            button.onclick = this.onClickContinue.bind(this);\n                            break;\n                        case \"exit\":\n                            button.onclick = this.onClickClose;\n                            break;\n                        case \"history\":\n                            button.onclick = this.onClickHistory;\n                            break;\n                        case \"reload\":\n                            button.onclick = this.onClickReload;\n                            break;\n                        case \"restore\":\n                            button.onclick = this.onClickRestore.bind(this, currentAction[\"customData\"]);\n                            break;\n                    }\n\n                    buttons.push(button);\n                }\n            }\n\n            if (maxWidth > baseWidth) {\n                let newFontSize = Math.round(baseFontSize * (baseWidth / maxWidth));\n\n                for (let i = 0; i < buttons.length; i++) {\n                    buttons[i].style.fontSize = newFontSize + \"px\";\n                }\n            }\n        }\n    }\n\n    private getButtonTextWidth(text: string, fontSize: number): number {\n        let elem = document.createElement(\"span\");\n\n        elem.textContent = text;\n        elem.style.fontSize = fontSize + \"px\";\n        document.body.appendChild(elem);\n        let width = elem.offsetWidth;\n\n        document.body.removeChild(elem);\n        return width;\n    }\n\n    private hideAllButtons(): void {\n        if (this._elementButton != null) {\n            this._elementButton.style.display = \"none\";\n        }\n\n        if (this._elementButtonReload != null) {\n            this._elementButtonReload.style.display = \"none\";\n        }\n\n        while (this._elementCustomButtons.firstChild) {\n            this._elementCustomButtons.removeChild(this._elementCustomButtons.firstChild);\n        }\n    }\n\n    private onClickClose(): void {\n        Platforms.Platforms.exitHandler = \"dialog\";\n        GameApp.exit();\n    }\n\n    private onClickContinue(): void {\n        this.closeDialog();\n        BaseModel.spinContinue();\n    }\n\n    private onClickHistory(): void {\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n    }\n\n    private onClickReload(): void {\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    private onClickRestore(module: string): void {\n        this.closeDialog();\n        ModuleManager.restoreGameRound(module);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/Dialog.ts\n **/","import { FreeRoundBonusDialog } from \"../Dialogs/FreeRoundBonusDialog\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { FreeRoundBonusIcon } from \"../Dialogs/FreeRoundBonusIcon\";\nimport { FreeRoundBonus } from \"./FreeRoundBonus\";\n\nexport class FreeRoundBonusExtended extends FreeRoundBonus {\n    public static activateOffer(): void {\n        if (FreeRoundBonus.status === \"active\") {\n            FreeRoundBonus.inFrb = true;\n            FreeRoundBonusIcon.showIcon(\"active\");\n            ModuleManager.disableBase();\n            GameManager.softInit();\n        } else {\n            ModuleManager.disableBase();\n        }\n    }\n\n    public static declineOffer(): void {}\n\n    public static initializeFreeRounds(): void {\n        FreeRoundBonusDialog.initialize();\n        FreeRoundBonusIcon.initialize();\n    }\n\n    public static showFreeRounds(): void {\n        FreeRoundBonus.id = null; //if there is frb campaing, ignore it (misconfiguration)\n        FreeRoundBonus.openOther();\n    }\n\n    public static endFreeRounds(): void {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/FreeRoundBonusExtended.ts\n **/","import { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameApp } from \"../../../GameApp\";\nimport { UriHelper } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\nexport class FreeRoundBonusDialog {\n    private static Dialog: HTMLElement;\n    private static DialogContentOther: HTMLElement;\n    private static DialogContentOther2: HTMLElement;\n    private static DialogContentOtherList: HTMLElement;\n    private static DialogContentOtherList2: HTMLElement;\n    private static DialogContentNew: HTMLElement;\n    private static DialogContentActive: HTMLElement;\n    private static DialogContentEnd: HTMLElement;\n    private static DialogContentExpired: HTMLElement;\n    private static ConfirmationDialog: HTMLElement;\n    private static DialogButtonPlay: HTMLElement;\n    private static DialogButtonPostPone: HTMLElement;\n    private static DialogButtonDeny: HTMLElement;\n    private static DialogButtonOk: HTMLElement;\n    private static DialogButtonYes: HTMLElement;\n    private static DialogButtonNo: HTMLElement;\n\n    private static otherOffersKeys: Array<string> = [];\n\n    private static isConfirmationDialogOpened: boolean = false;\n\n    public static initialize(): void {\n        FreeRoundBonusDialog.Dialog = document.getElementById(\"frbDialog\");\n        FreeRoundBonusDialog.DialogContentOther = document.getElementById(\"frbDialogContentOther\");\n        FreeRoundBonusDialog.DialogContentOther2 = document.getElementById(\"frbDialogContentOther2\");\n        FreeRoundBonusDialog.DialogContentOtherList = document.getElementById(\"frbDialogContentOtherList\");\n        FreeRoundBonusDialog.DialogContentOtherList2 = document.getElementById(\"frbDialogContentOtherList2\");\n        FreeRoundBonusDialog.DialogContentNew = document.getElementById(\"frbDialogContentNew\");\n        FreeRoundBonusDialog.DialogContentActive = document.getElementById(\"frbDialogContentActive\");\n        FreeRoundBonusDialog.DialogContentEnd = document.getElementById(\"frbDialogContentEnd\");\n        FreeRoundBonusDialog.DialogContentExpired = document.getElementById(\"frbDialogContentExpired\");\n        FreeRoundBonusDialog.ConfirmationDialog = document.getElementById(\"frbConfirmationDialog\");\n        FreeRoundBonusDialog.DialogButtonPlay = document.getElementById(\"dialogBtnPlay\");\n        FreeRoundBonusDialog.DialogButtonPostPone = document.getElementById(\"dialogBtnPostPone\");\n        FreeRoundBonusDialog.DialogButtonDeny = document.getElementById(\"dialogBtnDeny\");\n        FreeRoundBonusDialog.DialogButtonOk = document.getElementById(\"dialogBtnOk\");\n        FreeRoundBonusDialog.DialogButtonYes = document.getElementById(\"dialogBtnYes\");\n        FreeRoundBonusDialog.DialogButtonNo = document.getElementById(\"dialogBtnNo\");\n        FreeRoundBonusDialog.bindEvents();\n\n        FreeRoundBonusDialog.setupFRBDialogByConfiguration();\n    }\n\n    // new, other, active, end\n    public static showDialog(type: string): void {\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateGameDataFromModule(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\n        DataManager.updateGameDataFromModule(GameData.DataFrbValidTo, FreeRoundBonus.valid());\n        DataManager.updateGameDataFromModule(GameData.DataFrbWin, FreeRoundBonus.win());\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateDataElement(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\n        DataManager.updateDataElement(GameData.DataFrbValidTo, FreeRoundBonus.valid());\n        DataManager.updateDataElement(GameData.DataFrbWin, FreeRoundBonus.win());\n        FreeRoundBonusDialog.termsUrl();\n        DataManager.showDataElements(\"frbRules\", \"\");\n        if (FreeRoundBonus.rulesLink() === \"\") {\n            DataManager.hideDataElements(\"frbRules\");\n        }\n        if (FreeRoundBonus.win() === \"\") {\n            DataManager.hideDataElements(\"frbWin\");\n        } else {\n            DataManager.showDataElements(\"frbWin\");\n        }\n        FreeRoundBonusDialog.hideAllButtons();\n        FreeRoundBonusDialog.hideAllContents();\n        DataManager.hideDataElements(\"frbCumulative\");\n        DataManager.hideDataElements(\"frbPlatformTransactionFail\");\n        Platforms.Platforms.closeMenu();\n        Platforms.Platforms.dialogOpened(\"frb\", true);\n        switch (type) {\n            case \"new\":\n                FreeRoundBonus.state = \"new\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentNew);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPlay);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPostPone);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonDeny);\n\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    DataManager.showDataElements(\"frbCumulative\");\n                }\n\n                if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\n                }\n\n                break;\n            case \"other\":\n                FreeRoundBonus.state = \"other\";\n                FreeRoundBonusDialog.refillOtherGames();\n                if (\n                    AppContext != null &&\n                    AppContext.gameConfiguration != null &&\n                    AppContext.gameConfiguration.ShowSimilarGames\n                ) {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther);\n                } else {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther2);\n                }\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                FreeRoundBonus.openOther();\n                break;\n            case \"active\":\n                FreeRoundBonus.state = \"active\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentActive);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    DataManager.showDataElements(\"frbCumulative\");\n                }\n                break;\n            case \"end\":\n                FreeRoundBonus.state = \"end\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentEnd);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                if (FreeRoundBonus.status === \"pending\" && FreeRoundBonus.totalWin > 0) {\n                    DataManager.showDataElements(\"frbPlatformTransactionFail\");\n                }\n                break;\n            case \"expired\":\n                FreeRoundBonus.state = \"expired\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentExpired);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                break;\n        }\n        DataManager.hideDataElements(\"frbRegular\");\n        DataManager.hideDataElements(\"frbFeature\");\n\n        if (FreeRoundBonus.state === \"new\" || FreeRoundBonus.state === \"active\") {\n            if (FreeRoundBonus.hasFeature !== null && FreeRoundBonus.hasFeature) {\n                FreeRoundBonusDialog.Dialog.classList.add(\"ffrDialog\");\n\n                if (FreeRoundBonus.remainingCount() === \"1\") {\n                    DataManager.showDataElements(\"frbFeatureSingle\");\n                } else {\n                    DataManager.showDataElements(\"frbFeatureMultiple\");\n                }\n            } else {\n                FreeRoundBonusDialog.Dialog.classList.remove(\"ffrDialog\");\n\n                if (FreeRoundBonus.remainingCount() === \"1\") {\n                    DataManager.showDataElements(\"frbRegularSingle\");\n                } else {\n                    DataManager.showDataElements(\"frbRegularMultiple\");\n                }\n            }\n        }\n\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.Dialog);\n    }\n\n    private static setConfirmationDialog(value: boolean): void {\n        FreeRoundBonusDialog.isConfirmationDialogOpened = value;\n    }\n\n    private static setPointerEventsButtons(value: \"\" | \"none\" = \"\"): void {\n        FreeRoundBonusDialog.DialogButtonPlay.style.pointerEvents = value;\n        FreeRoundBonusDialog.DialogButtonPostPone.style.pointerEvents = value;\n        FreeRoundBonusDialog.DialogButtonDeny.style.pointerEvents = value;\n    }\n\n    public static hideDialog(): void {\n        Platforms.Platforms.dialogOpened(\"frb\", false);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.Dialog);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n    }\n\n    private static bindEvents(): void {\n        if (FreeRoundBonusDialog.DialogButtonPlay != null) {\n            FreeRoundBonusDialog.DialogButtonPlay.onclick = FreeRoundBonusDialog.onPlay;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonPostPone != null) {\n            FreeRoundBonusDialog.DialogButtonPostPone.onclick = FreeRoundBonusDialog.onPostPone;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonDeny != null) {\n            FreeRoundBonusDialog.DialogButtonDeny.onclick = FreeRoundBonusDialog.onDeny;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonOk != null) {\n            FreeRoundBonusDialog.DialogButtonOk.onclick = FreeRoundBonusDialog.onOk;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonYes != null) {\n            FreeRoundBonusDialog.DialogButtonYes.onclick = FreeRoundBonusDialog.onYes;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonNo != null) {\n            FreeRoundBonusDialog.DialogButtonNo.onclick = FreeRoundBonusDialog.onNo;\n        }\n    }\n\n    private static hideAllButtons(): void {\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPlay);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPostPone);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonDeny);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonOk);\n    }\n\n    private static hideAllContents(): void {\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentActive);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentNew);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther2);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentEnd);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentExpired);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n    }\n\n    private static showElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n        }\n    }\n\n    private static hideElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (!element.classList.contains(\"_hidden\")) {\n                element.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    private static disableElement(element: HTMLElement): void {\n        if (element != null) {\n            if (!element.classList.contains(\"_disabled\")) {\n                element.classList.add(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n        }\n    }\n\n    private static onPlay(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.activateOffer();\n\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n    }\n\n    private static onPostPone(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.enableGame();\n\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n\n        BetHigherThanMinDialog.restoreDialog();\n    }\n\n    private static onDeny(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\n\n        FreeRoundBonusDialog.setConfirmationDialog(true);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"none\");\n        RetentionPanel.revalidate();\n\n        BetHigherThanMinDialog.restoreDialog();\n    }\n\n    private static onYes(): void {\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.declineOffer();\n\n        FreeRoundBonusDialog.setConfirmationDialog(false);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n    }\n\n    private static onNo(): void {\n        // FreeRoundBonus.state = ''; //we need to keep state, etc. when reality check dialog open\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n\n        FreeRoundBonusDialog.setConfirmationDialog(false);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n    }\n\n    private static onOk(): void {\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n\n        FreeRoundBonusDialog.hideDialog();\n\n        if (FreeRoundBonus.isLastFrb) {\n            FreeRoundBonus.finishFreeRounds();\n        } else {\n            FreeRoundBonus.enableGame();\n        }\n\n        RetentionPanel.revalidate();\n    }\n\n    public static revalidateOtherGames(): boolean {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\n        ) {\n            return false;\n        }\n        FreeRoundBonusDialog.otherOffersKeys = [];\n        if (FreeRoundBonus.otherOfferes.length > 0) {\n            let now: number = new Date().getTime();\n            for (let i: number = 0; i < FreeRoundBonus.otherOfferes.length; i++) {\n                if (FreeRoundBonus.otherOfferes[i][\"validTo\"] != null) {\n                    let countDownDate: number = new Date(\n                        FreeRoundBonus.otherOfferes[i][\"validTo\"] + \"+00:00\",\n                    ).getTime();\n                    let distance: number = countDownDate - now;\n                    if (distance > 0 && FreeRoundBonus.otherOfferes[i][\"gameCode\"] != null) {\n                        FreeRoundBonusDialog.otherOffersKeys.push(FreeRoundBonus.otherOfferes[i][\"gameCode\"]);\n                    }\n                }\n            }\n        }\n        if (FreeRoundBonusDialog.otherOffersKeys.length > 0) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    public static refillOtherGames(): void {\n        if (FreeRoundBonusDialog.DialogContentOtherList != null) {\n            FreeRoundBonusDialog.DialogContentOtherList.innerHTML = \"\";\n        }\n        if (FreeRoundBonusDialog.DialogContentOtherList2 != null) {\n            FreeRoundBonusDialog.DialogContentOtherList2.innerHTML = \"\";\n        }\n        for (let i: number = 0; i < 5; i++) {\n            if (FreeRoundBonusDialog.otherOffersKeys.length > 0 && FreeRoundBonusDialog.otherOffersKeys[i] != null) {\n                FreeRoundBonusDialog.createItem(\n                    FreeRoundBonusDialog.otherOffersKeys[i],\n                    false,\n                    FreeRoundBonusDialog.DialogContentOtherList,\n                );\n                FreeRoundBonusDialog.createItem(\n                    FreeRoundBonusDialog.otherOffersKeys[i],\n                    true,\n                    FreeRoundBonusDialog.DialogContentOtherList2,\n                );\n            }\n        }\n    }\n\n    private static createItem(gameCode: string, noClick: boolean, parent: HTMLElement): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\n        ) {\n            return;\n        }\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        itemHolder.classList.add(\"frbOfferItem\");\n        itemLoading.classList.add(\"frbGameLoading\");\n        itemLoadingIcon.classList.add(\"loadingIcon\");\n        itemLogo.classList.add(\"frbGameLogo\");\n        itemLogo.setAttribute(\"game\", gameCode);\n        itemLogo.style.background =\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + gameCode + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\n\n        itemHolder.appendChild(itemLoading);\n        itemLoading.appendChild(itemLoadingIcon);\n        itemHolder.appendChild(itemLogo);\n        if (!noClick) {\n            itemLogo.onclick = FreeRoundBonusDialog.selectGame;\n        }\n\n        if (parent != null) {\n            parent.appendChild(itemHolder);\n        }\n    }\n\n    private static selectGame(e: any): void {\n        PlayList.play(\"SND_Click\");\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n                let token: string = urlInfo[\"hash\"].substring(1);\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\n                let root: HTMLElement = document.getElementById(\"root\");\n                if (root != null) {\n                    root.style.display = \"none\";\n                }\n\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\n                if (Platforms.Platforms.handleChangeGame) {\n                    return;\n                }\n\n                setTimeout(() => {\n                    window.location.href = newUrl;\n                }, 100);\n            }\n        }\n    }\n\n    private static termsUrl(): void {\n        if (FreeRoundBonus.termsUrl != null && FreeRoundBonus.termsUrl !== \"\") {\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(\"termsLink\");\n            for (let i: number = 0; i < elements.length; i++) {\n                let element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.setAttribute(\"href\", FreeRoundBonus.termsUrl);\n\n                    //fix to prevent Focus.onClick calling\n                    element.addEventListener(\"click\", function (e: Event) {\n                        e.stopPropagation();\n                    });\n                }\n            }\n        }\n    }\n\n    private static setupFRBDialogByConfiguration(): void {\n        if (AppContext.gameConfiguration) {\n            if (!AppContext.gameConfiguration.FRBShowDenyButton) {\n                FreeRoundBonusDialog.hideFRBDenyButton();\n            }\n\n            if (!AppContext.gameConfiguration.FRBShowPostponeButton) {\n                FreeRoundBonusDialog.hideFRBPostPoneButton();\n            }\n        }\n    }\n\n    private static hideFRBDenyButton(): void {\n        if (FreeRoundBonusDialog.DialogButtonDeny) {\n            FreeRoundBonusDialog.DialogButtonDeny.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonDeny);\n        }\n\n        //remove info text from message\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\n        if (infoMsg) {\n            infoMsg.parentNode.removeChild(infoMsg);\n        }\n    }\n\n    private static hideFRBPostPoneButton(): void {\n        if (FreeRoundBonusDialog.DialogButtonPostPone) {\n            FreeRoundBonusDialog.DialogButtonPostPone.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonPostPone);\n        }\n\n        //remove info text from message\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\n        if (infoMsg) {\n            infoMsg.parentNode.removeChild(infoMsg);\n        }\n    }\n\n    public static dialogActive(): boolean {\n        return !FreeRoundBonusDialog.Dialog.classList.contains(\"_hidden\");\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.ts\n **/","import { GameApp } from \"../../../GameApp\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FreeRoundBonusDialog } from \"../Dialogs/FreeRoundBonusDialog\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { FreeRoundBonusIcon } from \"../Dialogs/FreeRoundBonusIcon\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { Logger, Utils } from \"neo-common\";\nimport { ResponsibleDialog1 } from \"../Dialogs/ResponsibleDialog1\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\nimport { BetHigherThanMinDialog } from \"../Dialogs/BetHigherThanMinDialog\";\n\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\ntype FreeRoundsActivateOfferResponse = Communication.Game.FreeRoundsActivateOfferResponse;\ntype FreeRoundsDeclineOfferResponse = Communication.Game.FreeRoundsDeclineOfferResponse;\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\nexport class FreeRoundBonus {\n    public static inFrb: boolean = false;\n    public static isLastFrb: boolean = false;\n\n    public static id: number;\n    public static termsUrl: string;\n    public static roundsAssigned: number;\n    public static roundsStarted: number;\n    public static roundsPlayed: number;\n    public static remainingFrbCount: number;\n    public static playing: boolean = false;\n    public static status: string;\n    public static winType: string;\n    public static validTo: string;\n    public static winPayMethod: string;\n    public static collectPartial: boolean;\n    public static hasFeature: boolean;\n    public static totalWin: number;\n    public static otherOfferes: Array<Object> = [];\n    public static featureName: string;\n\n    public static wasInitialized: boolean = false;\n\n    public static state: string = \"\";\n    public static endMsgDisplayed: boolean = false;\n\n    private static softInit: boolean = false;\n    private static enabledUi: boolean = false;\n\n    public static initialize(gameClient: Communication.Game.GameClient): void {\n        if (!FreeRoundBonus.wasInitialized && gameClient != null) {\n            gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n                })\n                .catch((err) => {\n                    FreeRoundBonus.wasInitialized = true;\n                });\n        }\n    }\n\n    public static activateOffer(): void {\n        if (FreeRoundBonus.status === \"active\") {\n            FreeRoundBonus.inFrb = true;\n            Platforms.Platforms.featureStarted({ type: \"FRB\" });\n            FreeRoundBonusIcon.showIcon(\"active\");\n            ModuleManager.disableBase();\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n            }\n            GameManager.softInit();\n        } else {\n            ModuleManager.disableBase();\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n                GameApp.gameClient\n                    .sendFreeRoundsActivateOfferRequest(GameApp.key, FreeRoundBonus.id)\n                    .then((response: FreeRoundsActivateOfferResponse) => {\n                        FreeRoundBonus.activateOfferReceived(response);\n                    });\n            }\n        }\n    }\n\n    public static declineOffer(): void {\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n            FreeRoundBonusDialog.hideDialog();\n            FreeRoundBonusIcon.hideAllIcons();\n            GameApp.gameClient\n                .sendFreeRoundsDeclineOfferRequest(GameApp.key, FreeRoundBonus.id)\n                .then((response: FreeRoundsDeclineOfferResponse) => {\n                    FreeRoundBonus.declineOfferReceived(response);\n                    FreeRoundBonus.refreshCurrentOffers();\n                });\n        }\n    }\n\n    public static initializeFreeRounds(): void {\n        FreeRoundBonusDialog.initialize();\n        FreeRoundBonusIcon.initialize();\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null && FreeRoundBonus.status === \"active\") {\n            GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.inFrb = true;\n            Platforms.Platforms.featureInit({ type: \"FRB\" });\n        }\n    }\n\n    public static showFreeRounds(): void {\n        if (FreeRoundBonus.id != null) {\n            FreeRoundBonus.countDown();\n\n            if (FreeRoundBonus.status !== \"active\") {\n                if (DataManager.GameRoundClosed) {\n                    FreeRoundBonusDialog.showDialog(\"new\");\n                    ModuleManager.disableBase();\n                    FreeRoundBonusIcon.showIcon(\"new\");\n                    FreeRoundBonus.enableUi();\n                } else {\n                    if (!FreeRoundBonus.playing) {\n                        FreeRoundBonusIcon.showIcon(\"new\");\n                        FreeRoundBonus.disableUi();\n                    }\n                }\n            } else {\n                if (!DataManager.GameRoundClosed) {\n                    FreeRoundBonus.frbSpin();\n                    FreeRoundBonusDialog.hideDialog();\n                    FreeRoundBonus.disableUi();\n                } else {\n                    ModuleManager.disableBase();\n                }\n            }\n        } else {\n            FreeRoundBonus.openOther();\n        }\n    }\n\n    public static reopenFreeRounds(): void {\n        if (DataManager.GameRoundClosed && FreeRoundBonus.isLastFrb) {\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.disableUi();\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n            ModuleManager.disableBase();\n            return;\n        }\n\n        if (FreeRoundBonus.status === \"new\" && FreeRoundBonus.state === \"new\") {\n            BetHigherThanMinDialog.hideDialog();\n            BetHigherThanMinDialog.closeDialog();\n            FreeRoundBonusDialog.showDialog(\"new\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"new\");\n            FreeRoundBonus.enableUi();\n        }\n\n        if (FreeRoundBonus.state === \"active\") {\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.enableUi();\n        }\n\n        if (FreeRoundBonus.state === \"end\") {\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.disableUi();\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n            ModuleManager.disableBase();\n        }\n\n        if (FreeRoundBonus.state === \"other\") {\n            if (FreeRoundBonus.validTo != null) {\n                let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\n                let now: number = new Date().getTime();\n                let distance: number = countDownDate - now;\n\n                if (distance > 0) {\n                    FreeRoundBonusDialog.showDialog(\"other\");\n                    ModuleManager.disableBase();\n                    FreeRoundBonusIcon.showIcon(\"new\");\n                    FreeRoundBonus.enableUi();\n                }\n            } else if (FreeRoundBonusDialog.revalidateOtherGames()) {\n                FreeRoundBonusDialog.showDialog(\"other\");\n                ModuleManager.disableBase();\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.enableUi();\n            }\n        }\n\n        if (FreeRoundBonus.state === \"\") {\n            FreeRoundBonus.enableUi();\n        }\n    }\n\n    public static openOther(): void {\n        if (FreeRoundBonus.id == null && FreeRoundBonusDialog.revalidateOtherGames()) {\n            FreeRoundBonus.countDownOther();\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.enableUi();\n            } else {\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.disableUi();\n            }\n        }\n    }\n\n    public static endFreeRounds(): void {\n        if (FreeRoundBonus.id != null) {\n            DataManager.Collectable = true;\n            FreeRoundBonus.disableUi();\n            if (GameManager.gameResponse[\"freeRounds\"] != null) {\n                if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                    FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n                }\n                if (GameManager.gameResponse[\"freeRounds\"][\"status\"] != null) {\n                    if (GameManager.gameResponse[\"freeRounds\"][\"status\"] === \"pending\") {\n                        FreeRoundBonus.status = GameManager.gameResponse[\"freeRounds\"][\"status\"];\n                    }\n                }\n            }\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n        }\n    }\n\n    public static finishFreeRounds(): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.inFrb = false;\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\n        FreeRoundBonus.isLastFrb = false;\n        FreeRoundBonus.endMsgDisplayed = false;\n        FreeRoundBonus.wasInitialized = false;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n        FreeRoundBonus.status = null;\n\n        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\n                PlayList.play(\"SND_BaseCollect\");\n                ModuleManager.disableBase();\n                ModuleManager.resetSceneAsOnCollect(GameModules.Base);\n            }\n        }\n\n        FreeRoundBonus.refreshCurrentOffers();\n    }\n\n    public static refreshCurrentOffers(): void {\n        if (GameApp.gameClient != null) {\n            GameApp.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n\n                    if (FreeRoundBonus.id != null) {\n                        FreeRoundBonus.softInit = true;\n                        if (FreeRoundBonus.status === \"active\") {\n                            FreeRoundBonus.initializeFreeRounds();\n                        } else {\n                            FreeRoundBonus.showFreeRounds();\n                        }\n                    } else {\n                        GameManager.softInit();\n                        FreeRoundBonus.disableUi();\n                        if (DataManager.GameRoundClosed) {\n                            GameManager.canExit();\n                        }\n                    }\n                    return null;\n                })\n                .catch((err) => {\n                    FreeRoundBonus.wasInitialized = true;\n\n                    GameManager.softInit();\n                    FreeRoundBonus.disableUi();\n                    if (DataManager.GameRoundClosed) {\n                        GameManager.canExit();\n                    }\n                });\n        }\n    }\n\n    public static expiredFreeRounds(): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.inFrb = false;\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\n        FreeRoundBonus.isLastFrb = false;\n        FreeRoundBonus.endMsgDisplayed = false;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n        FreeRoundBonusDialog.showDialog(\"expired\");\n    }\n\n    private static getCurrentOfferReceived(response: FreeRoundsOffersResponse): void {\n        FreeRoundBonus.totalWin = 0;\n        FreeRoundBonus.termsUrl = null;\n\n        if (response != null) {\n            FreeRoundBonus.wasInitialized = true;\n            response.currentOffer = null; // FRB not supported - can`t process currentOffer\n            if (response.currentOffer != null) {\n                if (response.currentOffer.id != null) FreeRoundBonus.id = response.currentOffer.id;\n                if (response.currentOffer.termsUrl != null) FreeRoundBonus.termsUrl = response.currentOffer.termsUrl;\n                if (response.currentOffer.roundsAssigned != null)\n                    FreeRoundBonus.roundsAssigned = response.currentOffer.roundsAssigned;\n                if (response.currentOffer.roundsStarted != null)\n                    FreeRoundBonus.roundsStarted = response.currentOffer.roundsStarted;\n                if (response.currentOffer.roundsPlayed != null)\n                    FreeRoundBonus.roundsPlayed = response.currentOffer.roundsPlayed;\n                if (response.currentOffer.remainingCount != null)\n                    FreeRoundBonus.remainingFrbCount = response.currentOffer.remainingCount;\n                if (response.currentOffer.playing != null) FreeRoundBonus.playing = response.currentOffer.playing;\n                if (response.currentOffer.status != null) FreeRoundBonus.status = response.currentOffer.status;\n                if (response.currentOffer.winType != null) FreeRoundBonus.winType = response.currentOffer.winType;\n                if (response.currentOffer.validTo != null) FreeRoundBonus.validTo = response.currentOffer.validTo;\n                if (response.currentOffer.winPayMethod != null)\n                    FreeRoundBonus.winPayMethod = response.currentOffer.winPayMethod;\n                if (response.currentOffer.collectPartial != null)\n                    FreeRoundBonus.collectPartial = response.currentOffer.collectPartial;\n                if (response.currentOffer.hasBuyFeature != null)\n                    FreeRoundBonus.hasFeature = response.currentOffer.hasBuyFeature;\n                if (response.currentOffer.buyFeatureName != null)\n                    FreeRoundBonus.featureName = response.currentOffer.buyFeatureName;\n\n                if (FreeRoundBonus.remainingFrbCount == null) {\n                    if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                        FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n                    }\n                }\n\n                if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\n                    FreeRoundBonus.isLastFrb = true;\n                }\n            }\n            FreeRoundBonus.otherOfferes = [];\n            if (response.otherOffers != null) {\n                FreeRoundBonus.otherOfferes = response.otherOffers;\n            }\n        }\n    }\n\n    private static activateOfferReceived(response: FreeRoundsActivateOfferResponse): void {\n        FreeRoundBonus.inFrb = true;\n        Platforms.Platforms.featureStarted({ type: \"FRB\" });\n        FreeRoundBonus.status = \"active\";\n        GameManager.softInit();\n        FreeRoundBonusIcon.showIcon(\"active\");\n    }\n\n    private static declineOfferReceived(response: FreeRoundsDeclineOfferResponse): void {\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n    }\n\n    public static valid(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.validTo != null) {\n            str = FreeRoundBonus.validTo;\n        }\n        return str;\n    }\n\n    public static assignedCount(): string {\n        let str: string = \"0\";\n        if (FreeRoundBonus.roundsAssigned != null) {\n            str = FreeRoundBonus.roundsAssigned.toString();\n        }\n        return str;\n    }\n\n    public static remainingCount(): string {\n        let str: string = \"0\";\n\n        if (FreeRoundBonus.remainingFrbCount == null) {\n            if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n            }\n        }\n\n        if (FreeRoundBonus.remainingFrbCount != null) {\n            //if dynamic frb was updated in last frb, dont update frb remaining count in icon\n            if (FreeRoundBonus.id === -1 && FreeRoundBonus.isLastFrb) {\n                str = \"0\";\n            } else {\n                str = FreeRoundBonus.remainingFrbCount.toString();\n            }\n        }\n\n        return str;\n    }\n\n    public static rulesLink(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.termsUrl != null) {\n            str = '<a href=\"' + FreeRoundBonus.termsUrl + '\" target=\"_blank\">' + FreeRoundBonus.termsUrl + \"</a>\";\n        }\n        return str;\n    }\n\n    public static win(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\n            str =\n                Languages.formatText(Languages.FormatMoney, FreeRoundBonus.totalWin.toString()) +\n                \" \" +\n                DataManager.getDataById(GameData.DataCurrency);\n        }\n        return str;\n    }\n\n    public static frbSpin(): void {\n        if (FreeRoundBonus.id == null && !FreeRoundBonus.inFrb) {\n            return;\n        }\n        if (FreeRoundBonus.inFrb) {\n            DataManager.AutoplayLossLimit = \"∞\";\n        }\n        if (GameManager.gameResponse[\"freeRounds\"] != null) {\n            if (GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"] != null) {\n                FreeRoundBonus.roundsStarted = GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"];\n            }\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n            }\n\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                FreeRoundBonus.remainingFrbCount = GameManager.gameResponse[\"freeRounds\"][\"remainingCount\"];\n            } else {\n                if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                    FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n                }\n            }\n        }\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\n            FreeRoundBonus.isLastFrb = true;\n            DataManager.Autoplay = false;\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n        }\n    }\n\n    private static countDown(): void {\n        if (FreeRoundBonus.validTo != null) {\n            let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\n            let now: number = new Date().getTime();\n            let distance: number = countDownDate - now;\n            let days: number = Math.floor(distance / (1000 * 60 * 60 * 24));\n            let hours: number = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n            let minutes: number = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n            let seconds: number = Math.floor((distance % (1000 * 60)) / 1000);\n\n            if (distance < 0) {\n                FreeRoundBonus.id = null;\n                FreeRoundBonus.softInit = false;\n                FreeRoundBonus.remainingFrbCount = null;\n                FreeRoundBonus.roundsAssigned = 0;\n                FreeRoundBonus.roundsPlayed = 0;\n                FreeRoundBonus.roundsStarted = 0;\n                FreeRoundBonus.hasFeature = false;\n\n                if (FreeRoundBonus.state !== \"end\" && FreeRoundBonus.state !== \"other\") {\n                    if (!FreeRoundBonusDialog.revalidateOtherGames()) {\n                        FreeRoundBonusDialog.hideDialog();\n                        FreeRoundBonusIcon.hideAllIcons();\n                        FreeRoundBonus.state = \"expired\";\n                        FreeRoundBonus.enableGame();\n                    } else {\n                        FreeRoundBonusDialog.hideDialog();\n                        FreeRoundBonus.enableGame();\n                    }\n                }\n            } else {\n                if (days > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, days + \"d\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, days + \"d\");\n                } else if (hours > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\n                } else if (minutes > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\n                }\n\n                setTimeout(() => {\n                    FreeRoundBonus.countDown();\n                }, 1000);\n            }\n        }\n    }\n\n    private static countDownOther(): void {\n        if (!FreeRoundBonusDialog.revalidateOtherGames()) {\n            FreeRoundBonusDialog.hideDialog();\n            FreeRoundBonusIcon.hideAllIcons();\n            FreeRoundBonus.enableGame();\n        } else {\n            setTimeout(() => {\n                FreeRoundBonus.countDownOther();\n            }, 2000);\n        }\n    }\n\n    public static hasNewActiveOffer(): boolean {\n        //frb id -1 is dynamic frb\n        if (FreeRoundBonus.id == null && FreeRoundBonus.remainingFrbCount > 0) {\n            return true;\n        }\n\n        return false;\n    }\n\n    public static updateRemainingCount(count: number): void {\n        //if not initialized yet\n        if (FreeRoundBonus.id == null || (FreeRoundBonus.id > -1 && FreeRoundBonus.status != \"active\")) {\n            //check if we can show dialog\n            if (count > 0) {\n                if (FreeRoundBonus.canInitDynamicFRB()) {\n                    FreeRoundBonus.softInitialize();\n                } else {\n                    //stop autoplay if in base module, to let game check for new frb\n                    if (GameManager.baseResponse != null && GameManager.baseResponse.status === GameStatuses.Enabled) {\n                        DataManager.Autoplay = false;\n                    }\n                    FreeRoundBonus.remainingFrbCount = count;\n                }\n            }\n        } else if (FreeRoundBonus.id === -1) {\n            if (count > 0) {\n                if (FreeRoundBonus.remainingFrbCount > 0) {\n                    FreeRoundBonus.isLastFrb = false;\n                    FreeRoundBonus.remainingFrbCount = count;\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\n                } else {\n                    //updated frb in last frb spin will be show as new frb after end dialog\n                    FreeRoundBonus.remainingFrbCount = count;\n                }\n            } else if (count === 0) {\n                //currently in frb\n                if (FreeRoundBonus.remainingFrbCount > 0) {\n                    FreeRoundBonus.remainingFrbCount = count;\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\n\n                    FreeRoundBonus.isLastFrb = true;\n                    if (DataManager.GameRoundClosed && !DataManager.Autoplay && FreeRoundBonus.enabledUi) {\n                        FreeRoundBonus.endFreeRounds();\n                    } else {\n                        DataManager.Autoplay = false;\n                    }\n                }\n            }\n        }\n    }\n\n    private static canInitDynamicFRB(): boolean {\n        return (\n            !FreeRoundBonusIcon.isDisabled() &&\n            DataManager.GameRoundClosed &&\n            !DataManager.Autoplay &&\n            !ResponsibleDialog1.opened\n        );\n    }\n\n    public static softInitialize(): void {\n        DataManager.Autoplay = false;\n        ModuleManager.disableBase();\n        if (!FreeRoundBonus.softInit) {\n            FreeRoundBonus.softInit = true;\n            GameManager.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n                    FreeRoundBonus.initializeFreeRounds();\n                })\n                .catch((err) => {\n                    FreeRoundBonus.softInit = false;\n                    FreeRoundBonus.wasInitialized = true;\n                    ModuleManager.restoreGameRound(GameModules.Base);\n                });\n        }\n    }\n\n    public static disableUi(): void {\n        FreeRoundBonus.enabledUi = false;\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonusIcon.disableActiveIcon();\n    }\n\n    public static enableUi(): void {\n        if (!ResponsibleDialog1.opened) {\n            FreeRoundBonus.enabledUi = true;\n\n            if (FreeRoundBonus.hasNewActiveOffer()) {\n                FreeRoundBonus.softInitialize();\n                return;\n            }\n\n            //stop enabling icon in cumulative frb (should act like in FS so icon is not clickable)\n            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod == \"cumulative\") {\n                return;\n            }\n\n            FreeRoundBonusIcon.enableActiveIcon();\n        }\n    }\n\n    public static enableGame(): void {\n        if (FreeRoundBonus.softInit) {\n            GameManager.softInit();\n            FreeRoundBonus.softInit = false;\n        } else if (\n            ModuleManager.getActiveGameModules().length == 0 ||\n            ModuleManager.getActiveGameModules().indexOf(GameModules.Base) != -1\n        ) {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n        RetentionPanel.revalidate();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/FreeRoundBonus.ts\n **/","import { Communication } from \"neo-games\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\nimport { GameApp } from \"../../../GameApp\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\n\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\n\nvar GameModules = Communication.Game.GameModules;\n\nexport class FreeRoundBonusIcon {\n    private static IconNew: HTMLElement;\n    private static IconActive: HTMLElement;\n\n    public static initialize(): void {\n        FreeRoundBonusIcon.IconNew = document.getElementById(\"frbIconNew\");\n        FreeRoundBonusIcon.IconActive = document.getElementById(\"frbIconActive\");\n        FreeRoundBonusIcon.bindEvents();\n    }\n\n    // new, active\n    public static showIcon(type: string): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        switch (type) {\n            case \"new\":\n                DataManager.showDataElements(\"helpFRB\", \"block\");\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconNew);\n                RetentionPanel.revalidate();\n                break;\n            case \"active\":\n                DataManager.showDataElements(\"helpFRB\", \"block\");\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconActive);\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    if (FreeRoundBonusIcon.IconActive != null) {\n                        FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\n                    }\n                }\n                RetentionPanel.revalidate();\n                break;\n        }\n        FreeRoundBonusIcon.toggleCumulative();\n    }\n\n    /**\n     * Toggle cumulative style(s)\n     */\n    private static toggleCumulative(): void {\n        if (FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (FreeRoundBonusIcon.IconActive != null) {\n                FreeRoundBonusIcon.IconActive.classList.add(\"cumulativeFrb\");\n            }\n        } else {\n            if (FreeRoundBonusIcon.IconActive != null) {\n                FreeRoundBonusIcon.IconActive.classList.remove(\"cumulativeFrb\");\n            }\n        }\n    }\n\n    private static bindEvents(): void {\n        if (FreeRoundBonusIcon.IconNew != null) {\n            FreeRoundBonusIcon.IconNew.onclick = FreeRoundBonusIcon.handleIconClick.bind(\n                this,\n                FreeRoundBonusIcon.onNew,\n            );\n        }\n\n        if (FreeRoundBonusIcon.IconActive != null) {\n            FreeRoundBonusIcon.IconActive.onclick = FreeRoundBonusIcon.handleIconClick.bind(\n                this,\n                FreeRoundBonusIcon.onActive,\n            );\n        }\n    }\n\n    public static hideAllIcons(): void {\n        DataManager.hideDataElements(\"helpFRB\");\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconNew);\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconActive);\n    }\n\n    public static disableActiveIcon(): void {\n        if (\n            FreeRoundBonusIcon.IconNew != null &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconNew.classList.add(\"_disabled\");\n        }\n        if (\n            FreeRoundBonusIcon.IconActive != null &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\n        }\n    }\n\n    public static enableActiveIcon(): void {\n        if (DataManager.Autoplay && (parseFloat(DataManager.AutoplayCount) > 0 || DataManager.AutoplayCount === \"∞\")) {\n            return;\n        }\n        if (\n            FreeRoundBonusIcon.IconNew != null &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\n            FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconNew.classList.remove(\"_disabled\");\n        }\n        if (\n            FreeRoundBonusIcon.IconActive != null &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\n            FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconActive.classList.remove(\"_disabled\");\n        }\n        RetentionPanel.revalidate();\n    }\n\n    private static showElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"true\") {\n                element.setAttribute(\"active\", \"true\");\n            }\n        }\n    }\n\n    private static hideElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (!element.classList.contains(\"_hidden\")) {\n                element.classList.add(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"false\") {\n                element.setAttribute(\"active\", \"false\");\n            }\n        }\n    }\n\n    private static disableElement(element: HTMLElement): void {\n        if (element != null) {\n            if (!element.classList.contains(\"_disabled\")) {\n                element.classList.add(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"true\") {\n                element.setAttribute(\"active\", \"true\");\n            }\n        }\n    }\n\n    public static isDisabled(): boolean {\n        let isDis: boolean = false;\n        if (FreeRoundBonusIcon.IconNew != null && FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\n            isDis = true;\n        }\n        if (FreeRoundBonusIcon.IconActive != null && FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\n            isDis = true;\n        }\n        return isDis;\n    }\n\n    private static handleIconClick(callback: () => void, event: Event): void {\n        let element = <Element>event.target;\n\n        if (!FreeRoundBonusIcon.isDisabled() && element != null) {\n            element.classList.add(\"_loading\");\n\n            GameApp.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    if (response != null) {\n                        if (response.currentOffer != null || response.otherOffers != null) {\n                            callback();\n                        } else {\n                            FreeRoundBonusExtended.expiredFreeRounds();\n                        }\n                    } else {\n                        FreeRoundBonusExtended.expiredFreeRounds();\n                    }\n                })\n                .finally(() => {\n                    element.classList.remove(\"_loading\");\n                });\n        }\n    }\n\n    private static onNew(): void {\n        if (!FreeRoundBonusIcon.isDisabled()) {\n            PlayList.play(\"SND_Click\");\n            if (FreeRoundBonus.id != null) {\n                FreeRoundBonusDialog.showDialog(\"new\");\n            } else {\n                if (FreeRoundBonus.otherOfferes.length > 0) {\n                    FreeRoundBonusDialog.showDialog(\"other\");\n                }\n            }\n            ModuleManager.disableBase();\n        }\n    }\n\n    private static onActive(): void {\n        if (!FreeRoundBonusIcon.isDisabled() && parseInt(FreeRoundBonus.remainingCount()) > 0) {\n            PlayList.play(\"SND_Click\");\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            ModuleManager.resetSceneAsOnCollect(GameModules.Base);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusIcon.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { Song } from \"./Song\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { SoundManager } from \"../Managers/SoundManager\";\n\n@engineComponent(ComponentTypes.PlayList)\nexport class PlayList {\n    static Songs: { [id: string]: Song } = {};\n\n    static addToPlayList(song: Song): void {\n        PlayList.Songs[song.id] = song;\n    }\n\n    create(node: Element): void {\n        SoundManager.parseElements(node, node.nodeName);\n    }\n\n    static isPlaying(song: string): boolean {\n        if (PlayList.Songs[song] != null) {\n            return PlayList.Songs[song].isPlaying();\n        }\n    }\n\n    static play(song: string, fadeIn: number = 0, reset: boolean = true): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].play(false, fadeIn, reset);\n        }\n    }\n\n    static loop(song: string, fadeIn: number = 0, reset: boolean = false): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].play(true, fadeIn, reset);\n        }\n    }\n\n    static stop(song: string, fadeOut: number = 0): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].stop(fadeOut);\n        }\n    }\n\n    static stopAll(fadeOut: number = 0): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].stop(fadeOut);\n            }\n        }\n    }\n\n    static stopAllInGroup(group: string, toggle: boolean = false): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].toggleGroup(group, toggle);\n            }\n        }\n    }\n\n    static setVolume(song: string, volume: number): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].setVolume(volume);\n        }\n    }\n\n    static restoreVolume(song: string): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].restoreVolume();\n        }\n    }\n\n    static log(s: string): void {\n        if (DEBUG) {\n            const compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/PlayList.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { PlayList } from \"../Sounds/PlayList\";\n\n/**\n * The SoundManager class is used for parsing elements which are representation of playlists and songs.\n * @class SoundManager\n */\nexport class SoundManager {\n    // TODO any\n    static PlayLists: { [id: string]: any } = {};\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"SoundManager\", data);\n        }\n    }\n\n    /**\n     * Parse songs and playlists.\n     * @method parseElements\n     * @param node Element\n     * @param playList string - optional\n     * @return void\n     */\n    static parseElements(node: Element, playList: string = \"\"): void {\n        if (node != null) {\n            var next: Element = node.firstElementChild;\n\n            while (next != null) {\n                var cls: string = \"\";\n                if (next.hasAttribute(\"Class\")) {\n                    cls = next.getAttribute(\"Class\");\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING element with name: \" + next.nodeName + \" has no class\");\n                    }\n                }\n\n                if (cls !== \"\") {\n                    if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.PlayList)) {\n                        var element: any = EngineComponentFactory.get(cls);\n                        SoundManager.PlayLists[next.nodeName] = element;\n                        element.create(next);\n                    } else if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.Song)) {\n                        var element: any = EngineComponentFactory.get(cls);\n                        element.create(next);\n\n                        if (playList !== \"\") {\n                            PlayList.addToPlayList(element);\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/SoundManager.ts\n **/","import { StringUtils, Logger } from \"neo-common\";\nimport { Scaling } from \"./Scaling\";\nimport { Platforms } from \"neo-games\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\nexport class RetentionPanel {\n    //******************************************************************************************************************\n    //  INSTANCE\n    //******************************************************************************************************************\n\n    private static instance: RetentionPanel;\n\n    //******************************************************************************************************************\n    //  SETTINGS\n    //******************************************************************************************************************\n\n    private static panelParentId: string = \"root\";\n\n    private static initRevalidateTimeout: number = 500;\n\n    private static landscapeMaxIconCount: number = window[\"CHANNEL\"] === \"mobile\" ? 4 : 5;\n\n    private static portraitMaxIconCount: number = 2;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private static panelWidth: number = 0;\n\n    private static canShow: boolean = false;\n\n    private static peakActive: boolean = false;\n\n    private screen: HTMLElement;\n\n    private content: HTMLElement;\n\n    private panel: HTMLElement;\n\n    private icons: HTMLElement;\n\n    private lastCount: number;\n\n    private iconsSlotsCount: number;\n\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    constructor() {\n        this.screen = null;\n        this.panel = null;\n        this.icons = null;\n        this.lastCount = 0;\n\n        this.createPanel();\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC\n    //******************************************************************************************************************\n\n    public revalidate(): void {\n        if (!RetentionPanel.canShow) {\n            return;\n        }\n\n        if (this.screen == null) {\n            return;\n        }\n\n        if (this.panel == null) {\n            return;\n        }\n\n        this.log(\"revalidate\");\n        if (this.hasActiveIcon()) {\n            document.body.classList.add(\"retention-panel-active\");\n            RetentionPanel.panelWidth = parseInt(window.getComputedStyle(this.panel).width);\n        } else {\n            document.body.classList.remove(\"retention-panel-active\");\n            RetentionPanel.panelWidth = 0;\n        }\n        this.showPeakHelpIcon();\n        Scaling.LeftPanelWidth = RetentionPanel.panelWidth;\n    }\n\n    //******************************************************************************************************************\n    //  PRIVATE\n    //******************************************************************************************************************\n\n    private showPeakHelpIcon(): void {\n        let peakHelp = document.querySelector(\".hlpTournamentsBtn\");\n\n        if (RetentionPanel.peakActive) {\n            let peakHelpIcon = document.querySelector(\".btnTournaments\");\n            let peakHelpIconBackground =\n                document.getElementById(\"peakMenuBtn\") != null\n                    ? window.getComputedStyle(document.getElementById(\"peakMenuBtn\")).backgroundImage\n                    : false;\n            let peakHelpIconBackgroundSize =\n                document.querySelector(\".hlpMenu\") != null\n                    ? window.getComputedStyle(document.querySelector(\".hlpMenu\")).width\n                    : false;\n            if (peakHelp != null && peakHelpIcon != null && peakHelpIconBackground && peakHelpIconBackgroundSize) {\n                peakHelpIcon.setAttribute(\n                    \"style\",\n                    \"background-image:\" +\n                        peakHelpIconBackground +\n                        \"; height:100%; background-position: center; background-size: auto \" +\n                        peakHelpIconBackgroundSize +\n                        \"; -webkit-transform: scale(0.66); transform: scale(0.66);\",\n                );\n                peakHelp.classList.remove(\"_hidden\");\n            } else {\n                setTimeout(() => {\n                    this.showPeakHelpIcon();\n                }, RetentionPanel.initRevalidateTimeout);\n            }\n        } else {\n            peakHelp.classList.add(\"_hidden\");\n        }\n    }\n\n    private createPanel(): void {\n        const root = document.getElementById(RetentionPanel.panelParentId);\n\n        if (root == null) {\n            if (DEBUG) {\n                console.log(`ERROR - panel with id ${RetentionPanel.panelParentId} was not found`);\n            }\n            return;\n        }\n\n        this.screen = this.createElement(\"div\", \"retentionScreen\", [\"screen\"]);\n        this.content = this.createElement(\"div\", \"retentionContent\");\n        this.panel = this.createElement(\"div\", \"retentionPanel\", [\"gameControls\"]);\n        this.icons = this.createElement(\"div\", \"retentionPanelIcons\");\n\n        this.createContentPlaceholder(this.content);\n        this.createIconsPlaceholder(this.icons);\n\n        this.screen.appendChild(this.content);\n        this.screen.appendChild(this.panel);\n        this.panel.appendChild(this.icons);\n\n        root.appendChild(this.screen);\n    }\n\n    private createContentPlaceholder(contentHolder: HTMLElement): void {\n        if (contentHolder == null) {\n            return;\n        }\n\n        contentHolder.appendChild(this.createElement(\"div\", \"peakContentHolder\", [\"retentionContentHolder\"]));\n        contentHolder.appendChild(this.createElement(\"div\", \"frbContentHolder\", [\"retentionContentHolder\"]));\n    }\n\n    private createIconsPlaceholder(iconsHolder: HTMLElement): void {\n        if (iconsHolder == null) {\n            return;\n        }\n\n        iconsHolder.appendChild(this.createElement(\"div\", \"peakIconHolder\", [\"retentionIconHolder\"]));\n        iconsHolder.appendChild(this.createElement(\"div\", \"frbIconHolder\", [\"retentionIconHolder\"]));\n\n        for (let i = 0; i < iconsHolder.children.length; i++) {\n            let child = iconsHolder.children[i];\n            child.addEventListener(\"click\", (event) => {\n                BetHigherThanMinDialog.closeDialog();\n            });\n        }\n    }\n\n    private createElement(type: string, id: string = \"\", classList: Array<string> = []): HTMLElement {\n        const elem = document.createElement(type);\n\n        if (!StringUtils.isNullOrEmpty(id)) {\n            elem.id = id;\n        }\n\n        if (classList.length > 0) {\n            for (let i = 0; i < classList.length; i++) {\n                elem.classList.add(classList[i]);\n            }\n        }\n\n        return elem;\n    }\n\n    public updateCount(currentCount: number = -1): void {\n        currentCount = currentCount == -1 ? this.lastCount : currentCount;\n\n        const isPortrait = Scaling.isPortrait();\n        const slots = isPortrait\n            ? RetentionPanel.portraitMaxIconCount - currentCount\n            : RetentionPanel.landscapeMaxIconCount - currentCount;\n\n        if (this.iconsSlotsCount != slots) {\n            this.iconsSlotsCount = slots;\n            Platforms.Platforms.iconsCountAvailable(slots);\n        }\n\n        const isMultiIcon = this.isMultiIcon(currentCount);\n        this.icons.classList.remove(\n            \"retention-icon-count-\" + this.lastCount,\n            \"retention-icon-count-\" + this.lastCount + \"-m\",\n        );\n        this.icons.classList.add(\n            \"retention-icon-count-\" + currentCount + (isMultiIcon || RetentionPanel.peakActive ? \"-m\" : \"\"),\n        );\n        this.lastCount = currentCount;\n    }\n\n    private isMultiIcon(count: number): boolean {\n        if (count == 0 || count > 1) {\n            return false;\n        }\n\n        const style = window.getComputedStyle(this.icons);\n        const width = parseInt(style.width);\n        const height = parseInt(style.height);\n\n        return width != 0 ? height / width > 1.5 : false;\n    }\n\n    private hasActiveIcon(): boolean {\n        if (this.panel == null) {\n            return false;\n        }\n\n        if (this.icons == null) {\n            return false;\n        }\n\n        let result = false;\n        let count = 0;\n\n        const children = this.icons.children;\n        for (let i = 0; i < children.length; i++) {\n            const child = children[i] as HTMLElement;\n            if (child != null) {\n                const iconChildren = child.children;\n\n                if (child.id == \"peakIconHolder\") {\n                    RetentionPanel.peakActive = iconChildren.length > 0;\n                }\n\n                for (let j = 0; j < iconChildren.length; j++) {\n                    const iconChild = iconChildren[j] as HTMLElement;\n\n                    if (iconChild.getAttribute(\"active\") == \"true\") {\n                        result = true;\n                        count++;\n                    }\n                }\n            }\n        }\n\n        this.updateCount(count);\n        return result;\n    }\n\n    protected log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"RetentionPanel\", \"RetentionPanel \" + s);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC STATIC\n    //******************************************************************************************************************\n\n    private static getInstance(): RetentionPanel {\n        if (RetentionPanel.instance == null) {\n            RetentionPanel.instance = new RetentionPanel();\n        }\n\n        return RetentionPanel.instance;\n    }\n\n    public static initialize(): void {\n        RetentionPanel.getInstance();\n    }\n\n    public static show(): void {\n        RetentionPanel.canShow = true;\n        RetentionPanel.revalidate();\n\n        Scaling.Emitter.on(Scaling.EventResize, () => {\n            RetentionPanel.getInstance().updateCount();\n            RetentionPanel.getInstance().revalidate();\n        });\n\n        //revalidate possible loaded plugins after loading screen is hidden\n        setTimeout(() => {\n            RetentionPanel.revalidate();\n        }, RetentionPanel.initRevalidateTimeout);\n    }\n\n    public static revalidate(): void {\n        RetentionPanel.getInstance().revalidate();\n        Scaling.resizeRoot(false, false);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/RetentionPanel.ts\n **/","import { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { Communication } from \"neo-games\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\n\n/**\n * Class representing the Bet Higher Than Minimum Dialog.\n */\nexport class BetHigherThanMinDialog {\n    private static _wasOpened: boolean = false;\n    private static _isOpened: boolean = false;\n    private static _reopenDialog: boolean = false;\n    private static _gameStartedWithFeature: boolean = false;\n    private static _gameStarted: boolean = true;\n\n    /**\n     * Opens the dialog if the conditions are met.\n     */\n    public static openDialog(): void {\n        if (\n            !this.canNotifyBetHigherThanMin() ||\n            (this._wasOpened && !this._reopenDialog) ||\n            FreeRoundBonusDialog.dialogActive()\n        ) {\n            return;\n        }\n\n        const minBet =\n            Languages.formatText(Languages.FormatMoney, this.getMinBet().toString()) +\n            \" \" +\n            DataManager.getDataById(GameData.DataCurrency);\n        const message = Languages.getRid(\"EXCEED_MIN_BET\", minBet);\n\n        const dialogData = {\n            text: message,\n            actions: [\n                {\n                    type: \"restore\",\n                    text: Languages.getRid(\"CONTINUE\"),\n                    customData: Communication.Game.GameModules.Base,\n                },\n            ],\n            special: true,\n        };\n\n        AppContext.current.showDialog(message, false, null, null, null, dialogData);\n        this._wasOpened = true;\n        this._isOpened = true;\n    }\n\n    /**\n     * Determines if the dialog can be opened.\n     * @returns True if the dialog can be opened, otherwise false.\n     */\n    public static canOpenDialog(): boolean {\n        return (\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\n            !this.isMinBet() &&\n            !ModuleManager.gambleActive() &&\n            !(FreeRoundBonus.status && FreeRoundBonus.status === \"active\") &&\n            !Jackpot.hasMiniGame() &&\n            !this._wasOpened &&\n            this._gameStartedWithFeature\n        );\n    }\n\n    /**\n     * Closes the dialog if it is opened or prevents from opening if bet was changed.\n     * @param changeBet - Indicates whether the bet was changed.\n     */\n    public static closeDialog(changeBet?: boolean): void {\n        if (this._isOpened) {\n            this._isOpened = false;\n            AppContext.current.closeDialog();\n        }\n        if (changeBet) {\n            this._wasOpened = true;\n        }\n    }\n\n    /**\n     * Hides the dialog for later restoration.\n     */\n    public static hideDialog(): void {\n        if (this._isOpened) {\n            this._reopenDialog = true;\n        }\n    }\n\n    /**\n     * Restores the dialog if it was hidden.\n     */\n    public static restoreDialog(): void {\n        if (this._reopenDialog) {\n            this.openDialog();\n            this._reopenDialog = false;\n        }\n    }\n\n    /**\n     * Sets the opened status of the dialog to false.\n     */\n    public static setOpenedStatus(): void {\n        if (this._isOpened) {\n            this._isOpened = false;\n        }\n    }\n\n    /**\n     * Checks if a game feature is currently active.\n     * @returns True if any game feature is active, otherwise false.\n     */\n    private static gameFeatureActive(): boolean {\n        return (\n            ModuleManager.gambleActive() ||\n            (FreeRoundBonus.status && FreeRoundBonus.status === \"active\") ||\n            Jackpot.hasMiniGame() ||\n            !DataManager.GameRoundClosed\n        );\n    }\n\n    /**\n     * Checks if the current bet is the minimum bet.\n     * @returns True if the current bet is the minimum bet, otherwise false.\n     */\n    private static isMinBet(): boolean {\n        BetManager.updateBetPosition();\n        return BetManager.minBet;\n    }\n\n    /**\n     * Determines if a notification for a bet higher than the minimum should be sent.\n     * @returns True if a notification should be sent, otherwise false.\n     */\n    public static canNotifyBetHigherThanMin(): boolean {\n        return (\n            !this.isMinBet() &&\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\n            this._gameStartedWithFeature &&\n            !this.gameFeatureActive()\n        );\n    }\n\n    /**\n     * Gets the minimum bet value from total bets.\n     * @returns The minimum bet.\n     */\n    private static getMinBet(): number {\n        return Math.min(...BetManager.TotalBets);\n    }\n\n    /**\n     * Checks if the game started with a feature.\n     * @returns True if the game started with a feature active, otherwise false.\n     */\n    public static getGameStartedWithoutFeature(): boolean {\n        if (this._gameStarted) {\n            this._gameStartedWithFeature = this.gameFeatureActive();\n            this._gameStarted = false;\n        }\n        return !this._gameStartedWithFeature && AppContext.gameConfiguration.NotifyBetHigherThanMin;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/BetHigherThanMinDialog.ts\n **/","import { Utils, Logger, NumberUtils, StringUtils } from \"neo-common\";\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameApp } from \"../../../GameApp\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\nimport { RealityCheckGetInfoResponse } from \"neo-games/Engine/Communication/Game/Responses/RealityCheckGetInfoResponse\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { MessageManager } from \"../../../Managers/MessageManager\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class ResponsibleDialog1 {\n    static opened: boolean = false;\n\n    static DisabledClass: string = \"_disabled\";\n\n    private static _element: HTMLElement;\n    private static _continueButton: HTMLElement;\n    private static _historyButton: HTMLElement;\n    private static _closeButton: HTMLElement;\n\n    static showResponsibleDialog1OnCollect: boolean = false;\n    static responsibleDialog1Data: ClientHost.Types.ClientHostResponsibleDialogData;\n\n    static openDialog(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\n        if (AppContext.gameConfiguration.RCIInfo) {\n            GameManager.gameClient.getRealityCheckInfo().then((response: any): any => {\n                ResponsibleDialog1.openDialogContinue(data, response);\n            });\n        } else {\n            ResponsibleDialog1.openDialogContinue(data);\n        }\n    }\n\n    static openDialogContinue(\n        data: ClientHost.Types.ClientHostResponsibleDialogData,\n        info: RealityCheckGetInfoResponse = null,\n    ): void {\n        if (ResponsibleDialog1._element == null) {\n            ResponsibleDialog1._element = document.getElementById(\"responsibleGamingDialog\");\n        }\n\n        if (\n            !Utils.isNullOrUndefined(info) &&\n            !Utils.isNullOrUndefined(info[\"messages\"]) &&\n            info[\"messages\"].length > 0\n        ) {\n            MessageManager.postpone(ResponsibleDialog1.onContinue, info);\n            return;\n        }\n\n        let elementWin: HTMLElement = document.getElementById(\"rciWin\");\n        let elementLost: HTMLElement = document.getElementById(\"rciLost\");\n        let totalGain: number = 0;\n\n        Platforms.Platforms.dialogOpened(\"rci\", true);\n\n        if (info != null) {\n            if (info.totalGain <= 0) {\n                elementWin.style.display = \"none\";\n                elementLost.style.display = \"block\";\n                totalGain = -1 * info.totalGain;\n            } else {\n                elementWin.style.display = \"block\";\n                elementLost.style.display = \"none\";\n                totalGain = info.totalGain;\n            }\n        } else {\n            elementWin.style.display = \"none\";\n            elementLost.style.display = \"none\";\n        }\n\n        BetHigherThanMinDialog.hideDialog();\n        AppContext.current.closeDialog();\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonusExtended.disableUi();\n        Jackpot.closeAllHistoryDialogs();\n        ResponsibleDialog1.opened = true;\n\n        if (ResponsibleDialog1._continueButton == null) {\n            ResponsibleDialog1._continueButton = document.getElementById(\"continueButton\");\n            if (ResponsibleDialog1._continueButton != null) {\n                ResponsibleDialog1._continueButton.onclick = ResponsibleDialog1.onContinue;\n                if (data.continue) {\n                    ResponsibleDialog1._continueButton.style.display = \"inline-block\";\n                } else {\n                    ResponsibleDialog1._continueButton.style.display = \"none\";\n                }\n            }\n        }\n\n        if (ResponsibleDialog1._historyButton == null) {\n            ResponsibleDialog1._historyButton = document.getElementById(\"historyButton\");\n            if (ResponsibleDialog1._historyButton != null) {\n                if (data.history) {\n                    ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onHistory;\n                    ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                } else {\n                    if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n                        ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\n                        ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                    } else {\n                        if (AppContext.gameConfiguration.RCIShowHistoryButton) {\n                            ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\n                            ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                        } else {\n                            ResponsibleDialog1._historyButton.style.display = \"none\";\n                        }\n                    }\n                }\n            }\n        }\n\n        if (ResponsibleDialog1._closeButton == null) {\n            ResponsibleDialog1._closeButton = document.getElementById(\"closeButton\");\n            if (ResponsibleDialog1._closeButton != null) {\n                ResponsibleDialog1._closeButton.onclick = ResponsibleDialog1.onClose;\n                if (data.exit) {\n                    ResponsibleDialog1._closeButton.style.display = \"inline-block\";\n                } else {\n                    ResponsibleDialog1._closeButton.style.display = \"none\";\n                }\n            }\n        }\n\n        //var now: Date = Time;\n        var startTime: number = (Date.now() - data.startTime.getTime()) / 1000;\n        var interval: string = \"\";\n        var t: number = startTime / 60;\n        var h: string = parseInt(t / 60 + \"\") + \"\";\n        if (parseInt(h) < 10) {\n            h = \"0\" + h;\n        }\n        var m: string = parseInt((t % 60) + \"\") + \"\";\n        if (parseInt(m) < 10) {\n            m = \"0\" + m;\n        }\n\n        if (data.interval % 60 === 0) {\n            interval = (data.interval / 60).toFixed(0);\n        } else {\n            interval = (data.interval / 60).toFixed(2);\n        }\n\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1\", Math.floor(t) + \"\");\n\n        if (AppContext.gameConfiguration.RCIInfo) {\n            if (info != null) {\n                if (DataManager.DisplayCurrencies.hasOwnProperty(info.currency)) {\n                    info.currency = DataManager.DisplayCurrencies[info.currency];\n                }\n\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                    DataManager.updateDataElement(\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\n                        NumberUtils.devide(totalGain, BetManager.CoinSize).toString() + \" \" + info.currency,\n                    );\n                } else {\n                    DataManager.updateDataElement(\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\n                        Languages.formatText(Languages.FormatMoney, totalGain.toString()) + \" \" + info.currency,\n                    );\n                }\n            }\n        }\n\n        // RCI_IntervalInfo\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_INTERVAL\", interval);\n\n        let elementRciIntervalInfo = document.getElementById(\"rciIntervalInfo\");\n        if (AppContext.gameConfiguration.RCIIntervalInfo) {\n            if (elementRciIntervalInfo != null) {\n                elementRciIntervalInfo.style.display = \"block\";\n            }\n        } else {\n            if (elementRciIntervalInfo != null) {\n                elementRciIntervalInfo.style.display = \"none\";\n            }\n        }\n\n        if (ResponsibleDialog1._element != null) {\n            if (ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n                ResponsibleDialog1._element.classList.remove(ResponsibleDialog1.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                Logger.errorGroup(\"ResponsibleDialog1\", \"ERROR no responsibleDialog1\");\n            }\n        }\n    }\n\n    static onContinue(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.continue();\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonusExtended.reopenFreeRounds();\n    }\n\n    static onHistory(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.closeRealityCheck();\n        GameApp.history();\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonusExtended.reopenFreeRounds();\n    }\n\n    static onGameRoundHistory(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.closeRealityCheck();\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonusExtended.reopenFreeRounds();\n    }\n\n    static onClose(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\n        GameApp.exit();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/ResponsibleDialog1.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { Languages } from \"../Utils/Languages\";\nimport { GameApp } from \"../GameApp\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { BaseModel } from \"../GameComponents/Base/BaseModel\";\n\nexport class MessageManager {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected static dialog: HTMLElement;\n\n    protected static title: HTMLElement;\n\n    protected static text: HTMLElement;\n\n    protected static buttonsHolder: HTMLElement;\n\n    protected static buttons: Array<HTMLElement>;\n\n    protected static callback: (response: any) => void;\n\n    protected static response: any;\n\n    protected static step: number;\n\n    //******************************************************************************************************************\n    //  POSTPONE\n    //******************************************************************************************************************\n\n    public static postpone(callback: (response: any) => void, response: any): void {\n        if (\n            !Utils.isNullOrUndefined(response) &&\n            !Utils.isNullOrUndefined(response.messages) &&\n            response.messages.length > 0\n        ) {\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\n                MessageManager.dialog = document.getElementById(\"messageDialog\");\n\n                if (!Utils.isNullOrUndefined(MessageManager.dialog)) {\n                    MessageManager.title = MessageManager.dialog.getElementsByTagName(\"h3\")[0];\n                    MessageManager.text = document.getElementById(\"messageDialogText\");\n\n                    MessageManager.buttonsHolder = document.getElementById(\"messageDialogButtons\");\n                    MessageManager.buttons = [];\n                }\n            }\n\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\n                callback(response);\n            } else {\n                MessageManager.callback = callback;\n                MessageManager.response = response;\n                MessageManager.step = 0;\n                MessageManager.handle();\n            }\n        } else {\n            callback(response);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  UPDATE DIALOG DATA\n    //******************************************************************************************************************\n\n    protected static updateDialogData(data: any): void {\n        MessageManager.resetDialogData();\n\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\n            MessageManager.title.innerHTML = data[\"title\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\n            MessageManager.text.innerHTML = data[\"text\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\n            MessageManager.removeAllButtons();\n\n            for (let i = 0; i < data[\"actions\"].length; i++) {\n                let action = data[\"actions\"][i];\n\n                switch (action.type) {\n                    case \"continue\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionContinue.bind(this, action));\n                        break;\n                    case \"exit\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionExit.bind(this, action));\n                        break;\n                    case \"history\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionHistory.bind(this, action));\n                        break;\n                    case \"reload\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionReload.bind(this, action));\n                        break;\n                    case \"cashier\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionCashier.bind(this, action));\n                        break;\n                    case \"link\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionLink.bind(this, action));\n                        break;\n                }\n            }\n        }\n    }\n\n    protected static resetDialogData(): void {\n        //default title\n        MessageManager.title.innerHTML = Languages.getRid(\"DLG_INFO\");\n\n        //remove all custom buttons\n        MessageManager.removeAllButtons();\n\n        //create default continue button\n        MessageManager.createButton(Languages.getRid(\"CONTINUE\"), MessageManager.actionContinue);\n    }\n\n    protected static removeAllButtons(): void {\n        while (MessageManager.buttons.length > 0) {\n            let button = MessageManager.buttons.pop();\n            MessageManager.buttonsHolder.removeChild(button);\n        }\n    }\n\n    protected static createButton(text: string, action: (data: any) => void): void {\n        let button: HTMLElement = document.createElement(\"div\");\n        button.textContent = text;\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n        button.onclick = action;\n\n        MessageManager.buttonsHolder.appendChild(button);\n        MessageManager.buttons.push(button);\n    }\n\n    //******************************************************************************************************************\n    //  ACTIONS\n    //******************************************************************************************************************\n\n    protected static actionContinue(data: any): void {\n        PlayList.play(\"SND_Click\");\n        MessageManager.handle();\n    }\n\n    protected static actionExit(data: any): void {\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.exitHandler = \"messageDialog\";\n        GameApp.exit();\n    }\n\n    protected static actionReload(data: any): void {\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    protected static actionHistory(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            Platforms.Platforms.gotoHistory({ target: data[\"linkUrl\"] });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n    }\n\n    protected static actionCashier(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            Platforms.Platforms.gotoCasier({ reason: \"InsufficientFunds\", target: data[\"linkUrl\"] });\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_self\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\n            Platforms.Platforms.gotoCasier({\n                reason: \"InsufficientFunds\",\n                target: AppContext.gameConfiguration.CashierUrl,\n            });\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\n        }\n    }\n\n    protected static actionLink(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE\n    //******************************************************************************************************************\n\n    protected static handle(): void {\n        if (MessageManager.response.messages.length === MessageManager.step) {\n            MessageManager.dialog.classList.add(\"_disabled\");\n            MessageManager.callback(MessageManager.response);\n            Platforms.Platforms.dialogOpened(\"default\", false);\n        } else {\n            if (MessageManager.response.messages[MessageManager.step].type == \"plugin\") {\n                Platforms.Platforms.sendPluginMessage(MessageManager.response.messages[MessageManager.step].text);\n                MessageManager.step++;\n                MessageManager.handle();\n            } else {\n                MessageManager.dialog.classList.remove(\"_disabled\");\n                MessageManager.updateDialogData(MessageManager.response.messages[MessageManager.step]);\n                MessageManager.step++;\n                Platforms.Platforms.dialogOpened(\"default\", true);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CALLBACK\n    //******************************************************************************************************************\n    public static callbackFnc(response: any): void {\n        BaseModel.spinContinue();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/MessageManager.ts\n **/","import { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\n\nimport { Utils, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { BaseController } from \"./BaseController\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\nimport { FreeRoundBonus } from \"../../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\ntype GameModuleBaseResponse = Communication.Game.GameModuleBaseResponse;\nvar GameModules = Communication.Game.GameModules;\n\nexport class BaseModel {\n    public static LastScreen: Object = {};\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private static GameRequest: GameClientRequest = null;\n\n    protected controller: BaseController;\n\n    private _spinDelayed: FrameTimerEventEmitter;\n    private _delayedResponse: Communication.Game.GameResponse;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: BaseController) {\n        this.controller = controller;\n        this._spinDelayed = CreateFrameTimer(\"spinDelayed\");\n        this._spinDelayed.on(FrameTimerEvents.Complete, this.spinReceivedDelayed.bind(this));\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public spin(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        BaseModel.GameRequest = {} as GameClientRequest;\n        BaseModel.GameRequest.module = Communication.Game.GameModules.Base;\n        BaseModel.GameRequest.bet = BetManager.createBetForSpin();\n        BaseModel.GameRequest.callBackFcn = this.spinReceived.bind(this);\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient\n            .spin(Communication.Game.GameModules.Base, BetManager.createBetForSpin())\n            .then((response: any): any => {\n                MessageManager.postpone(this.spinReceived.bind(this), response);\n            });\n    }\n\n    public static spinContinue(): void {\n        if (!GameManager.requestSend && BaseModel.GameRequest) {\n            GameManager.requestSend = true;\n\n            GameManager.gameClient\n                .spin(BaseModel.GameRequest.module, BaseModel.GameRequest.bet)\n                .then((response: any): any => {\n                    MessageManager.postpone(BaseModel.GameRequest.callBackFcn, response);\n                });\n\n            //after message, we call gameclient spin once again, so we also need to send round started event\n            Platforms.Platforms.roundStarted({\n                totalBet: BetManager.Bet,\n                freeRound: FreeRoundBonus.inFrb,\n                userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n            });\n        }\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected spinReceived(response: Communication.Game.GameResponse): void {\n        this._delayedResponse = response;\n        if (response.module<GameModuleBaseResponse>(GameModules.Base) != null) {\n            BaseModel.LastScreen = response.module<GameModuleBaseResponse>(GameModules.Base).screen;\n        }\n\n        this._spinDelayed.start(30);\n    }\n\n    private spinReceivedDelayed(): void {\n        if (!Utils.isNullOrUndefined(this._delayedResponse)) {\n            GameManager.parseResponses(this._delayedResponse);\n            DataManager.updateResponseData();\n\n            BaseModel.GameRequest = null;\n            this.controller.spinReceived();\n            Platforms.Platforms.spinReceived({\n                balance: parseFloat(\n                    NumberUtils.add(this._delayedResponse.balance.real, this._delayedResponse.balance.bonus),\n                ),\n                win: GameManager.baseResponse.currentWin,\n                totalBet: BetManager.createBetForSpin().totalBet,\n                roundId: this._delayedResponse.roundId,\n            });\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\nexport type GameClientRequest = {\n    module: string;\n    bet: Communication.Game.SpinBet;\n    callBackFcn: () => void;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseModel.ts\n **/","export class BaseActions {\n    static ActionSpin: string = \"SPIN\";\n    static ActionSpinStop: string = \"SPIN_STOP\";\n    static ActionAutoplay: string = \"AUTOPLAY\";\n    static ActionAutoplayStop: string = \"AUTOPLAY_STOP\";\n    static ActionBetPlus: string = \"BET_PLUS\";\n    static ActionBetMinus: string = \"BET_MINUS\";\n    static ActionBetCycle: string = \"BET_CYCLE\";\n    static ActionMaxBet: string = \"MAX_BET\";\n    static ActionBaseCollect: string = \"BASE_COLLECT\";\n    static ActionSelectPayline: string = \"SELECT_PAYLINE_\";\n    static ActionDenomSelect: string = \"DENOM_SELECT\";\n    static ActionDenomSelectValue: string = \"DENOM_SELECT_VALUE_\";\n    static ActionCoinCountSelect: string = \"COIN_COUNT_SELECT\";\n    static ActionCoinCountSelectValue: string = \"COIN_COUNT_SELECT_VALUE_\";\n    static ActionBetSelect: string = \"BET_SELECT\";\n    static ActionBetSelectValue: string = \"BET_SELECT_VALUE_\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/BaseActions.ts\n **/","import { Logger, lodash } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { HtmlButtonElement } from \"./Elements/HtmlButtonElement\";\nimport { HtmlElement } from \"./Elements/HtmlElement\";\nimport { UserAction } from \"./UserAction\";\nimport { HtmlContainerElement } from \"./Elements/HtmlContainerElement\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { GameApp } from \"../GameApp\";\nimport { BaseActions } from \"../Channels/Common/Actions/BaseActions\";\nimport { HtmlSoundContainerElement } from \"./Custom/HtmlSoundContainerElement\";\nimport { HtmlHideButtonElement } from \"./Custom/HtmlHideButtonElement\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\nimport { HtmlSvgElement } from \"../CustomComponents/HtmlSvgElement\";\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\n/**\n * Controller for html elements. Handle action dispatched from html elements.\n * @class HtmlController\n */\nexport class HtmlController {\n    static Configurations = { SHOW_BONUS_BALANCE: false };\n    static ActionElements: { [action: string]: Array<HtmlButtonElement> } = {};\n    static UiActionElements: { [action: string]: Array<HtmlButtonElement> } = {};\n    static UiDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static UiActionDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static ActionsHoldersElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static ContainerElementsById: { [id: string]: HtmlContainerElement } = {};\n    static DataElements: { [data: string]: Array<HtmlElement> } = {};\n    static RidElements: Array<HtmlElement | HtmlSvgElement> = [];\n    static DisabledClass: string = \"_disabled\";\n\n    public static SoundContainer: HtmlSoundContainerElement;\n    public static HideButtons: HtmlHideButtonElement[] = [];\n    public static dispatchActionAllowed: boolean = true;\n\n    /**\n     * Register HtmlButtonElement and pair him with action.\n     * @method registerActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerActionElement(action: string, element: HtmlButtonElement): void {\n        if (DEBUG) {\n            this.log(\"registerActionElement action: \" + action);\n        }\n\n        if (this.ActionElements[action] == null) {\n            this.ActionElements[action] = [];\n        }\n        this.ActionElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlButtonElement and pair him with ui action.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiActionElement(action: string, element: HtmlButtonElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiActionElement action: \" + action);\n        }\n\n        if (this.UiActionElements[action] == null) {\n            this.UiActionElements[action] = [];\n        }\n        this.UiActionElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlContainerElement and pair him with ui disptacher.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiDispatchElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiDispatchElement action: \" + action);\n        }\n\n        if (this.UiDispatchElements[action] == null) {\n            this.UiDispatchElements[action] = [];\n        }\n        this.UiDispatchElements[action].push(element);\n    }\n\n    static registerActionsHoldersElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerActionsHoldersElement action: \" + action);\n        }\n\n        if (this.ActionsHoldersElements[action] == null) {\n            this.ActionsHoldersElements[action] = [];\n        }\n        this.ActionsHoldersElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlContainerElement and pair him with ui action disptacher.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiActionDispatchElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiDispatchElement action: \" + action);\n        }\n\n        if (this.UiActionDispatchElements[action] == null) {\n            this.UiActionDispatchElements[action] = [];\n        }\n        this.UiActionDispatchElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlElement and pair him with some data id.\n     * @method registerDataElement\n     * @param data string name of data id\n     * @param element HtmlElement\n     * @return void\n     */\n    static registerDataElement(data: string, element: HtmlElement): void {\n        if (DEBUG) {\n            this.log(\"registerDataElement data: \" + data);\n        }\n\n        if (this.DataElements[data] == null) {\n            this.DataElements[data] = [];\n        }\n        this.DataElements[data].push(element);\n    }\n\n    /**\n     * Dispatch action to controller.\n     * @method dispatchAction\n     * @param action string name of action\n     * @return void\n     */\n    static dispatchAction(action: string): void {\n        if (DEBUG) {\n            this.log(\"dispatchAction action: \" + action);\n        }\n\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        let updateUI: boolean = true;\n        if (action === BaseActions.ActionDenomSelect) {\n            updateUI = false;\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (action === BaseActions.ActionCoinCountSelect) {\n            updateUI = false;\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (action === BaseActions.ActionBetSelect) {\n            updateUI = false;\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n            switch (action) {\n                case BaseActions.ActionBetPlus:\n                    updateUI = false;\n                    break;\n                case BaseActions.ActionBetMinus:\n                    updateUI = false;\n                    break;\n            }\n        }\n\n        if (updateUI) {\n            this.dispatchUiAction(\"\");\n        }\n        ModuleManager.dispatchAction(action);\n    }\n\n    static setSound(level: number): void {\n        if (HtmlController.SoundContainer != null) {\n            HtmlController.SoundContainer.setLevel(level);\n            return;\n        }\n\n        for (var i: number = 0; i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length; i++) {\n            var ele: HtmlButtonElement = HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\n            if (ele.instance != null) {\n                ele.instance.classList.remove(\"off\");\n                ele.instance.classList.remove(\"on1\");\n                ele.instance.classList.remove(\"on2\");\n                ele.instance.classList.remove(\"on3\");\n\n                switch (level) {\n                    case 0:\n                        ele.instance.classList.add(\"off\");\n                        PIXI.sound.volumeAll = 0;\n                        Platforms.Platforms.setVolume(0);\n                        break;\n                    case 1:\n                        ele.instance.classList.add(\"on1\");\n                        PIXI.sound.volumeAll = 0.25;\n                        Platforms.Platforms.setVolume(1);\n                        break;\n                    case 2:\n                        ele.instance.classList.add(\"on2\");\n                        PIXI.sound.volumeAll = 0.5;\n                        Platforms.Platforms.setVolume(2);\n                        break;\n                    case 3:\n                    default:\n                        ele.instance.classList.add(\"on3\");\n                        PIXI.sound.volumeAll = 1;\n                        Platforms.Platforms.setVolume(3);\n                        break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Dispatch ui action.\n     * @method dispatchUiAction\n     * @param action string name of action\n     * @return void\n     */\n    static dispatchUiAction(action: string): void {\n        if (DEBUG) {\n            this.log(\"dispatchUiAction action: \" + action);\n        }\n\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        BetHigherThanMinDialog.closeDialog();\n\n        Jackpot.closeAllHistoryDialogs();\n        Platforms.Platforms.gameCloseMenu();\n\n        if (action === \"EMPTY\") {\n            PlayList.play(\"SND_Click\");\n            action = \"\";\n        }\n\n        var playSound: boolean = true;\n\n        if (HtmlController.ContainerElementsById[\"autoplaySelector\"]) {\n            var autoplaySelector: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplaySelector\"];\n            if (\n                autoplaySelector != null &&\n                autoplaySelector.instance != null &&\n                !autoplaySelector.instance.classList.contains(\"_disabled\")\n            ) {\n                if (autoplaySelector.recalculateHeight) {\n                    autoplaySelector.instance.removeAttribute(\"style\");\n                }\n                autoplaySelector.instance.classList.add(\"_disabled\");\n            }\n        }\n\n        if (HtmlController.ContainerElementsById[\"autoplayDialog\"]) {\n            var autoplayDialog: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialog\"];\n            if (\n                autoplayDialog != null &&\n                autoplayDialog.instance != null &&\n                !autoplayDialog.instance.classList.contains(\"_disabled\")\n            ) {\n                autoplayDialog.instance.classList.add(\"_disabled\");\n            }\n        }\n\n        if (BetManager.DenomContainer != null) {\n            BetManager.DenomContainer.disable();\n        }\n\n        if (BetManager.CoinCountContainer != null) {\n            BetManager.CoinCountContainer.disable();\n        }\n        if (action !== UserAction.ActionExit && DataManager.SimilarGames != null) {\n            DataManager.SimilarGames.disable();\n        }\n\n        switch (action) {\n            case \"\":\n                Paytable.clearListeners();\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                playSound = false;\n                break;\n            case UserAction.ActionHelpTerminal:\n                ModuleManager.cycleHelp();\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionGameRoundReport:\n                HtmlController.dispatchUiAction(\"\");\n                GameApp.openGameRoundHistory(true);\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionExit:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (DataManager.SimilarGames != null && DataManager.SimilarGames.enabled) {\n                    if (DataManager.SimilarGames.open()) {\n                    } else {\n                        this.dispatchUiAction(\"\");\n                    }\n                    if (HtmlController.SoundContainer != null) {\n                        HtmlController.SoundContainer.disable();\n                    }\n                } else {\n                    Platforms.Platforms.exitHandler = \"exitBtn\";\n                    GameApp.exit();\n                }\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionExit + \"2\":\n                Platforms.Platforms.exitHandler = \"similarGamesExitBtn\";\n                GameApp.exit();\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionToggleSound:\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.toggle();\n                } else {\n                    if (HtmlController.UiActionElements[UserAction.ActionToggleSound] != null) {\n                        for (\n                            var i: number = 0;\n                            i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length;\n                            i++\n                        ) {\n                            var ele: HtmlButtonElement =\n                                HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\n                            if (ele.instance != null) {\n                                if (ele.instance.classList.contains(\"off\")) {\n                                    ele.instance.classList.remove(\"off\");\n                                    ele.instance.classList.add(\"on3\");\n                                    PIXI.sound.volumeAll = 1;\n                                    AppContext.current.setVolume(3);\n                                    Platforms.Platforms.setVolume(3);\n                                } else if (ele.instance.classList.contains(\"on1\")) {\n                                    ele.instance.classList.remove(\"on1\");\n                                    ele.instance.classList.add(\"off\");\n                                    playSound = false;\n                                    PIXI.sound.volumeAll = 0;\n                                    AppContext.current.setVolume(0);\n                                    Platforms.Platforms.setVolume(0);\n                                } else if (ele.instance.classList.contains(\"on2\")) {\n                                    ele.instance.classList.remove(\"on2\");\n                                    ele.instance.classList.add(\"on1\");\n                                    PIXI.sound.volumeAll = 0.25;\n                                    AppContext.current.setVolume(1);\n                                    Platforms.Platforms.setVolume(1);\n                                } else if (ele.instance.classList.contains(\"on3\")) {\n                                    ele.instance.classList.remove(\"on3\");\n                                    ele.instance.classList.add(\"on2\");\n                                    PIXI.sound.volumeAll = 0.5;\n                                    AppContext.current.setVolume(2);\n                                    Platforms.Platforms.setVolume(2);\n                                }\n                            }\n                        }\n                    }\n                }\n                break;\n            case UserAction.ActionToggleBet:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                break;\n            case UserAction.ActionTogglePaytable:\n                this.toggleUiAction(action, \"toggle\");\n                this.toggleUiAction(UserAction.ActionHelpOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Paytable.instance.updateDataValues();\n                break;\n            case UserAction.ActionToggleMenu:\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"remove\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionToggleMenuBack:\n                this.toggleUiAction(UserAction.ActionToggleMenu, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionHelpOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoHelp();\n                break;\n            case UserAction.ActionHelpOff:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionPaytableOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"remove\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoPaytable();\n                Paytable.instance.updateDataValues();\n                break;\n            case UserAction.ActionPaytableOff:\n                Paytable.clearListeners();\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionSwitchControls:\n                let body = document.body;\n                if (body.classList.contains(\"reverse\")) {\n                    body.classList.remove(\"reverse\");\n                } else {\n                    body.classList.add(\"reverse\");\n                }\n                break;\n            case UserAction.ActionSettingsOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoSettings();\n                break;\n            case UserAction.ActionSettingsOff:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionQuickspinDialogOff:\n                QuickspinDialog.closeDialog();\n                break;\n            case UserAction.ActionQuickspinToggle:\n                DataManager.quickspinSet();\n                break;\n            case UserAction.ActionVibrationToggle:\n                DataManager.vibrationSet();\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"No element with ui disptacher: \" + action);\n                }\n        }\n\n        if (playSound) {\n            PlayList.play(\"SND_Click\");\n        }\n    }\n\n    /**\n     * Disable all ui dispatcher at once.\n     * @method disableAllUiDispatchers\n     * @param action string name of action\n     * @return void\n     */\n    private static disableAllUiDispatchers(action: string): void {\n        for (var key in this.UiDispatchElements) {\n            for (var i: number = 0; i < this.UiDispatchElements[key].length; i++) {\n                if (\n                    this.UiDispatchElements[key][i].instance.classList.contains(HtmlController.DisabledClass) ===\n                        false &&\n                    key != action\n                ) {\n                    this.UiDispatchElements[key][i].instance.classList.add(HtmlController.DisabledClass);\n                    if (this.UiActionDispatchElements[key] != null) {\n                        for (var j: number = 0; j < this.UiActionDispatchElements[key].length; j++) {\n                            this.UiActionDispatchElements[key][j].instance.classList.toggle(\n                                HtmlController.DisabledClass,\n                            );\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Toggle disable for specific UI dispatcher.\n     * @method changeUiAcionDispatchers\n     * @param action string name of action\n     * @param type string\n     * @return void\n     */\n    private static changeUiAcionDispatchers(action: string, type: string): void {\n        if (this.UiActionDispatchElements[action] != null) {\n            for (var i: number = 0; i < this.UiActionDispatchElements[action].length; i++) {\n                if (type === \"add\") {\n                    if (\n                        this.UiActionDispatchElements[action][i].instance.classList.contains(\n                            HtmlController.DisabledClass,\n                        ) === false\n                    ) {\n                        this.UiActionDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\n                    }\n                } else if (type === \"remove\") {\n                    this.UiActionDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    this.UiActionDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\n                }\n            }\n        }\n    }\n\n    /**\n     * Toggle disable for specific UI action.\n     * @method toggleUiAction\n     * @param action string name of action\n     * @param type string\n     * @return void\n     */\n    private static toggleUiAction(action: string, type: string): void {\n        if (this.UiDispatchElements[action] != null) {\n            for (var i: number = 0; i < this.UiDispatchElements[action].length; i++) {\n                if (type === \"add\") {\n                    if (\n                        this.UiDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) ===\n                        false\n                    ) {\n                        this.UiDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\n                    }\n                } else if (type === \"remove\") {\n                    this.UiDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    this.UiDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\n                }\n            }\n        }\n    }\n\n    /**\n     * Update all elements with one data id.\n     * @method updateDataElement\n     * @param data string data id\n     * @param value string value for this data id\n     * @return void\n     */\n    static updateDataElement(data: string, value: string): void {\n        if (this.DataElements[data] != null) {\n            for (var i: number = 0; i < this.DataElements[data].length; i++) {\n                HtmlController.currencyNoZero(data, value);\n                this.DataElements[data][i].setText(value);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"No element with data id: \" + data);\n            }\n        }\n    }\n\n    /**\n     * Update all elements which has set some data id.\n     * @method updateDataElements\n     * @param gameData Object\n     * @return void\n     */\n    static updateDataElements(gameData: { [data: string]: string }): void {\n        if (DEBUG) {\n            this.log(\"udpateDataElements\");\n        }\n\n        for (var key in gameData) {\n            if (this.DataElements[key] != null) {\n                for (var i: number = 0; i < this.DataElements[key].length; i++) {\n                    HtmlController.currencyNoZero(key, gameData[key]);\n                    this.DataElements[key][i].setText(gameData[key]);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"No element with data id: \" + key);\n                }\n            }\n        }\n    }\n\n    static currencyNoZero(data: string, value: string): void {\n        let parsedValue: number;\n\n        if (value === \"\") {\n            parsedValue = 0;\n        } else {\n            parsedValue = parseFloat(value);\n        }\n\n        if (data === GameData.DataTotalWin) {\n            if (parsedValue === 0) {\n                HtmlController.toggleElementsByClass(\"currencyNoZero\");\n            } else {\n                HtmlController.toggleElementsByClass(\"currencyNoZero\", true);\n            }\n        } else if (data === GameData.DataGambleColorWin) {\n            if (parsedValue === 0) {\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\");\n            } else {\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\", true);\n            }\n        }\n    }\n\n    static toggleElementsByClass(cls: string, show: boolean = false): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                if (show) {\n                    element.style.display = \"\";\n                } else {\n                    element.style.display = \"none\";\n                }\n            }\n        }\n    }\n\n    /**\n     * Update all elements which has set some action id.\n     * @method updateActionElements\n     * @param actionData Object\n     * @return void\n     */\n    static updateActionElements(actionData: Object): void {\n        if (DEBUG) {\n            this.log(\"updateActionElements\");\n        }\n\n        for (var key in actionData) {\n            if (this.ActionElements[key] != null) {\n                var i: number;\n                for (i = 0; i < this.ActionElements[key].length; i++) {\n                    this.ActionElements[key][i].changeState(actionData[key]);\n                }\n\n                if (this.ActionsHoldersElements[key] != null) {\n                    for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\n                        this.ActionsHoldersElements[key][i].changeState(actionData[key]);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    var keys = lodash.keys(this.ActionElements).join(\";\");\n\n                    this.log(\"No element with data id: \" + key + \", current keys: \" + keys);\n                }\n            }\n        }\n    }\n\n    static updateActionElement(key: string, value: boolean): void {\n        var i: number;\n        if (this.ActionElements[key] != null) {\n            for (i = 0; i < this.ActionElements[key].length; i++) {\n                this.ActionElements[key][i].changeState(value);\n            }\n        }\n\n        if (this.ActionsHoldersElements[key] != null) {\n            for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\n                this.ActionsHoldersElements[key][i].changeState(value);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"HtmlController\", data);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/HtmlController.ts\n **/","/**\n * Static variables of all UI action ids.\n * This variables can be used in xml as UiAction=\"{id}\".\n * @class UserAction\n */\nexport class UserAction {\n    // sound\n    static ActionToggleSound: string = \"TOGGLE_SOUND\";\n\n    // exit\n    static ActionExit: string = \"EXIT\";\n\n    // paytable\n    static ActionTogglePaytable: string = \"TOGGLE_PAYTABLE\";\n    static ActionPaytableOn: string = \"PAYTABLE_ON\";\n    static ActionPaytableOff: string = \"PAYTABLE_OFF\";\n\n    // menu\n    static ActionMenuOn: string = \"MENU_ON\";\n    static ActionMenuOff: string = \"MENU_OFF\";\n    static ActionToggleMenu: string = \"TOGGLE_MENU\";\n    static ActionToggleMenuBack: string = \"TOGGLE_MENU_BACK\";\n    static ActionSwitchControls: string = \"SWITCH_CONTROLS\";\n\n    // help\n    static ActionHelpOn: string = \"HELP_ON\";\n    static ActionHelpOff: string = \"HELP_OFF\";\n    static ActionHelpTerminal: string = \"TERMINAL_HELP_CYCLE\";\n\n    // bet\n    static ActionToggleBet: string = \"TOGGLE_BET\";\n\n    // settings\n    static ActionSettingsOn: string = \"SETTINGS_ON\";\n    static ActionSettingsOff: string = \"SETTINGS_OFF\";\n\n    // quickspin\n    static ActionQuickspinDialogOff: string = \"QUICKSPIN_DIALOG_OFF\";\n    static ActionQuickspinToggle: string = \"QUICKSPIN_TOGGLE\";\n\n    //vibration\n    static ActionVibrationToggle: string = \"VIBRATION_TOGGLE\";\n\n    static ActionGameRoundReport: string = \"GAME_ROUND_REPORT\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/UserAction.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { StageController } from \"../../../Components/StageController\";\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\nimport { TweenMax } from \"gsap\";\nimport { PageVisibilityHandler } from \"../../../CustomComponents/PageVisibilityHandler\";\nimport { Platforms } from \"neo-games\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\nexport class QuickspinDialog {\n    private static _opened: boolean = false;\n    private static _wasOpened: boolean = false;\n    private static _container: HTMLElement;\n\n    static openDialog(): void {\n        QuickspinDialog.initializeDialog();\n\n        if (!QuickspinDialog._opened && !QuickspinDialog._wasOpened) {\n            if (QuickspinDialog._container != null && QuickspinDialog._container.classList.contains(\"_disabled\")) {\n                QuickspinDialog._container.classList.remove(\"_disabled\");\n            }\n\n            PIXI.sound.pauseAll();\n            StageController.pauseAnimations();\n            FrameTimerPool.pause();\n            TweenMax.pauseAll();\n\n            PageVisibilityHandler.Enabled = false;\n            QuickspinDialog._opened = true;\n            QuickspinDialog._wasOpened = true;\n\n            Platforms.Platforms.dialogOpened(\"quickspin\", true);\n        }\n    }\n\n    static closeDialog(): void {\n        if (QuickspinDialog._opened) {\n            QuickspinDialog.initializeDialog();\n            if (QuickspinDialog._container != null && !QuickspinDialog._container.classList.contains(\"_disabled\")) {\n                QuickspinDialog._container.classList.add(\"_disabled\");\n            }\n\n            PIXI.sound.resumeAll();\n            StageController.resumeAnimations();\n            FrameTimerPool.unpause();\n            TweenMax.resumeAll();\n\n            PageVisibilityHandler.Enabled = true;\n            QuickspinDialog._opened = false;\n\n            Platforms.Platforms.quickSpinDialog(DataManager.quickspinEnabled());\n            Platforms.Platforms.dialogOpened(\"quickspin\", false);\n        }\n    }\n\n    private static initializeDialog(): void {\n        if (QuickspinDialog._container == null) {\n            QuickspinDialog._container = document.getElementById(\"quickspinDialog\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/QuickspinDialog.ts\n **/","import { FrameTimerPool } from \"../Utils/FrameTimerPool\";\nimport { TweenMax } from \"gsap\";\n\nexport class PageVisibilityHandler {\n    public static Enabled: boolean = true;\n\n    private static Timer: number;\n\n    public static handle(): void {\n        let hidden: string;\n        let visibilityChange: string;\n        if (typeof document.hidden !== \"undefined\") {\n            hidden = \"hidden\";\n            visibilityChange = \"visibilitychange\";\n        } else if (typeof document.mozHidden !== \"undefined\") {\n            hidden = \"mozHidden\";\n            visibilityChange = \"mozvisibilitychange\";\n        } else if (typeof document.msHidden !== \"undefined\") {\n            hidden = \"msHidden\";\n            visibilityChange = \"msvisibilitychange\";\n        } else if (typeof document.webkitHidden !== \"undefined\") {\n            hidden = \"webkitHidden\";\n            visibilityChange = \"webkitvisibilitychange\";\n        } else {\n            return;\n        }\n\n        document.addEventListener(\n            visibilityChange,\n            (e: any) => {\n                if (PageVisibilityHandler.Enabled) {\n                    let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n\n                    if (document[hidden]) {\n                        PageVisibilityHandler.pauseAll();\n                    } else {\n                        if (isIos) {\n                            clearTimeout(PageVisibilityHandler.Timer);\n                            PageVisibilityHandler.Timer = setTimeout(() => {\n                                PageVisibilityHandler.resumeAll();\n                            }, 200);\n                        } else {\n                            PageVisibilityHandler.resumeAll();\n                        }\n                    }\n                }\n            },\n            false,\n        );\n\n        // https://github.com/pixijs/sound/issues/126#issuecomment-1460499693\n        window.addEventListener(\"focus\", () => {\n            let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n            if (isIos) {\n                const context: any = PIXI.sound.context.audioContext;\n\n                if (context.state === \"suspended\" || context.state === \"interrupted\") {\n                    context.resume();\n                }\n            }\n        });\n    }\n\n    public static pauseAll(): void {\n        TweenMax.pauseAll();\n        FrameTimerPool.pause();\n        PIXI.sound.pauseAll();\n    }\n\n    public static resumeAll(): void {\n        TweenMax.resumeAll();\n        FrameTimerPool.unpause();\n        PIXI.sound.resumeAll();\n        PIXI.sound.unmuteAll();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PageVisibilityHandler.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { NumberUtils } from \"neo-common\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { UserAction } from \"../../../HTMLComponents/UserAction\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\n\nexport class Paytable {\n    static Configurations = {\n        PAYTABLE_COUNT_PREFIX: \"\",\n        PAYTABLE_COUNT_POSTFIX: \"\",\n        PAYTABLE_VALUE_PREFIX: \"\",\n        PAYTABLE_VALUE_POSTFIX: \"x\",\n    };\n\n    public static instance: Paytable;\n\n    private static hasBeenDisplayed: boolean = false;\n    private static payoutPage: number = -1;\n\n    private _pages: HTMLCollectionOf<Element>;\n    private _paginations: HTMLCollectionOf<Element>;\n    private _defaultFontSize: number;\n    private _defaultWidth: number;\n    private _maxBet: number;\n\n    constructor() {\n        Paytable.instance = this;\n    }\n\n    initialize(): void {\n        let prewPageButton: HTMLElement = document.getElementById(\"paytableButtonLeft\");\n        let nextPageButton: HTMLElement = document.getElementById(\"paytableButtonRight\");\n\n        if (prewPageButton != null) {\n            prewPageButton.onclick = this.prewPage.bind(this);\n        }\n\n        if (nextPageButton != null) {\n            nextPageButton.onclick = this.nextPage.bind(this);\n        }\n\n        this._pages = document.getElementsByClassName(\"paytablePage\");\n        this._paginations = document.getElementsByClassName(\"paytablePageNumber\");\n\n        this.updateDataValues();\n    }\n\n    public updateDataValues(): void {\n        var config: Element = Configuration.Configurations[\"PaytableConfiguration\"];\n\n        if (config != null) {\n            var data = {};\n            var next: Element = config.firstElementChild;\n            var maxValue = 0;\n            while (next != null) {\n                if (next.nodeName == \"Pages\") {\n                    if (next.hasAttribute(\"Payouts\")) {\n                        Paytable.payoutPage = parseInt(next.getAttribute(\"Payouts\")) - 1;\n                    }\n                } else if (next.hasAttribute(\"Symbol\")) {\n                    var id: string = next.getAttribute(\"Symbol\");\n                    var attrCounts: string = null;\n                    var attrValues: string = null;\n\n                    var i: number;\n                    if (next.hasAttribute(\"Counts\")) {\n                        attrCounts = next.getAttribute(\"Counts\");\n                        var counts: Array<string> = next.getAttribute(\"Counts\").split(\";\");\n                        for (i = 0; i < counts.length; i++) {\n                            data[\"PTB_SYMBOL_\" + id + \"_COUNT_\" + (i + 1)] =\n                                Paytable.Configurations.PAYTABLE_COUNT_PREFIX +\n                                counts[i] +\n                                Paytable.Configurations.PAYTABLE_COUNT_POSTFIX;\n                        }\n                    }\n\n                    if (next.hasAttribute(\"Values\")) {\n                        attrValues = next.getAttribute(\"Values\");\n                        var values: Array<string> = next.getAttribute(\"Values\").split(\";\");\n                        for (i = 0; i < values.length; i++) {\n                            if (parseInt(values[i]) > maxValue) {\n                                maxValue = parseInt(values[i]);\n                            }\n                            data[\"PTB_SYMBOL_\" + id + \"_VALUE_\" + (i + 1)] = this.getPaytableValue(values[i]);\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\n                let elements = document.getElementsByClassName(\"ptbTotalBetMultiplierDisplay\");\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].classList.add(\"_hidden\");\n                }\n\n                elements = document.getElementsByClassName(\"ptbTotalBetMultiplier\");\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].classList.add(\"_invisible\");\n                }\n            }\n\n            if (data != null) {\n                this.updateFontSize(maxValue, data);\n                HtmlController.updateDataElements(data);\n            }\n\n            this.customContent();\n        }\n    }\n\n    private getPaytableValue(value: string, valueSepratator: string = \"-\"): string {\n        const valueArray = value.split(valueSepratator);\n\n        for (let i = 0; i < valueArray.length; i++) {\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\n                valueArray[i] =\n                    Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(valueArray[i], BetManager.Bet)) +\n                    \" \" +\n                    DataManager.getDataById(GameData.DataCurrency);\n            } else {\n                valueArray[i] =\n                    Paytable.Configurations.PAYTABLE_VALUE_PREFIX +\n                    valueArray[i] +\n                    Paytable.Configurations.PAYTABLE_VALUE_POSTFIX;\n            }\n        }\n\n        return valueArray.join(valueSepratator);\n    }\n\n    private updateFontSize(maxValue: number, data: Object): void {\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\n            return;\n        }\n\n        let elements = HtmlController.DataElements[\"PTB_SYMBOL_1_VALUE_1\"];\n        let conversionRate = 1;\n\n        if (elements != null && elements.length > 0) {\n            const element = elements[0].instance;\n            element.removeAttribute(\"style\");\n            if (this._defaultWidth == undefined) {\n                this._defaultFontSize = parseInt(window.getComputedStyle(element).fontSize);\n                const defaultWidth = window.getComputedStyle(element).width;\n                this._defaultWidth =\n                    defaultWidth.indexOf(\"%\") > -1 ? undefined : parseInt(window.getComputedStyle(element).width);\n                this._maxBet = Math.max(...BetManager.TotalBets);\n            }\n\n            element.textContent =\n                Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(maxValue, BetManager.Bet)) +\n                \" \" +\n                DataManager.getDataById(GameData.DataCurrency);\n            element.style.fontSize = this._defaultFontSize + \"px\";\n            element.style.width = \"auto\";\n            element.style.whiteSpace = \"nowrap\";\n            element.offsetWidth;\n            let currentWidth = parseFloat(window.getComputedStyle(element).width);\n            conversionRate = this._defaultWidth / (currentWidth * 1.1); //1.1 is padding\n            if (isNaN(conversionRate) || conversionRate > 1) {\n                conversionRate = 1;\n            }\n            element.style.fontSize = \"\";\n            element.style.width = \"\";\n        }\n\n        let fontConversion = window[\"CHANNEL\"] == \"mobile\" ? 0.75 : 1;\n        let fontSize = Math.floor(this._defaultFontSize * conversionRate * fontConversion) + \"px\";\n        for (let key in data) {\n            elements = HtmlController.DataElements[key];\n\n            if (elements != null) {\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].instance.style.fontSize = fontSize;\n                }\n            }\n        }\n    }\n\n    private customContent(): void {\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\n            return;\n        }\n    }\n\n    private prewPage(): void {\n        let activeIndex: number = this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            if (activeIndex === 0) {\n                this._pages[this._pages.length - 1].classList.remove(\"_disabled\");\n                this._pages[this._pages.length - 1].classList.add(\"_active\");\n            } else {\n                this._pages[activeIndex - 1].classList.remove(\"_disabled\");\n                this._pages[activeIndex - 1].classList.add(\"_active\");\n            }\n            PlayList.play(\"SND_Click\");\n        }\n        if (this._paginations != null) {\n            if (activeIndex === 0) {\n                this._paginations[this._paginations.length - 1].classList.remove(\"_disabled\");\n                this._paginations[this._paginations.length - 1].classList.add(\"_active\");\n            } else {\n                this._paginations[activeIndex - 1].classList.remove(\"_disabled\");\n                this._paginations[activeIndex - 1].classList.add(\"_active\");\n            }\n        }\n    }\n\n    private nextPage(): void {\n        let activeIndex: number = this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            if (activeIndex === this._pages.length - 1) {\n                this._pages[0].classList.remove(\"_disabled\");\n                this._pages[0].classList.add(\"_active\");\n            } else {\n                this._pages[activeIndex + 1].classList.remove(\"_disabled\");\n                this._pages[activeIndex + 1].classList.add(\"_active\");\n            }\n            PlayList.play(\"SND_Click\");\n        }\n        if (this._paginations != null) {\n            if (activeIndex === this._paginations.length - 1) {\n                this._paginations[0].classList.remove(\"_disabled\");\n                this._paginations[0].classList.add(\"_active\");\n            } else {\n                this._paginations[activeIndex + 1].classList.remove(\"_disabled\");\n                this._paginations[activeIndex + 1].classList.add(\"_active\");\n            }\n        }\n    }\n\n    private setPage(page: number): void {\n        if (page < 0 || page > this._pages.length - 1) {\n            return;\n        }\n\n        this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            this._pages[page].classList.remove(\"_disabled\");\n            this._pages[page].classList.add(\"_active\");\n            (this._pages[page] as HTMLElement).scrollIntoView();\n        }\n\n        if (this._paginations != null) {\n            this._paginations[page].classList.remove(\"_disabled\");\n            this._paginations[page].classList.add(\"_active\");\n        }\n    }\n\n    private disableElementsAndReturnActive(): number {\n        let activeIndex: number = 0;\n        for (var i: number = 0; i < this._pages.length; i++) {\n            var element: HTMLElement = <HTMLElement>this._pages[i];\n            if (element != null) {\n                if (!element.classList.contains(\"_disabled\")) {\n                    element.classList.add(\"_disabled\");\n                }\n                if (element.classList.contains(\"_active\")) {\n                    activeIndex = i;\n                    element.classList.remove(\"_active\");\n                }\n            }\n        }\n\n        for (var i: number = 0; i < this._paginations.length; i++) {\n            var element: HTMLElement = <HTMLElement>this._paginations[i];\n            if (element != null) {\n                if (!element.classList.contains(\"_disabled\")) {\n                    element.classList.add(\"_disabled\");\n                }\n                if (element.classList.contains(\"_active\")) {\n                    element.classList.remove(\"_active\");\n                }\n            }\n        }\n\n        return activeIndex;\n    }\n\n    public static openAtStart(newGameRound: boolean = false): void {\n        if (Paytable.shouldOpen(newGameRound)) {\n            Paytable.show();\n        }\n    }\n\n    public static show(): void {\n        Paytable.hasBeenDisplayed = true;\n\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                }\n            }\n        }\n\n        Paytable.openPayoutPage();\n        window.addEventListener(\"resize\", Paytable.openPayoutPage);\n    }\n\n    private static openPayoutPage(): void {\n        Paytable.instance.setPage(Paytable.payoutPage);\n    }\n\n    public static clearListeners(): void {\n        window.removeEventListener(\"resize\", Paytable.openPayoutPage);\n    }\n\n    public static shouldOpen(newGameRound: boolean = false, isSpin: boolean = false): boolean {\n        if (!AppContext || !AppContext.gameConfiguration.ShowPaytableAtStart) {\n            return false;\n        }\n\n        //if prepareNewGameRound was called before GameManager.showGame, ignore hasBeenDisplayed\n        if (Paytable.hasBeenDisplayed && newGameRound) {\n            return false;\n        }\n\n        if (ModuleManager.gambleActive()) {\n            return false;\n        }\n\n        if (!DataManager.GameRoundClosed && !isSpin) {\n            return false;\n        }\n\n        if (FreeRoundBonus.isLastFrb) {\n            return false;\n        }\n\n        return true;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Paytable/Paytable.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"./ComponentTypes\";\n\n/**\n * Configuration hold elements configurations from xml by ID.\n * @class Configuration\n */\n@engineComponent(ComponentTypes.Element)\nexport class Configuration {\n    static Configurations: { [id: string]: Element } = {};\n}\n\nexport const GeneralConfigurationAttributes = {\n    /**\n     * ReelCount is count of reels on screen for game.\n     * @property ReelCount\n     * @default null\n     */\n    REEL_COUNT: \"ReelCount\",\n    /**\n     * ReelX is array of x position for reels.\n     * @property ReelX\n     * @default null\n     */\n    REEL_X: \"ReelX\",\n    /**\n     * ReelY is array of y position for reels.\n     * @property ReelY\n     * @default null\n     */\n    REEL_Y: \"ReelY\",\n    /**\n     * Standard symbol width without offsets.\n     * @property SymbolWidth\n     * @default null\n     */\n    SYMBOL_WIDTH: \"SymbolWidth\",\n    /**\n     * Standard symbol height without offsets.\n     * @property SymbolHeight\n     * @default null\n     */\n    SYMBOL_HEIGHT: \"SymbolHeight\",\n    /**\n     * @property SymbolBottomCount\n     */\n    SYMBOL_BOTTOM_COUNT: \"SymbolBottomCount\",\n    /**\n     *@property SymbolTopCount\n     */\n    SYMBOL_TOP_COUNT: \"SymbolTopCount\",\n    /**\n     * Number of symbols visible on reel.\n     * @property VisibleSymbolCount\n     * @default null\n     */\n    VISIBLE_SYMBOL_COUNT: \"VisibleSymbolCount\",\n    /**\n     * Wins multipliers (need WinsAnimations with same array length).\n     * @property WinsMultipliers\n     * @default null\n     */\n    WINS_MULTIPLIERS: \"WinsMultipliers\",\n    /**\n     * Wins animations (need WinsMultipliers with same array length).\n     * @property WinsAnimations\n     * @default null\n     */\n    WINS_ANIMATIONS: \"WinsAnimations\",\n};\n\nexport const ReelConfigurationAttributes = {\n    /**\n     * ForceSpeed of rotation in frames.\n     * @property ForceSpeed\n     * @default 3\n     */\n    FORCE_SPEED: \"ForceSpeed\",\n    /**\n     * Multiplier for force speed.\n     * @property ForceSpeedMultipler\n     * @default 1.5\n     */\n    FORCE_SPEED_MULTIPLER: \"ForceSpeedMultipler\",\n    /**\n     * Pre roll height in pixels.\n     * @property PreRoll\n     * @default 180\n     */\n    PRE_ROLL: \"PreRoll\",\n    /**\n     * Pre roll speed in frames.\n     * @property PreRollSpeed\n     * @default 10\n     */\n    PRE_ROLL_SPEED: \"PreRollSpeed\",\n    /**\n     * Post roll height in pixels.\n     * @property PostRoll\n     * @default 180\n     */\n    POST_ROLL: \"PostRoll\",\n    /**\n     * Post roll speed in frames.\n     * @property PostRollSpeed\n     * @default 5\n     */\n    POST_ROLL_SPEED: \"PostRollSpeed\",\n    /**\n     * Speed of rotation in frames.\n     * @property Speed\n     * @default 3\n     */\n    SPEED: \"Speed\",\n};\n\nexport const MachineConfigurationAttributes = {\n    /**\n     * Min spin rotation in frames.\n     * @property MinSpinRotation\n     * @default 40\n     */\n    MIN_SPIN_ROTATION: \"MinSpinRotation\",\n    /**\n     * Min spin rotation in frames for outro high wins.\n     * @property MinSpinRotationLong\n     * @default 100\n     */\n    MIN_SPIN_ROTATION_LONG: \"MinSpinRotationLong\",\n    /**\n     * Delay to start rotation in frames.\n     * @property StartDelay\n     * @default 3\n     */\n    START_DELAY: \"StartDelay\",\n    /**\n     * Delay to stop rotation in frames.\n     * @property StopDelay\n     * @default 10\n     */\n    STOP_DELAY: \"StopDelay\",\n    /**\n     * Configuration ID for reels.\n     * @property StopDelay\n     * @type string\n     * @default null\n     */\n    REEL_CONFIGURATION: \"ReelConfiguration\",\n    /**\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\n     * @property Teasings\n     * @default null\n     *\n     * @deprecated Use TeasingSymbols istead Teasing\n     */\n    TEASINGS: \"Teasings\",\n    /**\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\n     * @property Teasings\n     * @default null\n     */\n    TEASING_SYMBOLS: \"TeasingSymbols\",\n    /**\n     *\n     */\n    TEASING_STOP_DELAY: \"TeasingStopDelay\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Configuration.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { UriHelper } from \"neo-common\";\nimport { GameApp } from \"../../../GameApp\";\nimport { Platforms } from \"neo-games\";\n\nexport class SimilarGames {\n    public enabled: boolean = false;\n\n    private _holder: HTMLElement;\n    private _pagesHolder: HTMLElement;\n    private _pagingHolder: HTMLElement;\n    private _pages: Array<HTMLElement> = [];\n    private _paging: Array<HTMLElement> = [];\n    private _actualPage: number = 0;\n\n    constructor() {}\n\n    initialize(): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.ShowSimilarGames &&\n            AppContext.gameConfiguration.StaticContentUrl !== \"\" &&\n            this.getSimilarGamesList().length > 0\n        ) {\n            this._holder = document.getElementById(\"similarGames\");\n            this._pagesHolder = document.getElementById(\"similarGamesPagesContainer\");\n            this._pagingHolder = document.getElementById(\"similarGamesPaging\");\n\n            if (this._holder != null && this._pagesHolder != null) {\n                this.createPages();\n                this.enabled = true;\n            }\n        }\n    }\n\n    private getSimilarGamesList(): Array<string> {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.SimilarGamesList.length > 0\n        ) {\n            return AppContext.gameConfiguration.SimilarGamesList.filter((e) => e !== GameApp.key);\n        }\n\n        return [];\n    }\n\n    private createPages(): void {\n        if (AppContext != null && AppContext.gameConfiguration != null && this.getSimilarGamesList().length > 0) {\n            let filterArray: Array<string> = this.getSimilarGamesList();\n            let page: number = 0;\n            for (let i: number = 0; i < filterArray.length; i++) {\n                if (i % 15 === 0) {\n                    page = this.createNextPage();\n                }\n                this.createPageItem(filterArray[i], page);\n            }\n        }\n\n        if (this._pages.length > 1) {\n            let prewPageButton: HTMLElement = document.getElementById(\"similarGamesPrewArrow\");\n            let nextPageButton: HTMLElement = document.getElementById(\"similarGamesNextArrow\");\n            if (prewPageButton != null) {\n                prewPageButton.classList.remove(\"_hidden\");\n                prewPageButton.onclick = this.prewPage.bind(this);\n            }\n            if (nextPageButton != null) {\n                nextPageButton.classList.remove(\"_hidden\");\n                nextPageButton.onclick = this.nextPage.bind(this);\n            }\n            if (this._pagingHolder != null) {\n                this._pagingHolder.classList.remove(\"_hidden\");\n            }\n        }\n\n        const exitBtn = document.getElementById(\"exitBtn\");\n        if (exitBtn != null) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.ShowExitGameButton\n            ) {\n                exitBtn.classList.remove(\"_hidden\");\n            } else {\n                exitBtn.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    private createNextPage(): number {\n        let newPage: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let newPageChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let newPaging: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        newPage.classList.add(\"similarGamesPage\");\n        newPageChild.classList.add(\"customContent\");\n        newPaging.classList.add(\"similarGamesPageNumber\");\n\n        if (this._pages.length === 0) {\n            newPage.classList.add(\"_active\");\n            newPaging.classList.add(\"_active\");\n        } else {\n            newPage.classList.add(\"_disabled\");\n        }\n\n        newPage.appendChild(newPageChild);\n\n        this._pages.push(newPage);\n        this._paging.push(newPaging);\n        if (this._pagesHolder != null) {\n            this._pagesHolder.appendChild(newPage);\n        }\n        if (this._pagingHolder != null) {\n            this._pagingHolder.appendChild(newPaging);\n        }\n\n        return this._pages.length - 1;\n    }\n\n    private createPageItem(name: string, page: number): void {\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        itemHolder.classList.add(\"similarGameContainer\");\n        item.classList.add(\"similarGameItem\");\n        itemLoading.classList.add(\"similarGameLoading\");\n        itemLoadingIcon.classList.add(\"loadingIcon\");\n        itemLogo.classList.add(\"similarGameLogo\");\n        itemLogo.setAttribute(\"game\", name);\n\n        let img = document.createElement(\"img\");\n        img.setAttribute(\n            \"src\",\n            AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg\",\n        );\n        img.addEventListener(\"load\", this.setItemLogo.bind(this, itemLogo, itemLoading, name));\n\n        itemHolder.appendChild(item);\n        item.appendChild(itemLoading);\n        itemLoading.appendChild(itemLoadingIcon);\n        item.appendChild(itemLogo);\n        itemLogo.onclick = this.selectGame.bind(this);\n\n        if (this._pages[page] != null) {\n            this._pages[page].firstChild.appendChild(itemHolder);\n        }\n    }\n\n    private setItemLogo(itemLogo: HTMLDivElement, itemLoading: HTMLDivElement, name: string): void {\n        itemLoading.parentNode.removeChild(itemLoading);\n        itemLogo.style.background =\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\n    }\n\n    private prewPage(): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        this.disableAllPages();\n        this._actualPage--;\n        if (this._pages[this._actualPage] == null) {\n            this._actualPage = this._pages.length - 1;\n        }\n        if (this._pages[this._actualPage] != null) {\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\n            this._pages[this._actualPage].classList.add(\"_active\");\n        }\n        if (this._paging[this._actualPage] != null) {\n            this._paging[this._actualPage].classList.add(\"_active\");\n        }\n    }\n\n    private nextPage(): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        this.disableAllPages();\n        this._actualPage++;\n        if (this._pages[this._actualPage] == null) {\n            this._actualPage = 0;\n        }\n        if (this._pages[this._actualPage] != null) {\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\n            this._pages[this._actualPage].classList.add(\"_active\");\n        }\n        if (this._paging[this._actualPage] != null) {\n            this._paging[this._actualPage].classList.add(\"_active\");\n        }\n    }\n\n    private disableAllPages(): void {\n        if (!this.enabled) {\n            return;\n        }\n        for (let i: number = 0; i < this._pages.length; i++) {\n            if (this._pages[i].classList.contains(\"_active\")) {\n                this._pages[i].classList.remove(\"_active\");\n            }\n            if (!this._pages[i].classList.contains(\"_disabled\")) {\n                this._pages[i].classList.add(\"_disabled\");\n            }\n        }\n\n        for (let i: number = 0; i < this._paging.length; i++) {\n            if (this._paging[i].classList.contains(\"_active\")) {\n                this._paging[i].classList.remove(\"_active\");\n            }\n        }\n    }\n\n    private selectGame(e: any): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n                let token: string = urlInfo[\"hash\"].substring(1);\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\n                let root: HTMLElement = document.getElementById(\"root\");\n                if (root != null) {\n                    root.style.display = \"none\";\n                }\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\n                if (Platforms.Platforms.handleChangeGame) {\n                    return;\n                }\n\n                // GameApp.gameClient.leaveGame();\n                setTimeout(() => {\n                    window.location.replace(newUrl);\n                }, 100);\n            }\n        }\n    }\n\n    public open(): boolean {\n        if (this.enabled) {\n            if (this._holder.classList.contains(\"_disabled\")) {\n                this._holder.classList.remove(\"_disabled\");\n                return true;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    public disable(): void {\n        if (!this.enabled) {\n            return;\n        }\n        if (!this._holder.classList.contains(\"_disabled\")) {\n            this._holder.classList.add(\"_disabled\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/SimilarGames/SimilarGames.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { Platforms } from \"neo-games\";\n\nexport class LimitDialog {\n    private static _opened: boolean = false;\n    private static _limit: HTMLElement;\n    private static _openTimer: FrameTimerEventEmitter;\n    private static _closeTimer: FrameTimerEventEmitter;\n\n    static openDialog(): void {\n        LimitDialog.initializeDialog();\n\n        if (!LimitDialog._opened) {\n            LimitDialog._openTimer.start(1);\n            if (LimitDialog._limit != null) {\n                LimitDialog._limit.style.display = \"block\";\n            }\n\n            LimitDialog._opened = true;\n            Platforms.Platforms.dialogOpened(\"limit\", true);\n        }\n    }\n\n    static closeDialog(): void {\n        if (LimitDialog._opened) {\n            LimitDialog.initializeDialog();\n\n            LimitDialog._closeTimer.start(60);\n            if (LimitDialog._limit != null && !LimitDialog._limit.classList.contains(\"_disabled\")) {\n                LimitDialog._limit.classList.add(\"_disabled\");\n            }\n\n            Platforms.Platforms.dialogOpened(\"limit\", false);\n        }\n    }\n\n    private static initializeDialog(): void {\n        if (LimitDialog._limit == null) {\n            LimitDialog._limit = document.getElementById(\"limitDialog\");\n        }\n\n        if (LimitDialog._openTimer == null) {\n            LimitDialog._openTimer = CreateFrameTimer(\"openTimer\");\n            LimitDialog._openTimer.on(FrameTimerEvents.Complete, this.showDialog);\n        }\n\n        if (LimitDialog._closeTimer == null) {\n            LimitDialog._closeTimer = CreateFrameTimer(\"closeTimer\");\n            LimitDialog._closeTimer.on(FrameTimerEvents.Complete, this.hideDialog);\n        }\n    }\n\n    private static showDialog(): void {\n        LimitDialog.initializeDialog();\n\n        if (LimitDialog._limit != null && LimitDialog._limit.classList.contains(\"_disabled\")) {\n            LimitDialog._limit.classList.remove(\"_disabled\");\n            PlayList.play(\"SND_BaseLimit\");\n        }\n    }\n\n    private static hideDialog(): void {\n        LimitDialog.initializeDialog();\n        if (LimitDialog._limit != null) {\n            LimitDialog._limit.style.display = \"none\";\n        }\n\n        LimitDialog._opened = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/LimitDialog.ts\n **/","import { Communication, Plugins } from \"neo-games\";\nimport { WebSocketClient } from \"../Utils/WebSocketClient\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { GameManager } from \"./GameManager\";\nimport { ApiClientCommunication } from \"neo-common\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { WebSocketClientHub } from \"../Utils/WebSocketClientHub\";\nimport { DataManager } from \"./DataManager\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\n\nexport class NotificationManager {\n    //******************************************************************************************************************\n    //  INSTANCE\n    //******************************************************************************************************************\n\n    private static instance: NotificationManager;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private webSocketClient: WebSocketClient;\n\n    private webSocketClientHub: WebSocketClientHub;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl) {\n            this.webSocketClientHub = new WebSocketClientHub();\n        } else {\n            this.webSocketClient = new WebSocketClient();\n        }\n\n        this.bindMessages();\n    }\n\n    //******************************************************************************************************************\n    //  PRIVATE FUNCTIONS\n    //******************************************************************************************************************\n\n    private bindMessages(): void {\n        if (this.webSocketClient != null) {\n            this.webSocketClient.on(\"RefreshBalance\", this.refreshBalance.bind(this));\n            this.webSocketClient.on(\"CloseSession\", this.closeSession.bind(this));\n            this.webSocketClient.on(\"UpdateStatusBar\", this.updateStatusBar.bind(this));\n        }\n\n        if (this.webSocketClientHub != null) {\n            this.onReceiveMessage(this.messageReceiver.bind(this));\n        }\n    }\n\n    //******************************************************************************************************************\n    //  GAME 2 SERVER\n    //******************************************************************************************************************\n\n    private sendMessage(message: Message): void {\n        if (this.webSocketClient != null) {\n            let methodName = message.action;\n            let data = message.data;\n\n            if (methodName == \"event/log\") {\n                methodName = \"LogEvent\";\n            }\n\n            this.webSocketClient.sendMessage(methodName, data);\n        }\n\n        if (this.webSocketClientHub != null) {\n            if (!this.webSocketClientHub.isConnectionEstablished()) {\n                this.webSocketClientHub.addMessage(this.sendMessage.bind(this, message));\n                return;\n            }\n\n            this.webSocketClientHub\n                .sendMessage(message)\n                .then(() => {\n                    if (DEBUG) {\n                        console.log(\"Message received\");\n                    }\n                })\n                .catch((error) => {\n                    if (DEBUG) {\n                        console.log(error);\n                    }\n                });\n        }\n    }\n\n    private invokeCommand(message: Message): Promise<Result> {\n        if (this.webSocketClientHub != null) {\n            return this.webSocketClientHub.invokeCommand(message);\n        }\n\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\n    }\n\n    private onReceiveMessage(receiver: (message: Message) => void): void {\n        if (this.webSocketClientHub != null) {\n            this.webSocketClientHub.onReceiveMessage(receiver);\n        }\n    }\n\n    private disconnect(): void {\n        if (this.webSocketClientHub != null) {\n            this.webSocketClientHub.disconnect();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SERVER 2 GAME\n    //******************************************************************************************************************\n\n    private messageReceiver(message: Message): void {\n        if (message == null) {\n            if (DEBUG) {\n                console.log(\"ERROR - message object was not received from websocket\");\n            }\n            return;\n        }\n\n        if (message.application.toLowerCase() != \"neo\") {\n            if (DEBUG) {\n                console.log('ERROR - message application was not \"NEO\"');\n            }\n            return;\n        }\n\n        if (message.service.toLowerCase() == \"notification\") {\n            switch (message.action.toLowerCase()) {\n                case \"refreshbalance\":\n                    this.refreshBalance(message.data);\n                    break;\n                case \"closesession\":\n                    this.closeSession();\n                    break;\n                case \"updatestatusbar\":\n                    this.updateStatusBar(message.data);\n                    break;\n            }\n        }\n\n        if (message.service.toLowerCase() == \"servertime\") {\n            switch (message.action.toLowerCase()) {\n                case \"update\":\n                    this.updateServerTime(message.data);\n                    break;\n            }\n        }\n    }\n\n    private refreshBalance(data: any): void {\n        //dynamic frb\n        if (data[\"freeRounds\"] != null) {\n            FreeRoundBonus.updateRemainingCount(data[\"freeRounds\"]);\n        }\n\n        //we dont want to update balance during mini game\n        if (Jackpot.hasActiveGame()) {\n            return;\n        }\n\n        BalanceManager.balanceReceived(data as Communication.Game.IBalance);\n    }\n\n    private closeSession(): void {\n        for (let key in Communication.Game.GameModules) {\n            ModuleManager.disableChannelModule(Communication.Game.GameModules[key]);\n        }\n\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n\n        GameManager.errorReceived({\n            requestInfo: {\n                request: NotificationManager,\n                url: null,\n                gameKey: null,\n            } as ApiClientCommunication.Types.IRequestInfo,\n            httpStatusCode: 401,\n        } as ApiClientCommunication.Types.ApiClientError);\n    }\n\n    private updateStatusBar(data: any): void {\n        let statusBar = Plugins.StatusBar.getInstance();\n        if (statusBar.hasActiveWidget(\"statusBarMessage\") && data != null && data[\"statusBarMessage\"]) {\n            statusBar.add(Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", data[\"statusBarMessage\"]);\n            Scaling.resizeRoot();\n        }\n    }\n\n    private updateServerTime(data: any): void {\n        if (data == null) {\n            return;\n        }\n\n        DataManager.serverTimeReceived(data);\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC FUNCTIONS\n    //******************************************************************************************************************\n\n    public static initialize(): void {\n        if (NotificationManager.instance == null) {\n            NotificationManager.instance = new NotificationManager();\n        }\n    }\n\n    public static sendMessage(message: Message): void {\n        if (NotificationManager.instance != null) {\n            NotificationManager.instance.sendMessage(message);\n        }\n    }\n\n    public static invokeCommand(message: Message): Promise<Result> {\n        if (NotificationManager.instance != null) {\n            return NotificationManager.instance.invokeCommand(message);\n        }\n\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\n    }\n\n    public static onReceiveMessage(receiver: (message: Message) => void): void {\n        if (NotificationManager.instance != null) {\n            return NotificationManager.instance.onReceiveMessage(receiver);\n        }\n    }\n\n    public static disconnect(): void {\n        if (NotificationManager.instance != null) {\n            NotificationManager.instance.disconnect();\n        }\n    }\n}\n\nexport interface Message {\n    application: string;\n    service: string;\n    action: string;\n    data: Object;\n}\n\nexport interface Result {\n    code: string;\n    data: Object;\n}\n\nexport interface ResultError extends Error {\n    result: Result;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/NotificationManager.ts\n **/","import GameClientHubConnection = GameClientHub.GameClientHubConnection;\nimport { UriHelper } from \"neo-common\";\nimport { AppContext } from \"../../Common/AppContext\";\n\nexport class WebSocketClient {\n    private hubConnection: GameClientHubConnection;\n    private connected: boolean;\n\n    constructor() {\n        this.connected = false;\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n\n            try {\n                this.hubConnection = new GameClientHub.GameClientHubConnection(\n                    serverUrl,\n                    this.getToken,\n                    AppContext.gameConfiguration,\n                );\n                this.connected = true;\n            } catch (e) {\n                if (DEBUG) {\n                    console.log(\"ERROR websocket connection was not created: \" + e);\n                }\n            }\n        }\n    }\n\n    private getToken(): string {\n        let token = \"\";\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"hash\"]) {\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\n        }\n\n        return token;\n    }\n\n    public sendMessage(methodName: string, data: any): void {\n        if (this.hubConnection != null && this.connected) {\n            this.hubConnection.sendMessage(methodName, data);\n        }\n    }\n\n    public on(methodName: string, callbackFn: (message: string) => void): void {\n        if (this.hubConnection != null) {\n            this.hubConnection.on(methodName, callbackFn);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClient.ts\n **/","import ClientHubConnection = ClientHub.ClientHubConnection;\nimport Message = ClientHub.Message;\nimport UpdateTokenRequest = ClientHub.UpdateTokenRequest;\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UriHelper } from \"neo-common\";\nimport Result = ClientHub.Result;\nimport { Platforms } from \"neo-games\";\n\nexport class WebSocketClientHub {\n    private clientHubConnection: ClientHubConnection;\n    private jwtToken: string;\n    private connectionEstablished: boolean;\n    private stackedMessages: Array<Function>;\n\n    constructor() {\n        if (AppContext.gameConfiguration == null) {\n            return;\n        }\n\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl === \"\") {\n            return;\n        }\n\n        try {\n            this.stackedMessages = [];\n            this.connectionEstablished = false;\n            this.clientHubConnection = new ClientHubConnection(\n                AppContext.gameConfiguration.ApplicationGatewayUrl,\n                this.getToken,\n                () => {\n                    this.connectionEstablished = true;\n                    Platforms.Platforms.webSocketsInitialized();\n                    this.sendStackedMessages();\n                },\n            );\n            this.jwtToken = this.getToken();\n        } catch (e) {\n            if (DEBUG) {\n                console.log(\"ERROR websocket connection was not created: \" + e);\n            }\n        }\n    }\n\n    private getToken(): string {\n        let token = \"\";\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"hash\"]) {\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\n        }\n\n        return token;\n    }\n\n    private tokenChanged(): boolean {\n        const currentToken = this.getToken();\n        return currentToken != this.jwtToken;\n    }\n\n    private updateToken(): void {\n        if (!this.tokenChanged()) {\n            return;\n        }\n\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        const _self = this;\n        const token = this.getToken();\n        this.clientHubConnection\n            .updateToken(new UpdateTokenRequest(token))\n            .then(() => {\n                if (DEBUG) {\n                    console.log(\"Websocket connection token was updated successfully.\");\n                }\n                _self.jwtToken = token;\n            })\n            .catch((e) => {\n                if (DEBUG) {\n                    console.log(\"ERROR websocket token was not updated: \" + e);\n                }\n            });\n    }\n\n    private sendStackedMessages(): void {\n        for (let i = 0; i < this.stackedMessages.length; i++) {\n            const fn = this.stackedMessages[i];\n            if (fn) {\n                fn();\n            }\n        }\n\n        this.stackedMessages = [];\n    }\n\n    public addMessage(message: Function): void {\n        if (this.stackedMessages != null) {\n            this.stackedMessages.push(message);\n        }\n    }\n\n    public isConnectionEstablished(): boolean {\n        return this.connectionEstablished;\n    }\n\n    public sendMessage(message: Message): Promise<void> {\n        if (!this.clientHubConnection) {\n            return Promise.reject(new Error(\"Not initialized\"));\n        }\n\n        this.updateToken();\n        return this.clientHubConnection.sendMessage(message);\n    }\n\n    public invokeCommand(message: Message): Promise<Result> {\n        if (!this.clientHubConnection) {\n            return Promise.reject({ code: \"Not initialized\" } as Result);\n        }\n\n        this.updateToken();\n        return this.clientHubConnection.invokeCommand(message);\n    }\n\n    public onReceiveMessage(receiver: (message: Message) => void): void {\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        this.updateToken();\n        this.clientHubConnection.onReceiveMessage(receiver);\n    }\n\n    public disconnect(): void {\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        this.clientHubConnection.disconnect().catch((e) => {\n            console.log(\"ERROR websocket connection was disconnected: \" + e);\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClientHub.ts\n **/","import { PlayList } from \"../../../../Components/Sounds/PlayList\";\nimport { GameApp } from \"../../../../GameApp\";\nimport { GameManager } from \"../../../../Managers/GameManager\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { BaseModel } from \"../../../../GameComponents/Base/BaseModel\";\nimport { IErrorResponse } from \"neo-common/Engine/ApiClient/Types\";\nimport { Languages } from \"../../../../Utils/Languages\";\nimport { StringUtils, Utils } from \"neo-common\";\n\nexport class SessionTimer {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected static dialog: HTMLElement;\n\n    protected static title: HTMLElement;\n\n    protected static text: HTMLElement;\n\n    protected static buttonsHolder: HTMLElement;\n\n    protected static buttons: Array<HTMLElement>;\n\n    protected static callback: (response: any) => void;\n\n    protected static response: any;\n\n    protected static step: number;\n\n    protected static intervals: Array<number>;\n\n    protected static intervalIndex: number;\n\n    protected static intervalHolder: HTMLElement;\n\n    protected static intervalDisplay: HTMLElement;\n\n    //******************************************************************************************************************\n    //  POSTPONE\n    //******************************************************************************************************************\n\n    public static postpone(callback: (response: any) => void, response: any): void {\n        if (\n            !Utils.isNullOrUndefined(response) &&\n            !Utils.isNullOrUndefined(response.messages) &&\n            response.messages.length > 0\n        ) {\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                SessionTimer.dialog = document.getElementById(\"messageDialog\");\n\n                if (!Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                    SessionTimer.dialog.classList.add(\"sessionTimer\");\n                    SessionTimer.title = SessionTimer.dialog.getElementsByTagName(\"h3\")[0];\n                    SessionTimer.text = document.getElementById(\"messageDialogText\");\n\n                    SessionTimer.buttonsHolder = document.getElementById(\"messageDialogButtons\");\n                    SessionTimer.buttons = [];\n                }\n            }\n\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                callback(response);\n            } else {\n                SessionTimer.callback = callback;\n                SessionTimer.response = response;\n                SessionTimer.step = 0;\n                SessionTimer.handle();\n            }\n        } else {\n            callback(response);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  UPDATE DIALOG DATA\n    //******************************************************************************************************************\n\n    protected static updateDialogData(data: any): void {\n        SessionTimer.resetDialogData();\n\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\n            SessionTimer.title.innerHTML = data[\"title\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\n            SessionTimer.text.innerHTML = data[\"text\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\n            SessionTimer.removeAllButtons();\n\n            for (let i = 0; i < data[\"actions\"].length; i++) {\n                let action = data[\"actions\"][i];\n\n                switch (action.type) {\n                    case \"continue\":\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionContinue.bind(this, action));\n                        break;\n                    case \"exit\":\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionExit.bind(this, action));\n                        break;\n                }\n            }\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"intervals\"])) {\n            SessionTimer.createIntervals(data[\"intervals\"]);\n        }\n    }\n\n    protected static resetDialogData(): void {\n        //default title\n        SessionTimer.title.innerHTML = Languages.getRid(\"DLG_INFO\");\n\n        //remove all custom buttons\n        SessionTimer.removeAllButtons();\n\n        //create default continue button\n        SessionTimer.createButton(Languages.getRid(\"CONTINUE\"), SessionTimer.actionContinue);\n\n        if (SessionTimer.intervalHolder != null) {\n            SessionTimer.intervalHolder.parentElement.removeChild(SessionTimer.intervalHolder);\n            SessionTimer.intervalHolder = null;\n        }\n    }\n\n    protected static removeAllButtons(): void {\n        while (SessionTimer.buttons.length > 0) {\n            let button = SessionTimer.buttons.pop();\n            SessionTimer.buttonsHolder.removeChild(button);\n        }\n    }\n\n    protected static disableAllButtons(): void {\n        for (let i = 0; i < SessionTimer.buttons.length; i++) {\n            let button = SessionTimer.buttons[i];\n\n            if (button != null) {\n                button.classList.add(\"_disabled\");\n                button.onclick = null;\n            }\n        }\n    }\n\n    protected static createButton(text: string, action: (data: any) => void): void {\n        let button: HTMLElement = document.createElement(\"div\");\n        button.textContent = text;\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n        button.onclick = action;\n\n        SessionTimer.buttonsHolder.appendChild(button);\n        SessionTimer.buttons.push(button);\n    }\n\n    //******************************************************************************************************************\n    //  ACTIONS\n    //******************************************************************************************************************\n\n    protected static actionContinue(): void {\n        PlayList.play(\"SND_Click\");\n\n        SessionTimer.disableAllButtons();\n\n        let interval: number;\n        if (SessionTimer.intervals != null && SessionTimer.intervalIndex > 0) {\n            interval = SessionTimer.intervals[SessionTimer.intervalIndex];\n        }\n        GameManager.gameClient.resetRealityCheck(interval).then((response: Communication.Game.RealityCheckResponse) => {\n            this.onActionContinueReceived();\n        });\n    }\n\n    protected static onActionContinueReceived(): void {\n        SessionTimer.handle();\n    }\n\n    protected static actionExit(): void {\n        PlayList.play(\"SND_Click\");\n\n        SessionTimer.disableAllButtons();\n\n        GameManager.gameClient.closeRealityCheck().then((response: Communication.Game.RealityCheckResponse) => {\n            this.onActionExitReceived();\n        });\n    }\n\n    protected static onActionExitReceived(): void {\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\n        GameApp.exit();\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE\n    //******************************************************************************************************************\n\n    protected static handle(): void {\n        if (SessionTimer.response.messages.length === SessionTimer.step) {\n            SessionTimer.dialog.classList.add(\"_disabled\");\n            SessionTimer.callback(SessionTimer.response);\n            Platforms.Platforms.dialogOpened(\"sessionTimer\", false);\n        } else {\n            if (SessionTimer.response.messages[SessionTimer.step].type == \"plugin\") {\n                Platforms.Platforms.sendPluginMessage(SessionTimer.response.messages[SessionTimer.step].text);\n                SessionTimer.step++;\n                SessionTimer.handle();\n            } else {\n                SessionTimer.dialog.classList.remove(\"_disabled\");\n                SessionTimer.updateDialogData(SessionTimer.response.messages[SessionTimer.step]);\n                SessionTimer.step++;\n                Platforms.Platforms.dialogOpened(\"sessionTimer\", true);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CUSTOM\n    //******************************************************************************************************************\n\n    protected static createIntervals(intervals: Array<number>): void {\n        if (SessionTimer.buttonsHolder != null) {\n            SessionTimer.intervals = intervals;\n            SessionTimer.intervalIndex = 0;\n\n            SessionTimer.intervalHolder = document.createElement(\"div\");\n            SessionTimer.intervalHolder.setAttribute(\"class\", \"sessionIntervals\");\n\n            let buttonMinus = document.createElement(\"div\");\n            buttonMinus.setAttribute(\"class\", \"minusBtn\");\n            buttonMinus.textContent = \"-\";\n\n            let buttonPlus = document.createElement(\"div\");\n            buttonPlus.setAttribute(\"class\", \"plusBtn\");\n            buttonPlus.textContent = \"+\";\n\n            buttonMinus.addEventListener(\n                \"click\",\n                SessionTimer.changeInterval.bind(this, true, buttonMinus, buttonPlus),\n            );\n            buttonPlus.addEventListener(\n                \"click\",\n                SessionTimer.changeInterval.bind(this, false, buttonMinus, buttonPlus),\n            );\n\n            SessionTimer.intervalDisplay = document.createElement(\"div\");\n            SessionTimer.intervalDisplay.setAttribute(\"class\", \"value\");\n            SessionTimer.intervalDisplay.innerText = intervals[0].toString();\n\n            if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\n                buttonMinus.classList.add(\"_disabled\");\n            }\n\n            if (SessionTimer.intervalIndex == 0) {\n                buttonPlus.classList.add(\"_disabled\");\n            }\n\n            SessionTimer.intervalHolder.appendChild(buttonMinus);\n            SessionTimer.intervalHolder.appendChild(SessionTimer.intervalDisplay);\n            SessionTimer.intervalHolder.appendChild(buttonPlus);\n            SessionTimer.buttonsHolder.parentElement.insertBefore(\n                SessionTimer.intervalHolder,\n                SessionTimer.buttonsHolder,\n            );\n        }\n    }\n\n    protected static changeInterval(\n        increase: boolean = false,\n        buttonMinus: HTMLElement,\n        buttonPlus: HTMLElement,\n    ): void {\n        buttonMinus.classList.remove(\"_disabled\");\n        buttonPlus.classList.remove(\"_disabled\");\n\n        if (increase) {\n            if (SessionTimer.intervalIndex < SessionTimer.intervals.length - 1) {\n                SessionTimer.intervalIndex++;\n            }\n        } else {\n            if (SessionTimer.intervalIndex > 0) {\n                SessionTimer.intervalIndex--;\n            }\n        }\n\n        if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\n            buttonMinus.classList.add(\"_disabled\");\n        }\n\n        if (SessionTimer.intervalIndex == 0) {\n            buttonPlus.classList.add(\"_disabled\");\n        }\n\n        SessionTimer.intervalDisplay.innerText = SessionTimer.intervals[SessionTimer.intervalIndex].toString();\n    }\n\n    public static callbackFnc(response: any): void {\n        SessionTimer.dialog.classList.remove(\"sessionTimer\");\n        BaseModel.spinContinue();\n    }\n\n    public static prepareData(response: IErrorResponse): any {\n        return {\n            messages: [\n                {\n                    text: response.message,\n                    actions: [\n                        {\n                            type: \"continue\",\n                            text: Languages.getRid(\"CONTINUE\"),\n                        },\n                        {\n                            type: \"exit\",\n                            text: Languages.getRid(\"CLOSE\"),\n                        },\n                    ],\n                    intervals: response.intervals,\n                },\n            ],\n        };\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Platforms/Playtech/SessionTimer.ts\n **/","import { Communication } from \"neo-games\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { MessageManager } from \"../Managers/MessageManager\";\n\ntype InitResponse = Communication.Game.InitResponse;\n\nexport class SplashScreen {\n    //******************************************************************************************************************\n    //  SETTINGS\n    //******************************************************************************************************************\n\n    private static readonly AutoCloseDelay: number = 15; //in seconds\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private static suspendInit: boolean = false;\n\n    private static instance: SplashScreen = null;\n\n    private _htmlInstance: Object;\n\n    private _initResponse: InitResponse;\n\n    private _autoCloseTimerFinished: boolean;\n\n    private _continueEnabled: boolean;\n\n    private _timer: number;\n\n    //******************************************************************************************************************\n    //  CREATE & INIT\n    //******************************************************************************************************************\n\n    constructor(htmlInstance: Object) {\n        if (htmlInstance != null) {\n            this._htmlInstance = {};\n            this._htmlInstance[\"instance\"] = htmlInstance;\n\n            SplashScreen.suspendInit = true;\n\n            this._autoCloseTimerFinished = false;\n            this._continueEnabled = false;\n\n            this._timer = setTimeout(() => {\n                this.autoCloseTimer();\n            }, SplashScreen.AutoCloseDelay * 1000);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LOAD (INIT) COMPLETED\n    //******************************************************************************************************************\n\n    public onInitReceived(initResponse: InitResponse): void {\n        this._initResponse = initResponse;\n\n        //if gameround closed, then show Continue btn, else call onContinue to hide splashscreen\n        if (this._initResponse.status != null && this._initResponse.status == Communication.Game.GameStatus.Closed) {\n            this.showContinueButton();\n        } else {\n            this.showGame();\n        }\n    }\n\n    private autoCloseTimer(): void {\n        this._autoCloseTimerFinished = true;\n\n        if (this._continueEnabled) {\n            this.showGame();\n        }\n    }\n\n    private showContinueButton(): void {\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\n            this._continueEnabled = true;\n\n            if (this._autoCloseTimerFinished) {\n                this.showGame();\n            } else {\n                this._htmlInstance[\"instance\"].showContinueButton(this.showGame.bind(this));\n            }\n        }\n    }\n\n    private showGame(): void {\n        clearTimeout(this._timer);\n        SplashScreen.suspendInit = false;\n        MessageManager.postpone(GameManager.continueInitReceived, this._initResponse);\n    }\n\n    public hideSplashScreen(): void {\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\n            this._htmlInstance[\"instance\"].hideSplashScreen();\n            this._htmlInstance = null;\n        }\n    }\n\n    public showError(): void {\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\n            this._htmlInstance[\"instance\"].showError();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC HANDLERS\n    //******************************************************************************************************************\n\n    public static createSplashScreen(htmlInstance: Object): void {\n        if (SplashScreen.instance == null) {\n            SplashScreen.instance = new SplashScreen(htmlInstance);\n        }\n    }\n\n    public static hideSplashScreen(): void {\n        if (SplashScreen.instance != null) {\n            SplashScreen.instance.hideSplashScreen();\n            SplashScreen.instance = null;\n        }\n    }\n\n    public static suspendInitReceived(initResponse: InitResponse): boolean {\n        if (SplashScreen.suspendInit && SplashScreen.instance != null) {\n            SplashScreen.instance.onInitReceived(initResponse);\n            return true;\n        }\n\n        return false;\n    }\n\n    public static showError(): void {\n        if (SplashScreen.instance != null) {\n            SplashScreen.instance.showError();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SplashScreen.ts\n **/","import { Utils, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FreespinsController } from \"./FreespinsController\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { BaseModel } from \"../Base/BaseModel\";\n\ntype GameModuleFreespinsResponse = Communication.Game.GameModuleFreespinResponse;\nvar GameModules = Communication.Game.GameModules;\n\nexport class FreespinsModel {\n    public static LastScreen: Object = {};\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected controller: FreespinsController;\n\n    private _spinDelayed: FrameTimerEventEmitter;\n    private _delayedResponse: Communication.Game.GameResponse;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: FreespinsController) {\n        this.controller = controller;\n        this._spinDelayed = CreateFrameTimer(\"spinDelayed\");\n        this._spinDelayed.on(FrameTimerEvents.Complete, this.spinReceivedDelayed.bind(this));\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n        DataManager.controlAutoplay();\n        GameManager.gameClient.start(Communication.Game.GameModules.Freespins).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public spin(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n        DataManager.controlAutoplay();\n        GameManager.gameClient.freespin(Communication.Game.GameModules.Freespins).then((response: any): any => {\n            MessageManager.postpone(this.spinReceived.bind(this), response);\n        });\n    }\n\n    public end(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n        DataManager.controlAutoplay();\n        GameManager.gameClient.endFreespin().then((response: any): any => {\n            MessageManager.postpone(this.endReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            if (response.module<GameModuleFreespinsResponse>(GameModules.Freespins) != null) {\n                FreespinsModel.LastScreen = response.module<GameModuleFreespinsResponse>(GameModules.Freespins).screen;\n            }\n\n            Platforms.Platforms.featureStarted({ type: Communication.Game.GameModules.Freespins });\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected spinReceived(response: Communication.Game.GameResponse): void {\n        this._delayedResponse = response;\n\n        if (response.module<GameModuleFreespinsResponse>(GameModules.Freespins) != null) {\n            FreespinsModel.LastScreen = response.module<GameModuleFreespinsResponse>(GameModules.Freespins).screen;\n        }\n\n        this._spinDelayed.start(30);\n    }\n\n    private spinReceivedDelayed(): void {\n        if (!Utils.isNullOrUndefined(this._delayedResponse)) {\n            GameManager.parseResponses(this._delayedResponse);\n            DataManager.updateResponseData();\n\n            this.controller.spinReceived();\n            Platforms.Platforms.spinReceived({\n                balance: parseFloat(\n                    NumberUtils.add(this._delayedResponse.balance.real, this._delayedResponse.balance.bonus),\n                ),\n                win: GameManager.freespinsResponse.currentWin,\n                totalBet: BetManager.createBetForSpin().totalBet,\n                roundId: this._delayedResponse.roundId,\n            });\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected endReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            Platforms.Platforms.featureFinished({ type: Communication.Game.GameModules.Freespins });\n            this.controller.endReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsModel.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { TweenLite, TweenMax } from \"gsap\";\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { CustomEase } from \"../../../Components/Effects/CustomEase\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { IProgressiveBonusLevel } from \"neo-games/Engine/Communication/Game/Types/IProgressiveBonusLevel\";\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\nimport { StageController } from \"../../../Components/StageController\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AmbientBackground } from \"../../../Utils/AmbientBackground\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { MessageManager } from \"../../../Managers/MessageManager\";\nimport { JackpotData } from \"../Datas/JackpotData\";\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\n\nvar GameModules = Communication.Game.GameModules;\n\ntype MaxPowerBonusInitResponse = Communication.Game.MaxPowerBonusInitResponse;\ntype MaxPowerBonusSpinResponse = Communication.Game.MaxPowerBonusSpinResponse;\n\nexport class JackpotGame {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    private static readonly Strip: Array<number> = [\n        1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 2, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1,\n        1, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 4,\n    ];\n\n    private static readonly SymbolsCount: number = 4;\n\n    private static readonly BuzzerDuration: number = 180; //in frames\n\n    private static readonly SpinRollSpeed: number = 8; //lower number is faster\n\n    private static readonly MinSpinDuration: number = 360; //in frames\n\n    private static readonly MiddleSymbolIndex: number = 1;\n\n    private static readonly SpinPreRollDuration: number = 120;\n\n    private static readonly SpinPreRollSymbolCount: number = 8;\n\n    private static readonly SpinPostRollDuration: number = 360;\n\n    private static readonly SpinPostRollSymbolCount: number = 12;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected ticket: { id: string };\n\n    protected gameInitialized: boolean;\n\n    protected gameStarted: boolean;\n\n    protected autostart: boolean;\n\n    protected callback: () => void;\n\n    protected holder: HTMLElement;\n\n    protected root: HTMLElement;\n\n    protected reel: HTMLElement;\n\n    protected spinBtn: HTMLElement;\n\n    protected winContainer: HTMLElement;\n\n    protected gameData: MaxPowerBonusSpinResponse;\n\n    protected lastEvent: () => void;\n\n    protected stoppedFromMachine: boolean;\n\n    protected stoppedFromServer: boolean;\n\n    protected stopTimer: FrameTimerEventEmitter;\n\n    protected isStopping: boolean;\n\n    protected currentSymbols: Array<HTMLElement>;\n\n    protected currentSymbolsHeight: Array<number>;\n\n    protected symbolStepOffsets: Array<number>;\n\n    protected symbolsHeight: Array<number>;\n\n    protected stripIndex: number;\n\n    protected rootHeight: number;\n\n    protected currentOffset: number;\n\n    protected showHandPayDialog: boolean;\n\n    protected buzzerTimer: FrameTimerEventEmitter;\n\n    protected showWinDelay: FrameTimerEventEmitter;\n\n    protected assetsLoaded: boolean;\n\n    protected startAfterLoad: boolean;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(holder: HTMLElement) {\n        this.holder = holder;\n\n        this.root = this.createBaseLayout();\n        this.holder.appendChild(this.root);\n\n        let intro = this.createAnimations();\n        this.holder.appendChild(intro);\n\n        this.stopTimer = CreateFrameTimer(\"MiniGameSpinStop\");\n        this.stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\n\n        this.buzzerTimer = CreateFrameTimer(\"BuzzerTimer\");\n        this.buzzerTimer.on(FrameTimerEvents.Complete, this.buzzerTimeFinished.bind(this));\n\n        this.showWinDelay = CreateFrameTimer(\"BuzzerTimer\");\n        this.showWinDelay.on(FrameTimerEvents.Complete, this.updateWin.bind(this));\n\n        this.gameInitialized = false;\n        this.gameStarted = false;\n        this.autostart = false;\n        this.showHandPayDialog = false;\n        this.assetsLoaded = false;\n        this.startAfterLoad = false;\n\n        // CustomEase.create(\"miniGameSpinStopEase\", \"M0,0,C0,0,0.09,0.494,0.652,0.862,0.844,0.987,1,1,1,1\");\n        CustomEase.create(\n            \"miniGameSpinStopEase\",\n            \"M0,0,C0,0,0.212,0.616,0.452,0.842,0.519,0.905,0.627,1.008,0.716,1.026,0.768,1.036,0.819,1.031,0.848,1.028,0.89,1.022,1,1,1,1\",\n        );\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    protected createBaseLayout(): HTMLElement {\n        let root = this.createElement(\"div\", \"jackpotGame\");\n\n        this.reel = this.createElement(\"div\", \"jackpotReel\", root);\n\n        this.createElement(\"div\", \"jackpotTextOverlay\", root);\n\n        let hintContainer = this.createElement(\"div\", \"jackpotStartHint\", root);\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\n\n        this.createElement(\"div\", \"jackpotFrameLeft\", root);\n        this.createElement(\"div\", \"jackpotFrameRight\", root);\n        this.createElement(\"div\", \"jackpotGlowLeft\", root);\n        this.createElement(\"div\", \"jackpotGlowRight\", root);\n\n        let arrows = this.createElement(\"div\", \"jackpotArrows\", root);\n        let arrow = this.createElement(\"div\", \"jackpotArrowLeft\", arrows);\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\n        arrow = this.createElement(\"div\", \"jackpotArrowRight\", arrows);\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\n\n        this.createTextElement(\"div\", \"jackpotGameName\", document.getElementById(\"gameTitle\").innerHTML, root);\n\n        return root;\n    }\n\n    protected createAnimations(): HTMLElement {\n        let intro = this.createElement(\"div\", \"jackpotIntro\");\n\n        for (let i = 0; i < 5; i++) {\n            let firework = this.createElement(\"div\", \"jackpotFireworks\", intro);\n            for (let j = 0; j < 8; j++) {\n                this.createElement(\"div\", \"fireworksPart\", firework);\n            }\n        }\n\n        let titles = this.createElement(\"div\", \"jackpotTitles\", intro);\n        let _self = this;\n\n        document.body.classList.add(\"jpt-loading\");\n\n        //dynamic content loader\n        Promise.all<Array<string>>([\n            this.getCustomContent(\"jackpotTextSynot\", \".png\"),\n            this.getCustomContent(\"jackpotTextProgressive\", \".png\"),\n            this.getCustomContent(\"jackpotTextBonus\", \".png\"),\n        ]).then((values: Array<Array<string>>) => {\n            for (let i = 0; i < values.length; i++) {\n                let elem = _self.createElement(\"div\", values[i][0], titles);\n\n                if (values[i][1] != \"\") {\n                    elem.style.background = `url(${values[i][1]}) no-repeat`;\n                }\n            }\n\n            document.body.classList.remove(\"jpt-loading\");\n            _self.assetsLoaded = true;\n            if (_self.startAfterLoad) {\n                _self.intro();\n            }\n        });\n\n        this.createElement(\"div\", \"jackpotTextOverlay\", intro);\n        this.winContainer = this.createElement(\"div\", \"jackpotWinValue\", intro);\n\n        return intro;\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE GAME\n    //******************************************************************************************************************\n\n    public init(autostart: boolean, callback: () => void): void {\n        if (this.ticket == null && GameManager.gameResponse && GameManager.gameResponse[\"progressiveBonus\"].ticket) {\n            this.ticket = GameManager.gameResponse[\"progressiveBonus\"].ticket;\n\n            this.gameInitialized = false;\n            this.autostart = autostart;\n            this.callback = callback;\n            this.initSymbols();\n            this.createSymbols();\n            this.sendInitBonusGameRequest();\n        }\n    }\n\n    private initFinished(): void {\n        this.gameInitialized = true;\n\n        if (this.autostart) {\n            if (this.callback != null) {\n                this.callback();\n            }\n\n            this.intro();\n        }\n    }\n\n    public start(): void {\n        if (!this.autostart) {\n            this.intro();\n        }\n    }\n\n    private startGame(): void {\n        //close all opened dialogs\n        HtmlController.dispatchAction(\"\");\n\n        Jackpot.refreshBonusInfoBeforeSpin(this.sendSpinBonusGameRequest.bind(this));\n        this.spinStart();\n    }\n\n    private spinStop(fromMachine: boolean = true, fromServer: boolean = false): void {\n        if (fromMachine) {\n            this.stoppedFromMachine = true;\n        }\n\n        if (fromServer) {\n            this.stoppedFromServer = true;\n        }\n\n        if (this.stoppedFromMachine && this.stoppedFromServer) {\n            this.isStopping = true;\n        }\n    }\n\n    private closeMiniGame(): void {\n        if (this.callback != null && this.autostart) {\n            this.callback();\n        }\n\n        this.outroFinished(false);\n    }\n\n    private setBaseGameSound(enable: boolean): void {\n        ModuleManager.toggleModuleSounds(GameModules.Base, enable);\n    }\n\n    public hasInitializedGame(): boolean {\n        return this.gameInitialized;\n    }\n\n    public hasStartedGame(): boolean {\n        return this.gameStarted;\n    }\n\n    public disableAutostart(): void {\n        this.autostart = false;\n\n        //clear response to allow realitycheck on spin\n        this.clearJackpotGameResponse();\n    }\n\n    //******************************************************************************************************************\n    //  CLEAR\n    //******************************************************************************************************************\n\n    private clearJackpotGame(): void {\n        if (this.holder) {\n            this.holder.classList.remove(\"outro\");\n            this.holder.classList.add(\"_hidden\");\n            this.holder.className = \"jackpotGameHolder _hidden\";\n        }\n\n        if (this.root) {\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\n        }\n\n        if (this.reel) {\n            this.reel.innerHTML = \"\";\n\n            this.currentOffset = 0;\n            this.setTransformY(this.reel, this.currentOffset);\n            this.currentSymbols = [];\n            this.currentSymbolsHeight = [];\n        }\n\n        if (this.winContainer) {\n            this.winContainer.style.transform = \"scale(0)\";\n            this.winContainer.innerHTML = \"\";\n\n            this.winContainer.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.winContainer.removeEventListener(\"animationend\", this.lastEvent);\n        }\n\n        this.ticket = null;\n    }\n\n    private clearJackpotGameResponse(): void {\n        if (GameManager.gameResponse[\"progressiveBonus\"]) {\n            GameManager.gameResponse[\"progressiveBonus\"] = null;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS & RESPONSE\n    //******************************************************************************************************************\n\n    private sendInitBonusGameRequest(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendMaxPowerBonusInitRequest(this.ticket)\n                .then((response: MaxPowerBonusInitResponse) => {\n                    if (response != null && response.status == \"Active\") {\n                        this.initFinished();\n                    } else {\n                        this.closeMiniGame();\n                    }\n                });\n        }\n    }\n\n    private sendSpinBonusGameRequest(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendMaxPowerBonusSpinRequest(this.ticket)\n                .then((response: MaxPowerBonusSpinResponse) => {\n                    this.setGameData(response);\n                });\n        }\n    }\n\n    private setGameData(response: MaxPowerBonusSpinResponse): void {\n        if (response != null) {\n            this.gameData = response;\n            this.spinStop(false, true);\n\n            if (AppContext != null && AppContext.gameConfiguration.GameRoundIdVisible) {\n                HtmlController.updateDataElement(GameData.DataRoundId, this.ticket.id);\n            }\n        } else {\n            Jackpot.showError();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  INTRO & OUTRO\n    //******************************************************************************************************************\n\n    private intro(): void {\n        if (!this.assetsLoaded) {\n            this.startAfterLoad = true;\n            return;\n        }\n        if (!this.gameStarted) {\n            this.gameStarted = true;\n\n            PlayList.loop(\"SND_JackpotBuzzer\");\n            this.bounceCounters(true);\n\n            this.buzzerTimer.stop();\n            this.buzzerTimer.start(JackpotGame.BuzzerDuration);\n\n            //intro calls preparenewgameround before baseview intro\n            //timeout will call method after baseview intro\n            setTimeout(() => {\n                this.setBaseGameSound(false);\n            }, 1);\n        }\n    }\n\n    private buzzerTimeFinished(): void {\n        this.buzzerTimer.stop();\n        this.bounceCounters(false);\n        PlayList.stop(\"SND_JackpotBuzzer\");\n        LimitDialog.closeDialog();\n        DataManager.GameLimit = false; //avoid restoregameround open limit dialog again\n\n        if (this.holder) {\n            this.lastEvent = this.introFinished.bind(this);\n            this.root.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.addEventListener(\"animationend\", this.lastEvent);\n\n            AmbientBackground.changeAmbientBackground(\"jackpotBg\", 1000, 5500);\n\n            PlayList.play(\"SND_JackpotIntroHit\");\n            PlayList.loop(\"SND_JackpotIntroWaitingLoop\", 360);\n\n            this.holder.classList.remove(\"_hidden\");\n            void this.holder.offsetWidth;\n            this.holder.classList.add(\"start\");\n        }\n    }\n\n    private introFinished(): void {\n        if (this.holder) {\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\n\n            PlayList.stop(\"SND_JackpotIntroHit\");\n            this.holder.classList.add(\"startFinished\");\n\n            this.setStageVisibility(false);\n            this.createSpinBtn();\n        }\n    }\n\n    private outro(): void {\n        this.setStageVisibility(true);\n\n        this.holder.classList.remove(\"spin\");\n        void this.holder.offsetWidth;\n        this.holder.classList.add(\"outro\");\n\n        AmbientBackground.changeAmbientBackground(\"base\", 2000, 8000);\n\n        //fire end event after winvalue animation end\n        this.lastEvent = this.outroFinished.bind(this);\n        this.winContainer.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\n        this.winContainer.addEventListener(\"animationend\", this.lastEvent);\n    }\n\n    private outroFinished(collect: boolean = true): void {\n        if (collect) {\n            this.updateBalance();\n        }\n\n        this.clearJackpotGame();\n        this.clearJackpotGameResponse();\n\n        this.setBaseGameSound(true);\n\n        BalanceManager.refreshBalance();\n\n        if (this.showHandPayDialog) {\n            this.openHandPayDialog();\n        } else {\n            this.restoreGameRound(collect);\n        }\n\n        this.autostart = false;\n    }\n\n    private updateBalance(): void {\n        if (this.gameData != null) {\n            if (this.gameData.balance != null) {\n                this.showHandPayDialog = false;\n                BalanceManager.balanceReceived(this.gameData.balance);\n                PlayList.play(\"SND_BaseCollect\");\n\n                if (this.gameData.game != null && this.gameData.game.win != null) {\n                    DataManager.updateTotalGain(false, this.gameData.game.win.amount);\n                }\n\n                if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n                    this.updateWin(false, \"0\");\n                }\n            } else {\n                this.showHandPayDialog = true;\n            }\n        }\n    }\n\n    private restoreGameRound(collect: boolean = true): void {\n        this.gameInitialized = false;\n        this.gameStarted = false;\n        this.showHandPayDialog = false;\n        ModuleManager.restoreGameRound(GameModules.Base, collect);\n    }\n\n    private openHandPayDialog(): void {\n        let response = {\n            messages: [\n                {\n                    text: Languages.getRid(\n                        \"HANDPAY_DIALOG\",\n                        Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString()) +\n                            \" \" +\n                            DataManager.getDataById(GameData.DataCurrency),\n                    ),\n                },\n            ],\n        };\n        MessageManager.postpone(this.restoreGameRound.bind(this), response);\n    }\n\n    //******************************************************************************************************************\n    //  SHOW & UPDATE SYMBOLS\n    //******************************************************************************************************************\n\n    private initSymbols(): void {\n        if (this.reel) {\n            this.currentSymbols = [];\n            this.currentSymbolsHeight = [];\n            // this.stripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\n            this.stripIndex = (JackpotGame.Strip.indexOf(4) + 2 + JackpotGame.Strip.length) % JackpotGame.Strip.length; //start with diamond symbols\n\n            //get rootHeight\n            if (!this.rootHeight) {\n                this.rootHeight = this.getElementHeight(this.root);\n            }\n\n            let symbolId: number;\n\n            //getSymbolsHeight\n            this.symbolsHeight = [];\n            for (let i = 0; i < JackpotGame.SymbolsCount; i++) {\n                symbolId = i + 1;\n                let symbol = this.createElement(\"div\", \"jackpotSymbol l-\" + symbolId, this.reel);\n                this.symbolsHeight.push(this.getElementHeight(symbol));\n\n                this.reel.removeChild(symbol);\n            }\n        }\n    }\n\n    private createSymbols(): void {\n        if (this.reel) {\n            //add start symbols queue\n            let symbolId: number;\n            for (let i = 0; i < JackpotGame.SpinPreRollSymbolCount; i++) {\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n                symbolId = JackpotGame.Strip[this.stripIndex];\n                this.addSymbolToReel(symbolId, false, i > 3);\n            }\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n        }\n    }\n\n    private updateSymbols(): void {\n        //clear number of elements to 3\n        while (this.currentSymbols.length > 3) {\n            this.currentSymbolsHeight.pop();\n            let symbol = this.currentSymbols.pop();\n            this.reel.removeChild(symbol);\n        }\n\n        if (this.isStopping) {\n            this.updatePostRollSymbols();\n        } else {\n            this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n            let symbolId = JackpotGame.Strip[this.stripIndex];\n            this.addSymbolToReel(symbolId, false, true);\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n\n            this.spinRoll();\n        }\n    }\n\n    private updatePostRollSymbols(): void {\n        //get finish strip index\n        if (this.gameData != null) {\n            let winSymbolId = this.gameData.game.symbols[JackpotGame.MiddleSymbolIndex];\n            let finishStripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\n\n            //check if finished symbol is our win symbol, if not try next\n            while (JackpotGame.Strip[finishStripIndex] != winSymbolId) {\n                finishStripIndex = (finishStripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n            }\n\n            //set new strip index to finishStripIndex + postroll symbols - 1\n            this.stripIndex =\n                (finishStripIndex + (JackpotGame.SpinPostRollSymbolCount - 1) + JackpotGame.Strip.length) %\n                JackpotGame.Strip.length;\n\n            for (let i = 0; i < JackpotGame.SpinPostRollSymbolCount; i++) {\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n                let symbolId = JackpotGame.Strip[this.stripIndex];\n                this.addSymbolToReel(symbolId, i == JackpotGame.SpinPostRollSymbolCount - 2, i < 8);\n            }\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n\n            this.spinPostRoll();\n        }\n    }\n\n    private removeOffScreenSymbols(): void {\n        //clear number of elements to 3\n        while (this.currentSymbols.length > 3) {\n            this.currentSymbolsHeight.pop();\n            let symbol = this.currentSymbols.pop();\n            this.reel.removeChild(symbol);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN\n    //******************************************************************************************************************\n\n    private spinStart(): void {\n        //remove spin btn\n        if (this.spinBtn) {\n            this.spinBtn.parentElement.removeChild(this.spinBtn);\n        }\n\n        document.removeEventListener(\"keyup\", this.lastEvent);\n\n        this.updateWin(false, \"0\");\n\n        PlayList.stop(\"SND_JackpotIntroWaitingLoop\");\n        PlayList.play(\"SND_JackpotStartHit\");\n        PlayList.play(\"SND_JackpotWheelMusic\");\n\n        this.stoppedFromMachine = false;\n        this.stoppedFromServer = false;\n\n        if (this.holder) {\n            this.holder.classList.remove(\"start\");\n            this.holder.classList.remove(\"startFinished\");\n            this.holder.classList.add(\"spin\");\n        }\n\n        this.isStopping = false;\n        this.stopTimer.start(JackpotGame.MinSpinDuration);\n        this.spinPreRoll();\n    }\n\n    private spinPreRoll(): void {\n        let nextOffset = this.getReelOffset(1);\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.updateSymbols,\n            JackpotGame.SpinPreRollDuration,\n            \"Power2.easeIn\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    //******************************************************************************************************************\n    //  ROLL\n    //******************************************************************************************************************\n\n    private spinRoll(): void {\n        let nextOffset = this.getReelOffset(1);\n        let duration = this.getSpinRollDuration(nextOffset);\n\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.updateSymbols,\n            duration,\n            \"linear\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    //******************************************************************************************************************\n    //  POST ROLL\n    //******************************************************************************************************************\n\n    private spinPostRoll(): void {\n        Jackpot.refreshBonusInfoInMiniGame(this.createLevelDataOverride(false));\n\n        let nextOffset = this.getReelOffset(1);\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.spinComplete,\n            JackpotGame.SpinPostRollDuration,\n            \"miniGameSpinStopEase\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    private onSpinPostRollUpdate(tween: TweenMax): void {\n        if (this.symbolStepOffsets.length > 0) {\n            if (tween.target._gsTransform.y > this.symbolStepOffsets[0]) {\n                PlayList.play(\"SND_JackpotWheelClick1\");\n\n                if (this.holder) {\n                    this.holder.classList.remove(\"hit\");\n                    this.holder.offsetWidth;\n                    this.holder.classList.add(\"hit\");\n                }\n\n                this.symbolStepOffsets.shift();\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  COMPLETE\n    //******************************************************************************************************************\n\n    private spinComplete(): void {\n        //close all opened dialogs\n        HtmlController.dispatchAction(\"\");\n\n        if (this.gameData != null) {\n            this.showWinDelay.start(135);\n\n            if (this.gameData.game.limit) {\n                LimitDialog.openDialog();\n            }\n        }\n\n        this.removeOffScreenSymbols();\n        Jackpot.refreshBonusInfoWithWinValue(this.createLevelDataOverride(true));\n        let isHigh = this.createWinValue();\n        PlayList.stop(\"SND_JackpotWheelMusic\", 30);\n        PlayList.play(\"SND_JackpotWinMusic\");\n\n        this.outro();\n    }\n\n    private updateWin(collected: boolean, value: string = \"\"): void {\n        this.showWinDelay.stop();\n        let uncollectedWin = document.getElementById(\"uncollectedWin\");\n        let collectedWin = document.getElementById(\"collectedWin\");\n\n        if (uncollectedWin != null && collectedWin != null) {\n            if (!StringUtils.isNullOrEmpty(value)) {\n                HtmlController.updateDataElement(GameData.DataTotalWin, value);\n            } else {\n                HtmlController.updateDataElement(GameData.DataTotalWin, this.gameData.game.win.amount.toString());\n            }\n\n            if (collected) {\n                uncollectedWin.classList.add(\"_hidden\");\n                collectedWin.classList.remove(\"_hidden\");\n            } else {\n                uncollectedWin.classList.remove(\"_hidden\");\n                collectedWin.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN ANIMATION\n    //******************************************************************************************************************\n\n    private animate(\n        currentOffset: number,\n        newOffset: number,\n        callback: () => void,\n        duration: number,\n        ease: string = \"linear\",\n        delay: number = 0,\n        updateCallback: () => void = null,\n    ): void {\n        duration = duration * GsapEffects.TickTime;\n        delay = delay * GsapEffects.TickTime;\n\n        TweenMax.killTweensOf(this.reel);\n        let tween = TweenMax.fromTo(\n            this.reel,\n            duration,\n            { y: currentOffset, roundProps: \"y\" },\n            { y: newOffset, ease: ease, delay: delay, roundProps: \"y\" },\n        );\n\n        this.currentOffset = newOffset;\n\n        if (!Utils.isNullOrUndefined(callback)) {\n            tween.eventCallback(\"onComplete\", callback, [], this);\n        }\n\n        if (!Utils.isNullOrUndefined(updateCallback)) {\n            tween.eventCallback(\"onUpdate\", updateCallback, [\"{self}\"], this);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  WIN COUNTER\n    //******************************************************************************************************************\n\n    public createWinValue(): boolean {\n        if (this.gameData != null) {\n            let winValue = Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString());\n\n            if (this.winContainer) {\n                let childs = this.winContainer.children;\n\n                for (let i = 0; i < winValue.length; i++) {\n                    if (!childs[i]) {\n                        this.createElement(\"div\", \"n\" + winValue.charCodeAt(i).toString(), this.winContainer);\n                    } else {\n                        childs[i].className = \"n\" + winValue.charCodeAt(i).toString();\n                    }\n                }\n            }\n\n            return this.gameData.game.win.level == \"Gold\" || this.gameData.game.win.level == \"Diamond\";\n        }\n\n        return false;\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    private getElementHeight(elem: HTMLElement): number {\n        return parseInt(window.getComputedStyle(elem).height);\n    }\n\n    private getSpinRollDuration(newOffset: number): number {\n        let diff = Math.abs(this.currentOffset - newOffset);\n        return Math.round((diff / this.symbolsHeight[0]) * JackpotGame.SpinRollSpeed);\n    }\n\n    private getReelOffset(middleSymbolIndex: number): number {\n        let offset = Math.round(this.rootHeight * 0.5);\n\n        if (this.currentSymbols.length > 0) {\n            for (let i = 0; i < middleSymbolIndex; i++) {\n                offset -= this.currentSymbolsHeight[i];\n            }\n\n            offset -= Math.round(this.currentSymbolsHeight[middleSymbolIndex] * 0.5);\n        }\n\n        return offset;\n    }\n\n    private getSymbolStepOffsets(middleSymbolIndex: number): Array<number> {\n        let offset = this.currentOffset;\n        let result: Array<number> = [];\n\n        if (this.currentSymbols.length > 2) {\n            offset += this.currentSymbolsHeight[this.currentSymbols.length - 2] * 0.5;\n            result.push(offset);\n\n            for (let i = this.currentSymbolsHeight.length - 3; i > middleSymbolIndex; i--) {\n                offset += this.currentSymbolsHeight[i];\n                result.push(offset);\n            }\n        }\n\n        return result;\n    }\n\n    private createElement(\n        tag: string,\n        className: string,\n        rootElem?: HTMLElement,\n        appendBefore: HTMLElement = null,\n    ): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem != null) {\n            if (appendBefore != null) {\n                rootElem.insertBefore(elem, appendBefore);\n            } else {\n                rootElem.appendChild(elem);\n            }\n        }\n\n        return elem;\n    }\n\n    private createSymbol(\n        tag: string,\n        className: string,\n        rootElem?: HTMLElement,\n        appendBefore: HTMLElement = null,\n    ): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        let symbolHolder = document.createElement(tag);\n        symbolHolder.className = \"jackpotSymbolHolder\";\n        elem.appendChild(symbolHolder);\n\n        if (rootElem != null) {\n            if (appendBefore != null) {\n                rootElem.insertBefore(elem, appendBefore);\n            } else {\n                rootElem.appendChild(elem);\n            }\n        }\n\n        return elem;\n    }\n\n    //ToDo prerobit na resource ID\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n        elem.innerHTML = text;\n\n        return elem;\n    }\n\n    private createSpinBtn(): void {\n        let userControls = document.getElementById(\"userControls\");\n        if (userControls) {\n            let spinBtn = userControls.getElementsByClassName(\"spinBtn\")[0];\n            if (spinBtn) {\n                let parent = spinBtn.parentElement;\n                this.spinBtn = this.createElement(\"div\", \"btn spinBtn\", parent);\n                this.spinBtn.innerHTML = spinBtn.innerHTML;\n                this.spinBtn.addEventListener(\"click\", this.startGame.bind(this));\n\n                this.lastEvent = this.handleSpaceStart.bind(this);\n                document.addEventListener(\"keyup\", this.lastEvent);\n            }\n        }\n    }\n\n    private createLevelDataOverride(winData: boolean): IProgressiveBonusLevel {\n        let result = {} as IProgressiveBonusLevel;\n\n        if (this.gameData != null) {\n            result.code = this.gameData.game.win.level;\n\n            //to always show minigame win value in counter\n            if (winData) {\n                result.lastWinAmount = this.gameData.game.win.amount;\n            } else {\n                result.nextValue = this.gameData.game.win.amount;\n                result.nextTimestamp = new Date(new Date().getTime() + 8000).toISOString();\n                result.previousValue = this.gameData.game.win.amount;\n            }\n        }\n\n        return result;\n    }\n\n    private setTransformY(elem: HTMLElement, y: number): void {\n        elem.style.transform = \"translate3d(0, \" + y + \"px, 0)\";\n    }\n\n    private setStageVisibility(visible: boolean): void {\n        if (StageController.Renderer != null && StageController.Renderer._lastObjectRendered) {\n            StageController.Renderer._lastObjectRendered.visible = visible;\n        }\n    }\n\n    private handleSpaceStart(event: KeyboardEvent): void {\n        if (event.keyCode == 32) {\n            this.startGame();\n        }\n    }\n\n    private addSymbolToReel(symbolId: number, winSymbol: boolean = false, blured: boolean = false): void {\n        let className = \"jackpotSymbol l-\" + symbolId;\n\n        if (winSymbol) {\n            className += \" jackpotWinSymbol\";\n            this.holder.classList.add(\"win-\" + symbolId);\n        }\n\n        if (blured) {\n            className += \" blur\";\n        }\n\n        let symbol = this.createSymbol(\"div\", className, this.reel, this.currentSymbols[0]);\n        // symbol.setAttribute('data-symbolId', symbolId.toString());\n        this.currentSymbols.unshift(symbol);\n        this.currentSymbolsHeight.unshift(this.symbolsHeight[symbolId - 1]);\n    }\n\n    private bounceCounters(enable: boolean): void {\n        let countersHolder = document.getElementById(\"jackpotCounters\");\n        let countersLogo = document.getElementById(\"jackpotLogo\");\n\n        if (countersHolder != null && countersLogo != null) {\n            if (enable) {\n                countersHolder.classList.add(\"jackpotBounce\");\n                countersLogo.classList.add(\"jackpotBounce\");\n            } else {\n                countersHolder.classList.remove(\"jackpotBounce\");\n                countersLogo.classList.remove(\"jackpotBounce\");\n            }\n        }\n    }\n\n    private getCustomContent(name: string, extension: string): Promise<Array<string>> {\n        return new Promise<Array<string>>((resolve: Function, reject: Function) => {\n            if (AppContext.gameConfiguration == null) {\n                resolve([name, \"\"]);\n                return;\n            }\n\n            if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\n                resolve([name, \"\"]);\n                return;\n            }\n\n            let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\n            if (theme == \"\") {\n                if (AppContext.gameConfiguration.UseJackpotLocalization) {\n                    theme = Jackpot.JackpotTheme;\n                } else {\n                    resolve([name, \"\"]);\n                    return;\n                }\n            }\n\n            const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\n            const spbFolder = \"SynotProgressiveBonus\";\n            const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}${extension}`;\n            let img = document.createElement(\"img\");\n            img.setAttribute(\"src\", url);\n\n            img.addEventListener(\"load\", (ev) => {\n                resolve([name, url]);\n            });\n            img.addEventListener(\"error\", (ev) => {\n                resolve([name, \"\"]);\n            });\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotGame.ts\n **/","import { Logger } from \"neo-common\";\n\n/**\n * @class AmbientBackground\n */\nexport class AmbientBackground {\n    static changeAmbientBackground(newBackgroundName: string, duration: number = 200, delay: number = 0): void {\n        let base = document.getElementById(\"ambientBackgroundBase\");\n        let transition = document.getElementById(\"ambientBackgroundTransition\");\n\n        if (base && transition) {\n            if (!transition.classList.contains(newBackgroundName)) {\n                transition.classList.remove(\"show\");\n                base.className = transition.className;\n\n                transition.style.transitionDuration = duration + \"ms\";\n                transition.style.transitionDelay = delay + \"ms\";\n                transition.className = \"\";\n                transition.offsetWidth;\n                transition.classList.add(newBackgroundName, \"show\");\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Scaling\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/AmbientBackground.ts\n **/","import { Utils, Logger } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Scaling } from \"./Scaling\";\n\n/**\n * @class Focus\n */\nexport class Focus {\n    static clicked: boolean = false;\n\n    static focus(): void {\n        window.onblur = Focus.onBlur;\n        window.onfocus = Focus.onFocus;\n        window.onclick = Focus.onClick;\n\n        window.addEventListener(\"fullscreenchange\", Focus.onFullscreenChange.bind(this));\n    }\n\n    static onClick(): void {\n        if (\n            AppContext.gameConfiguration &&\n            AppContext.gameConfiguration.FullscreenOnClick &&\n            !Scaling.IsIOs &&\n            !Platforms.Platforms.handleFullscreen\n        ) {\n            if (document.body.requestFullscreen) {\n                document.body.requestFullscreen();\n            } else if (document.body.webkitRequestFullscreen) {\n                document.body.webkitRequestFullscreen();\n            }\n        }\n\n        if (!Focus.clicked) {\n            Focus.clicked = true;\n        }\n    }\n\n    static onFullscreenChange(e: Event): void {\n        Platforms.Platforms.fullscreen(document.fullscreenElement != null);\n    }\n\n    static onFocus(): void {\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\n            PIXI.sound.unmuteAll();\n        }\n    }\n\n    static onBlur(): void {\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\n            PIXI.sound.muteAll();\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Focus\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Focus.ts\n **/","import {\n    UriHelper,\n    Logger,\n    StringUtils,\n    lodash,\n    CommonTypes,\n    PreloaderProviderBase,\n    PreloaderResourceLoader,\n    PreloaderResourceItem,\n    PreloaderInfo,\n} from \"neo-common\";\nimport { Platforms } from \"neo-games\";\n\nimport { SndResource } from \"../Resources/SndResource\";\nimport { XmlResource } from \"../Resources/XmlResource\";\nimport { SoundManager } from \"./SoundManager\";\nimport { StyleManager } from \"./StyleManager\";\nimport { CanvasManager } from \"./CanvasManager\";\nimport { ConfigurationManager } from \"./ConfigurationManager\";\nimport { HtmlManager } from \"./HtmlManager\";\nimport { StageController } from \"../StageController\";\nimport { ActionManager } from \"./ActionManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { GameApp } from \"../../GameApp\";\nimport { ILoadingElement } from \"../Elements/Interfaces/ILoadingElement\";\nimport { GameManager } from \"../../Managers/GameManager\";\n\nconst DOCUMENT_TYPE = \"document\";\n\nconst PIXI_EVENTS = {\n    Load: \"load\",\n    Error: \"error\",\n    Complete: \"complete\",\n};\n\nconst LOADJS_EVENTS = {\n    FileLoad: \"fileload\",\n    Complete: \"complete\",\n    Progress: \"progress\",\n    Error: \"error\",\n};\n\nconst RESOURCE_FLAGS = {\n    Gamble: \"G\",\n};\n\nexport class PreloaderProvider extends PreloaderProviderBase {\n    private static _loadingElements: Array<ILoadingElement> = [];\n    private static _loadedGroups: Array<string> = [];\n\n    private _resourceLoader: PIXIResourceLoader;\n    private _audioResourceLoader: PIXIResourceLoader;\n\n    get resourceLoader(): PreloaderResourceLoader {\n        return this._resourceLoader;\n    }\n\n    get audioResourceLoader(): PreloaderResourceLoader {\n        return this._audioResourceLoader;\n    }\n\n    public static addLoadingElementFunction(fnc: ILoadingElement): void {\n        PreloaderProvider._loadingElements.push(fnc);\n    }\n\n    constructor() {\n        super();\n        this._resourceLoader = new PIXIResourceLoader(false);\n        this._audioResourceLoader = new PIXIResourceLoader(true);\n    }\n\n    public static isGroupLoaded(group: string): boolean {\n        return PreloaderProvider._loadedGroups.indexOf(group) != -1;\n    }\n\n    cleanup(): void {\n        this._resourceLoader = null;\n        this._audioResourceLoader = null;\n        XmlResource.cleanup();\n        StyleManager.cleanup();\n    }\n\n    prepareFileList(resources: Array<PreloaderResourceItem>): void {\n        if (resources) {\n            var gambleIsDisabled = !AppContext.gameDefinition.Gamble;\n\n            lodash.remove(resources, (resource) => {\n                var gambleResource = this.resourceHasFlag(resource, RESOURCE_FLAGS.Gamble);\n                // if resource has flag 'G' (gamble) but game is disabled, remove it from resources to be loaded!\n                var removeRes = gambleResource && gambleIsDisabled;\n\n                if (DEBUG) {\n                    if (removeRes) {\n                        Logger.debugGroup(\n                            \"Preloader\",\n                            `Gamble disabled -> removing resource path '${resource.path}' (because has gamble flag) from file list to be loaded.`,\n                        );\n                    }\n                }\n\n                return removeRes;\n            });\n        }\n    }\n\n    loadCompleted(): Promise<any> {\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\n            let fnc = PreloaderProvider._loadingElements[i];\n            if (fnc != null) {\n                fnc.onLoadCompleted(PreloaderInfo.instance.loadSucceed);\n            }\n        }\n\n        return new Promise<any>((resolve: any, reject: any) => {\n            resolve();\n        });\n    }\n\n    onUpdateProgress(progress: number): void {\n        Platforms.Platforms.loadProgress(progress);\n\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\n            let fnc = PreloaderProvider._loadingElements[i];\n            if (fnc != null) {\n                fnc.onProgressUpdate(progress);\n            }\n        }\n    }\n\n    loadGroupCompleted(group: string): void {\n        Logger.debugGroup(\"loadGroupCompleted\", `Loaded group: ${group}`);\n\n        if (PreloaderProvider._loadedGroups.indexOf(group) == -1) {\n            PreloaderProvider._loadedGroups.push(group);\n        }\n    }\n\n    handleGroupError(error: any, group: string): void {\n        //todo\n    }\n\n    parseCurrentElements(): void {\n        const xmlItems = XmlResource.Items;\n\n        if (xmlItems != null && xmlItems.length > 0) {\n            const tempElements = lodash.map(xmlItems, (item) => {\n                const el = item.documentElement;\n                const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\n                if (prio === -1) {\n                    if (DEBUG) {\n                        Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\n                    }\n                }\n                return { element: el, priority: prio };\n            });\n\n            const elements = lodash.map(\n                lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\n                (x) => x.element,\n            );\n\n            // 1st) parse: config/sound/style elements\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                ConfigurationManager.parseElements(element);\n                SoundManager.parseElements(element);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                StyleManager.parseElements(element);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                ActionManager.parseActionSets(element);\n            }\n\n            // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\n            document.body.setAttribute(\"Language\", GameApp.language);\n\n            // 3rd) parse: canvas/html elements\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                CanvasManager.parseElements(element);\n                HtmlManager.parseElements(element);\n            }\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\n            }\n        }\n\n        XmlResource.emptyItems();\n\n        if (DEBUG) {\n            Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\n        }\n    }\n\n    parseElements(): Promise<any> {\n        return new Promise<any>((resolve: any, reject: any) => {\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse xml resources started`);\n            }\n\n            const xmlItems = XmlResource.Items;\n\n            if (xmlItems != null && xmlItems.length > 0) {\n                const tempElements = lodash.map(xmlItems, (item) => {\n                    const el = item.documentElement;\n                    const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\n                    if (prio === -1) {\n                        if (DEBUG) {\n                            Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\n                        }\n                    }\n                    return { element: el, priority: prio };\n                });\n\n                const elements = lodash.map(\n                    lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\n                    (x) => x.element,\n                );\n\n                // 1st) parse: config/sound/style elements\n                if (DEBUG) {\n                    Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    ConfigurationManager.parseElements(element);\n                    SoundManager.parseElements(element);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    StyleManager.parseElements(element);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    ActionManager.parseActionSets(element);\n                }\n\n                // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\n                document.body.setAttribute(\"Language\", GameApp.language);\n\n                // 3rd) parse: canvas/html elements\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    CanvasManager.parseElements(element);\n                    HtmlManager.parseElements(element);\n                }\n                if (DEBUG) {\n                    Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\n                }\n            }\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\n            }\n            resolve();\n        });\n    }\n}\n\nexport class PIXIResourceLoader extends PreloaderResourceLoader {\n    private _hasPreloaderVersionId: boolean;\n    private _loadSingleCompletedCallback: CommonTypes.ErrorFunction;\n    private _loadCompletedCallback: CommonTypes.ErrorFunction;\n    private _preloaderVersionId: string;\n    private _updatedTextures: Object;\n    private _loadingErrorCount: number;\n    private _loadingErrorFiles: Array<string>;\n    private _resourcesWithNoId: Object;\n\n    private loader: PIXI.loaders.Loader;\n\n    constructor(audio: boolean) {\n        super(audio);\n\n        this.loader = new PIXI.loaders.Loader();\n\n        this._hasPreloaderVersionId = null;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = [];\n        this._resourcesWithNoId = {};\n\n        this.handleBeforeLoad = this.handleBeforeLoad.bind(this);\n        this.handleLoad = this.handleLoad.bind(this);\n        this.handleError = this.handleError.bind(this);\n        this.handleComplete = this.handleComplete.bind(this);\n        this.handleGroupComplete = this.handleGroupComplete.bind(this);\n        this.updateTextureAfterLoad = this.updateTextureAfterLoad.bind(this);\n    }\n\n    cleanup(): void {\n        this._loadCompletedCallback = null;\n        this._updatedTextures = null;\n        this._preloaderVersionId = null;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = [];\n        this._resourcesWithNoId = null;\n\n        this.loader.reset();\n    }\n\n    xmlsResourceLoaded(document: XMLDocument, resource: PreloaderResourceItem): void {\n        const acceptedAsXmlResource = document && document.documentElement.nodeName === XmlResource.Root;\n        if (DEBUG) {\n            const extra = acceptedAsXmlResource ? \" and is accepted as xml resource for app\" : \"\";\n\n            Logger.debugGroup(\"Preloader\", `Resource \"${resource.path}\" is loaded as xml document` + extra);\n        }\n\n        if (acceptedAsXmlResource) {\n            XmlResource.add(document);\n        }\n    }\n\n    beforeResourcesLoad(): void {\n        this.loader.reset();\n        this._updatedTextures = {};\n        this.loader.use(this.updateTextureAfterLoad);\n    }\n\n    updateTextureAfterLoad(resource: PIXI.loaders.Resource, next: Function): void {\n        if (resource.data && (resource as any).isImage) {\n            if (resource.texture && resource.texture.baseTexture && resource.texture.baseTexture.hasLoaded) {\n                const imageUrl = resource.texture.baseTexture.imageUrl;\n                const noId = this._resourcesWithNoId.hasOwnProperty(imageUrl);\n\n                if (!this._updatedTextures.hasOwnProperty(imageUrl)) {\n                    if (noId) {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                \"Preloader\",\n                                `Resource '${imageUrl}' has no 'id' assigned and will not be pushed to webgl cache`,\n                            );\n                        }\n                    } else {\n                        if (resource.name.substr(0, 3) === \"ANI\" || resource.name.substr(0, 5) === \"GROUP\") {\n                            StageController.updateTexture(resource.texture.baseTexture);\n                            this._updatedTextures[imageUrl] = true;\n                        }\n\n                        if (DEBUG) {\n                            Logger.debugGroup(\"Preloader\", `Updated texture '${imageUrl}' to webgl cache`);\n                        }\n                    }\n                }\n            }\n        }\n\n        try {\n            next();\n        } catch (e) {\n            this._loadCompletedCallback(e);\n        }\n    }\n\n    handleBeforeLoad(resource: PIXI.loaders.Resource, next: Function): void {\n        if (this._hasPreloaderVersionId) {\n            const oldurl = resource.url;\n            resource.url = UriHelper.setTimeStamp(resource.url, this._preloaderVersionId);\n\n            if (DEBUG && resource.url !== oldurl) {\n                Logger.debugGroup(\"Preloader\", `Resource url \"${oldurl}\" changed to non-cached url \"${resource.url}\"`);\n            }\n        }\n\n        try {\n            next();\n        } catch (e) {\n            this._loadCompletedCallback(e);\n        }\n    }\n\n    handleLoad(loader: any, resource: PIXI.loaders.Resource): void {\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"Preloader\",\n                `Resource \"${resource.url}\" [${resource.xhrType}] [${this.preloader.progressPercent} %]`,\n            );\n        }\n\n        if (resource.xhrType === DOCUMENT_TYPE) {\n            const xmlRoot: string = resource.data.documentElement.nodeName;\n            if (xmlRoot === XmlResource.Root) {\n                throw new Error(`Should not be there!`);\n            }\n        }\n\n        this._loadSingleCompletedCallback(false);\n    }\n\n    handleError(error: Error, loader: any, resource: PIXI.loaders.Resource): void {\n        if (DEBUG) {\n            Logger.errorGroup(\"Preloader\", `Resource load error: ${resource.url}`);\n        }\n\n        this._loadingErrorCount++;\n        this._loadingErrorFiles.push(resource.url);\n        this._loadSingleCompletedCallback(`Failed to load ${resource.url} resource!`);\n    }\n\n    handleComplete(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Preloader\", \"Completed PIXI resource load\");\n        }\n\n        if (this.audio) {\n            for (let key in this.loader.resources) {\n                if (key.indexOf(\"_meta\") !== -1) {\n                    const sound = key.substr(0, key.length - 5);\n                    if (PIXI.sound.exists(sound)) {\n                        let soundSprite: PIXI.sound.Sound = PIXI.sound.find(sound);\n\n                        if (lodash.isEmpty(soundSprite.sprites)) {\n                            soundSprite.addSprites(this.loader.resources[key].data.spritemap);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    handleGroupComplete(): void {\n        this.loader.removeAllListeners(PIXI_EVENTS.Load);\n        this.loader.removeAllListeners(PIXI_EVENTS.Error);\n\n        this.handleComplete();\n\n        const loadError =\n            this._loadingErrorCount === 0\n                ? null\n                : `Failed to load ${this._loadingErrorCount} resources!: \\n${this._loadingErrorFiles.join(\",\\n\")}`;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = []; //reset counter of error for current group\n        this._loadCompletedCallback(loadError);\n    }\n\n    loadAllGroupsCompleted(): void {\n        // don't need to be implemented yed\n    }\n\n    loadResources(\n        resources: Array<PreloaderResourceItem>,\n        resolveSingleCallback: CommonTypes.ErrorFunction,\n        resolveCallback: CommonTypes.ErrorFunction,\n    ): void {\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\n            if (!AppContext.gameConfiguration.CanvasFallback) {\n                const loadingScreen = document.getElementById(\"loading\");\n                const element = document.getElementById(\"progressNumber\");\n\n                if (loadingScreen != null) {\n                    loadingScreen.classList.add(\"_error\");\n                }\n                if (element != null) {\n                    element.innerHTML = \"WebGL error. Please contact support.\";\n                }\n\n                return;\n            }\n        }\n\n        this._loadSingleCompletedCallback = resolveSingleCallback;\n        this._loadCompletedCallback = resolveCallback;\n\n        this._preloaderVersionId = this.preloader.versionId;\n        this._hasPreloaderVersionId = !StringUtils.isNullOrEmpty(this._preloaderVersionId);\n\n        for (let i = 0; i < resources.length; i++) {\n            const resource = resources[i];\n\n            if (StringUtils.isNullOrEmpty(resource.id)) {\n                this.loader.add(resource.path);\n                this._resourcesWithNoId[resource.path] = true;\n            } else {\n                this.loader.add(resource.id, resource.path);\n            }\n        }\n\n        this.loader.pre(this.handleBeforeLoad);\n        this.loader.on(\"load\" /*PIXI_EVENTS.Load*/, this.handleLoad);\n        this.loader.on(\"error\" /*PIXI_EVENTS.Error*/, this.handleError);\n        this.loader.once(\"complete\" /*PIXI_EVENTS.Complete*/, this.handleGroupComplete);\n        this.loader.load();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/PreloaderProvider.ts\n **/","import { Resource } from \"./Resource\";\n\n/**\n * The XmlResource is used for holding xmls from preloading.\n * @class XmlResource\n * @extends Resource\n */\nexport class XmlResource extends Resource {\n    static Root: string = \"Elements\";\n\n    private static items: Array<XMLDocument> = [];\n\n    public static get Items(): Array<XMLDocument> {\n        return XmlResource.items;\n    }\n\n    public static add(doc: XMLDocument): void {\n        XmlResource.items.push(doc);\n    }\n\n    public static cleanup(): void {\n        if (XmlResource.items) {\n            XmlResource.items.length = 0;\n            XmlResource.items = null;\n        }\n    }\n\n    public static emptyItems(): void {\n        if (XmlResource.items) {\n            XmlResource.items = [];\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/XmlResource.ts\n **/","/**\n * The Resource class is used as parent for all types of resources.\n * @class Resource\n */\nexport class Resource {}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/Resource.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { StageController } from \"../StageController\";\nimport { ActionSet } from \"../ActionSet\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\n\n/**\n * The CanvasManager class is used for parsing elements which are extending display objects and render them to canvas.\n * @class CanvasManager\n */\nexport class CanvasManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CanvasManager\", data);\n        }\n    }\n\n    /**\n     * Parse display object elements from xml and add them to stage.\n     * @method parseElements\n     * @param {Element} startNode\n     * @param {PIXI.Container} parent\n     * @returns {Object}\n     */\n    static parseElements(startNode: Element, parent: PIXI.Container = null): Object {\n        const children: Object = {};\n\n        if (!startNode) {\n            return children;\n        }\n\n        CanvasManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.DisplayObject),\n            )\n            .forEach((node: Element) => {\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                element.create(node);\n\n                if (node.hasAttribute(\"LinkId\")) {\n                    ActionSet.ElementsToLink[node.getAttribute(\"LinkId\")] = element;\n                }\n\n                var noGamble: boolean = false;\n\n                if (node.hasAttribute(\"Key\")) {\n                    if (node.getAttribute(\"Key\") === \"gamble\" && !AppContext.gameDefinition.Gamble) {\n                        noGamble = true;\n                    }\n                }\n\n                if (!noGamble) {\n                    CanvasManager._addElementToParent(element, parent);\n                    CanvasManager._handleElementController(node, element);\n                }\n\n                children[node.nodeName] = element;\n            });\n\n        return children;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param {Element} node\n     * @param {Array<Element>} nodeList\n     * @returns {Array<Element>}\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = CanvasManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Adds element either to its parent or to the stage\n     * @method _addElementToParent\n     * @param {PIXI.DisplayObject} element\n     * @param {PIXI.Container} parent\n     * @returns void\n     */\n    private static _addElementToParent(element: any, parent: PIXI.Container): void {\n        if (parent != null) {\n            parent.addChild(element);\n        } else if (element.children.length > 0) {\n            StageController.addChild(element);\n        }\n    }\n\n    /**\n     * If node has controller attribute, (creates new controller, inits it and) registers it\n     * @method _handleElementController\n     * @param {Element} node\n     * @param {any} element\n     * @returns void\n     */\n    private static _handleElementController(node: Element, element: any): void {\n        const controllerAttribute = node.hasAttribute(\"Controller\") ? node.getAttribute(\"Controller\") : \"\";\n        if (controllerAttribute === \"\") {\n            return;\n        }\n\n        const elementController: any = EngineComponentFactory.get(controllerAttribute);\n        if (elementController != null) {\n            elementController.startInitialization(element);\n            if (node.hasAttribute(\"Key\")) {\n                if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\n                    return;\n                }\n                ModuleManager.registerGameModule(node.getAttribute(\"Key\"), elementController);\n            }\n        } else {\n            if (DEBUG) {\n                CanvasManager.log(\"ERROR no controller with name: \" + controllerAttribute);\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/CanvasManager.ts\n **/","import { engineComponent, EngineComponentFactory, Logger } from \"neo-common\";\nimport { ComponentTypes } from \"./ComponentTypes\";\n\n/**\n * Registers action sets, their elements, actions and dispatch action on event.\n *\n * @class ActionSet\n * @author Marek Turkovic\n */\n@engineComponent(ComponentTypes.ActionSet)\nexport class ActionSet {\n    /**\n     * Registered actions per action block\n     * @type {{}}\n     */\n    static ActionSets: { [id: string]: any } = {};\n\n    /**\n     * Elements that we want to control.\n     * @type {{}}\n     */\n    static ElementsToLink: { [id: string]: any } = {};\n\n    /**\n     * Elements containing attributes Action, Event, ActionCase. These elements emits actions.\n     * @type {{}}\n     */\n    actionElements: { [id: string]: any } = {};\n\n    /**\n     * xml nodes added to object by case name\n     */\n    cases: Object = {};\n\n    /**\n     * Registers action sets, their elements and actions\n     * @param node\n     */\n    public RegisterActionSet(node: Element): void {\n        ActionSet.getNodesList(node.firstElementChild)\n            .reverse()\n            .forEach((actionSetNode: Element) => {\n                switch (actionSetNode.nodeName) {\n                    case \"Elements\":\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\n                            .reverse()\n                            .forEach((elementNode: Element) => {\n                                this.actionElements[elementNode.nodeName] = elementNode;\n                            });\n\n                        break;\n                    case \"Actions\":\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\n                            .reverse()\n                            .forEach((actionCase: Element) => {\n                                if (!actionCase.hasAttribute(ActionSetAttributes.CASE)) {\n                                    return;\n                                }\n\n                                if (this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] !== null) {\n                                    this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] = actionCase;\n                                } else {\n                                    if (DEBUG) {\n                                        this.log(\n                                            \"ERROR case \" +\n                                                actionCase.getAttribute(\"Case\") +\n                                                \" already exist in ActionSet \" +\n                                                node.nodeName,\n                                        );\n                                    }\n                                }\n                            });\n                        break;\n                }\n            });\n\n        ActionSet.ActionSets[node.nodeName] = this;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ActionSet.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Perform set of actions on main element throught linked element.\n     *\n     * @param action\n     * @constructor\n     */\n    public DispatchEvent(action: string): void {\n        ActionSet.getNodesList(this.cases[action].firstElementChild)\n            .reverse()\n            .forEach((elementNode: Element) => {\n                const linkedElement = this.actionElements[elementNode.nodeName];\n                const classAttribute = linkedElement.hasAttribute(\"Class\") ? linkedElement.getAttribute(\"Class\") : \"\";\n\n                if (classAttribute === \"\") {\n                    if (DEBUG) {\n                        this.log(\"WARNING element with name: \" + linkedElement.nodeName + \" has no class\");\n                    }\n                    return;\n                }\n\n                if (!EngineComponentFactory.isTypeOf(classAttribute, ComponentTypes.LinkedElement)) {\n                    return;\n                }\n\n                const element: any = EngineComponentFactory.get(classAttribute);\n                element.create(linkedElement, elementNode);\n            });\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nexport const ActionSetAttributes = {\n    CASE: \"Case\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ActionSet.ts\n **/","import { Logger } from \"neo-common\";\nimport { Configuration } from \"../Configuration\";\n\n/**\n * The ConfigurationManager class is used for parsing elements which are type of Configuration and store them for next usage.\n * @class ConfigurationManager\n */\nexport class ConfigurationManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ConfigurationManager\", data);\n        }\n    }\n\n    /**\n     * Parse configuration from xml and store them for next usage.\n     * @method parseElements\n     * @param startNode Element\n     * @return void\n     */\n    static parseElements(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        ConfigurationManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") === \"Configuration\")\n            .forEach((node: Element) => (Configuration.Configurations[node.nodeName] = node));\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ConfigurationManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ConfigurationManager.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { HtmlElement } from \"../../HTMLComponents/Elements/HtmlElement\";\nimport { UserControls } from \"../../Channels/Common/UserControls/UserControls\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GambleUserControls } from \"../../Channels/Common/UserControls/GambleUserControls\";\nimport { DesktopBaseUserControls } from \"../../Channels/Desktop/DesktopBaseUserControls\";\nimport { MobileBaseUserControls } from \"../../Channels/Mobile/MobileBaseUserControls\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DesktopFreespinsUserControls } from \"../../Channels/Desktop/DesktopFreespinsUserControls\";\nimport { MobileFreespinsUserControls } from \"../../Channels/Mobile/MobileFreespinsUserControls\";\n\n/**\n * The HtmlManager class is used for parsing html elements which are extending html element and append them to index.html.\n * @class HtmlManager\n */\nexport class HtmlManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"HtmlManager\", data);\n        }\n    }\n\n    /**\n     * Parse html elements from xml and append them to index.html.\n     * @method parseElements\n     * @param startNode Element\n     * @param parent HtmlElement\n     * @return void\n     */\n    static parseElements(startNode: Element, parent: HtmlElement = null): Object {\n        const children: Object = {};\n\n        if (!startNode) {\n            return;\n        }\n\n        HtmlManager.getNodesList(startNode.firstElementChild, [])\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlElement),\n            )\n            .forEach((node: Element) => {\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                const root: HTMLElement = document.getElementById(\"root\");\n                let customRoot: HTMLElement;\n\n                if (node.hasAttribute(\"RootId\")) {\n                    customRoot = document.getElementById(node.getAttribute(\"RootId\"));\n                }\n\n                if (node.hasAttribute(\"Key\")) {\n                    if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\n                        return;\n                    }\n\n                    if (element instanceof DesktopBaseUserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    } else if (element instanceof MobileBaseUserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    } else if (element instanceof GambleUserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    } else if (element instanceof DesktopFreespinsUserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    } else if (element instanceof MobileFreespinsUserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    }\n                }\n\n                if (element.instance != null) {\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                    element.create(node);\n                } else {\n                    element.create(node);\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                }\n\n                children[node.nodeName] = element;\n            });\n\n        return children;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element>): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = HtmlManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/HtmlManager.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\nimport { UserControls } from \"./UserControls\";\nimport { GambleActions } from \"../Actions/GambleActions\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { GambleController } from \"../../../GameComponents/Gamble/GambleController\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\n\nvar GameModules = Communication.Game.GameModules;\nvar Color = Communication.Game.Color;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class GambleUserControls extends UserControls {\n    protected _controller: GambleController;\n\n    private _collectDelay: FrameTimerEventEmitter;\n\n    private _gambleTickerDefault: HTMLElement;\n    private _gambleTickerHalveLimit: HTMLElement;\n    private _gambleTickerSoftLimit: HTMLElement;\n    private _gambleTickerGameLimit: HTMLElement;\n\n    private _collectedWinValue: number = 0;\n    private _allowStart: boolean;\n\n    private _screen: HTMLElement;\n\n    constructor() {\n        super(\"gamble\");\n\n        this._collectDelay = CreateFrameTimer(\"collectDelay\");\n        this._collectDelay.on(FrameTimerEvents.Complete, this.outro.bind(this));\n\n        this._allowStart = true;\n    }\n\n    private ticker(state: string = \"\"): void {\n        if (this._gambleTickerDefault != null) {\n            this._gambleTickerDefault.style.display = \"none\";\n        }\n        if (this._gambleTickerHalveLimit != null) {\n            this._gambleTickerHalveLimit.style.display = \"none\";\n        }\n        if (this._gambleTickerSoftLimit != null) {\n            this._gambleTickerSoftLimit.style.display = \"none\";\n        }\n        if (this._gambleTickerGameLimit != null) {\n            this._gambleTickerGameLimit.style.display = \"none\";\n        }\n\n        switch (state) {\n            case \"default\":\n                if (this._gambleTickerDefault != null) {\n                    this._gambleTickerDefault.style.display = \"block\";\n                }\n                break;\n            case \"halvelimit\":\n                if (this._gambleTickerHalveLimit != null) {\n                    this._gambleTickerHalveLimit.style.display = \"block\";\n                }\n                break;\n            case \"softLimit\":\n                if (this._gambleTickerSoftLimit != null) {\n                    this._gambleTickerSoftLimit.style.display = \"block\";\n                }\n                break;\n            case \"limit\":\n                if (this._gambleTickerGameLimit != null) {\n                    this._gambleTickerGameLimit.style.display = \"block\";\n                }\n                break;\n        }\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._gambleTickerDefault = document.getElementById(\"gambleTickerDefault\");\n        this._gambleTickerHalveLimit = document.getElementById(\"gambleTickerHalveLimit\");\n        this._gambleTickerSoftLimit = document.getElementById(\"gambleTickerSoftLimit\");\n        this._gambleTickerGameLimit = document.getElementById(\"gambleTickerGameLimit\");\n        this._screen = document.getElementById(\"screen\");\n        this.ticker(\"default\");\n    }\n\n    addController(controller: GambleController): void {\n        this._controller = controller;\n        this._controller.on(GambleController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(GambleController.SelectReceived, this.selectReceived.bind(this));\n        this._controller.on(GambleController.HalveReceived, this.halveReceived.bind(this));\n        this._controller.on(GambleController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(GambleController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(GambleController.Lose, this.lose.bind(this));\n        this._controller.on(GambleController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(GambleController.OutroFinished, this.outroFinished.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [GambleActions.ActionGambleStart]: false,\n            [GambleActions.ActionGambleRed]: false,\n            [GambleActions.ActionGambleBlack]: false,\n            [GambleActions.ActionGambleHalve]: false,\n            [GambleActions.ActionGambleCollect]: false,\n        });\n    }\n\n    initReceived(): void {\n        super.initReceived();\n\n        this._controller.initReceived();\n    }\n\n    collectReceived(): void {\n        this.ticker(\"\");\n        DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n\n        super.collectReceived();\n\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\n        DataManager.updateDataElements();\n\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._collectedWinValue,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n        this._collectDelay.start(30);\n\n        if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\n        }\n        this.changeWinBox(true);\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(): void {\n        if (\n            GameManager.gambleResponse != null &&\n            GameManager.gambleResponse[\"totalCount\"] != null &&\n            GameManager.gambleResponse[\"currentCount\"] != null\n        ) {\n            DataManager.updateDataElement(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n        }\n        ModuleManager.startGamble();\n    }\n\n    selectReceived(): void {\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\n            this._collectedWinValue = parseFloat(\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\n            );\n        } else {\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\n        }\n    }\n\n    halveReceived(): void {\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        this.prepareNewGameRound();\n    }\n\n    dispatchAction(action: string): void {\n        super.dispatchAction(action);\n\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case GambleActions.ActionGambleStart:\n                    this.start();\n                    break;\n                case GambleActions.ActionGambleHalve:\n                    this.halve();\n                    break;\n                case GambleActions.ActionGambleBlack:\n                    this.select(Color.Black);\n                    break;\n                case GambleActions.ActionGambleRed:\n                    this.select(Color.Red);\n                    break;\n                case GambleActions.ActionGambleCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n        }\n\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\n            this._collectedWinValue = parseFloat(\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\n            );\n        } else {\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\n        }\n\n        if (GameManager.gameResponse.totalWin > 0) {\n            DataManager.updateLossLimit(GameManager.gameResponse.totalWin);\n        }\n        super.collect();\n\n        this.disable();\n        this.playCollectSound();\n\n        LimitDialog.closeDialog();\n\n        GameManager.collect(GameModules.Gamble);\n    }\n\n    start(): void {\n        this._allowStart = false;\n        this._collectedWinValue = GameManager.gameResponse.totalWin;\n        ModuleManager.disableBase();\n        this.disable();\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n        this._controller.start();\n    }\n\n    select(color: Communication.Game.Color): void {\n        this.ticker(\"\");\n        this.disable();\n        this._controller.select(color);\n    }\n\n    halve(): void {\n        if (GameManager.gambleResponse.currentWin > 0) {\n            DataManager.updateLossLimit(GameManager.gambleResponse.currentWin / 2);\n        }\n        this.disable();\n        this.playCollectSound();\n        this._controller.halve();\n    }\n\n    winCalculationFinished(): void {\n        if (GameManager.gambleResponse.currentWin > 0) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWin,\n                GameManager.gambleResponse.currentWin.toString(),\n            );\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataGambleCurrentWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n            DataManager.updateDataElements();\n        } else {\n            if (\n                GameManager.gambleResponse != null &&\n                GameManager.gambleResponse[\"totalCount\"] != null &&\n                GameManager.gambleResponse[\"currentCount\"] != null\n            ) {\n                DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n            }\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\n            DataManager.updateDataElements();\n        }\n    }\n\n    allWinsFinished(): void {\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n        if (GameManager.gambleResponse.currentWin > 0) {\n            this.prepareNewGameRound();\n        }\n    }\n\n    lose(): void {\n        this.outro();\n\n        if (this._collectedWinValue > 0) {\n            if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n                DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\n            }\n            this.changeWinBox(true);\n        } else {\n            this.changeWinBox();\n        }\n\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._collectedWinValue,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n    }\n\n    initIntro(): void {\n        super.initIntro();\n\n        FreeRoundBonusExtended.disableUi();\n\n        this.prepareNewGameRound();\n\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.add(\"_inGamble\");\n        }\n\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n\n        this._controller.initIntro();\n    }\n\n    intro(): void {\n        FreeRoundBonusExtended.disableUi();\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.add(\"_inGamble\");\n        }\n        this._controller.intro();\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n    }\n\n    outro(): void {\n        if (this._screen != null && this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.remove(\"_inGamble\");\n        }\n        DataManager.Collectable = true;\n        this._collectDelay.stop();\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        this._allowStart = true;\n        FreeRoundBonusExtended.enableUi();\n        ModuleManager.introModule(GameModules.Base);\n    }\n\n    prepareNewGameRound(): void {\n        if (\n            GameManager.gambleResponse != null &&\n            GameManager.gambleResponse[\"totalCount\"] != null &&\n            GameManager.gambleResponse[\"currentCount\"] != null\n        ) {\n            DataManager.updateDataElement(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleAttempts, 0 + \"\");\n\n            this.limit();\n            this.ticker(\"limit\");\n        } else {\n            let softLimit: boolean = false;\n            if (GameManager.gambleResponse.colorWin === 0) {\n                softLimit = true;\n            }\n\n            if (softLimit) {\n                if (GameManager.gambleResponse.halveEnabled) {\n                    this.ticker(\"softLimit\");\n                } else {\n                    this.ticker(\"limit\");\n                }\n            } else if (GameManager.gambleResponse != null && !GameManager.gambleResponse.halveEnabled) {\n                this.ticker(\"halveLimit\");\n            } else {\n                this.ticker(\"default\");\n            }\n\n            this.actions.changeActionStates({\n                [GambleActions.ActionGambleStart]: false,\n                [GambleActions.ActionGambleRed]: !softLimit,\n                [GambleActions.ActionGambleBlack]: !softLimit,\n                [GambleActions.ActionGambleHalve]: GameManager.gambleResponse.halveEnabled,\n                [GambleActions.ActionGambleCollect]: true,\n            });\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [GambleActions.ActionGambleStart]: false,\n            [GambleActions.ActionGambleRed]: false,\n            [GambleActions.ActionGambleBlack]: false,\n            [GambleActions.ActionGambleHalve]: false,\n            [GambleActions.ActionGambleCollect]: true,\n        });\n    }\n\n    enable(): void {\n        this.actions.changeActionState(GambleActions.ActionGambleStart, this._allowStart);\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    disable(): void {\n        this._actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/GambleUserControls.ts\n **/","import { engineComponent, EngineComponentFactory } from \"neo-common\";\nimport { HtmlContainerElement } from \"../../../HTMLComponents/Elements/HtmlContainerElement\";\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\nimport { ActionsTypes, ActionSet } from \"../Actions/ActionSet\";\nimport { Controller } from \"../../../GameComponents/Controller\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { FreeRoundBonusExtended } from \"../Bonuses/FreeRoundBonusExtended\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class UserControls extends HtmlContainerElement {\n    protected _key: string = \"\";\n    protected _actions: ActionSet;\n\n    private _betLabel: HTMLElement;\n    private _freeBetLabel: HTMLElement;\n    private _betLabelFS: HTMLElement;\n    private _freeBetLabelFS: HTMLElement;\n    private _betValue: HTMLElement;\n    private _betPlus: HTMLElement;\n    private _betMinus: HTMLElement;\n    private _uncollectedWin: HTMLElement;\n    private _collectedWin: HTMLElement;\n\n    constructor(key: string) {\n        super();\n\n        this._key = key;\n\n        this._actions = new ActionSet(`${this._key}.actions`, EngineComponentFactory.getComponentName(this));\n    }\n\n    protected get actions(): ActionSet {\n        return this._actions;\n    }\n\n    getAllActions(): ActionsTypes {\n        return this._actions.getAllActions();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    addController(controller: Controller): void {}\n\n    initReceived(): void {\n        this._uncollectedWin = document.getElementById(\"uncollectedWin\");\n        this._collectedWin = document.getElementById(\"collectedWin\");\n    }\n\n    collectReceived(): void {}\n\n    dispatchAction(action: string): void {}\n\n    collect(): void {}\n\n    initIntro(): void {}\n\n    flashBet(): void {\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betValue != null) {\n            this._betValue.classList.remove(\"flash\");\n            setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\n            setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\n            PlayList.play(\"SND_LowCredit\");\n        }\n    }\n\n    initNewBet(animate: boolean = true): void {\n        if (this._betLabel == null) {\n            this._betLabel = document.getElementById(\"betLabel\");\n        }\n\n        if (this._freeBetLabel == null) {\n            this._freeBetLabel = document.getElementById(\"freeBetLabel\");\n        }\n\n        if (this._betLabelFS == null) {\n            this._betLabelFS = document.getElementById(\"betLabelFS\");\n        }\n\n        if (this._freeBetLabelFS == null) {\n            this._freeBetLabelFS = document.getElementById(\"freeBetLabelFS\");\n        }\n\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betPlus == null) {\n            this._betPlus = document.getElementById(\"betPlus\");\n        }\n\n        if (this._betMinus == null) {\n            this._betMinus = document.getElementById(\"betMinus\");\n        }\n\n        if (FreeRoundBonusExtended.inFrb) {\n            if (this._betLabel != null && !this._betLabel.classList.contains(\"_hidden\")) {\n                this._betLabel.classList.add(\"_hidden\");\n            }\n            if (this._freeBetLabel != null) {\n                if (this._freeBetLabel.classList.contains(\"_hidden\")) {\n                    this._freeBetLabel.classList.remove(\"_hidden\");\n                }\n                if (animate) {\n                    this._freeBetLabel.classList.remove(\"flash\");\n                    setTimeout(() => this._freeBetLabel.classList.add(\"flash\"), 33);\n                    setTimeout(() => this._freeBetLabel.classList.remove(\"flash\"), 2000);\n                }\n            }\n            if (this._betLabelFS != null && !this._betLabelFS.classList.contains(\"_hidden\")) {\n                this._betLabelFS.classList.add(\"_hidden\");\n            }\n            if (this._freeBetLabelFS != null) {\n                if (this._freeBetLabelFS.classList.contains(\"_hidden\")) {\n                    this._freeBetLabelFS.classList.remove(\"_hidden\");\n                }\n            }\n        } else {\n            if (this._freeBetLabel != null && !this._freeBetLabel.classList.contains(\"_hidden\")) {\n                this._freeBetLabel.classList.add(\"_hidden\");\n            }\n            if (this._betLabel != null) {\n                if (this._betLabel.classList.contains(\"_hidden\")) {\n                    this._betLabel.classList.remove(\"_hidden\");\n                }\n                if (animate) {\n                    this._betLabel.classList.remove(\"flash\");\n                    setTimeout(() => this._betLabel.classList.add(\"flash\"), 33);\n                    setTimeout(() => this._betLabel.classList.remove(\"flash\"), 2000);\n                }\n            }\n\n            if (this._freeBetLabelFS != null && !this._freeBetLabelFS.classList.contains(\"_hidden\")) {\n                this._freeBetLabelFS.classList.add(\"_hidden\");\n            }\n            if (this._betLabelFS != null) {\n                if (this._betLabelFS.classList.contains(\"_hidden\")) {\n                    this._betLabelFS.classList.remove(\"_hidden\");\n                }\n            }\n        }\n\n        if (this._betValue != null) {\n            if (animate) {\n                this._betValue.classList.remove(\"flash\");\n                setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\n                setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\n            }\n        }\n\n        if (BetManager.TotalBets.length > 1) {\n            if (this._betPlus != null && this._betPlus.classList.contains(\"_invisible\")) {\n                this._betPlus.classList.remove(\"_invisible\");\n            }\n\n            if (this._betMinus != null && this._betMinus.classList.contains(\"_invisible\")) {\n                this._betMinus.classList.remove(\"_invisible\");\n            }\n        } else {\n            if (this._betPlus != null && !this._betPlus.classList.contains(\"_invisible\")) {\n                this._betPlus.classList.add(\"_invisible\");\n            }\n\n            if (this._betMinus != null && !this._betMinus.classList.contains(\"_invisible\")) {\n                this._betMinus.classList.add(\"_invisible\");\n            }\n        }\n    }\n\n    changeBetColor(green: boolean = false): void {\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betValue != null) {\n            if (green) {\n                this._betValue.style.color = \"#39ff04\";\n            } else {\n                this._betValue.style.color = \"#ffffff\";\n            }\n        }\n    }\n\n    playCollectSound(): void {\n        if (GameManager.gameResponse.totalWin > 0) {\n            if (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod !== \"cumulative\") {\n                PlayList.play(\"SND_BaseCollect\");\n            } else if (!FreeRoundBonusExtended.inFrb) {\n                PlayList.play(\"SND_BaseCollect\");\n            }\n        }\n    }\n\n    cycleHelp(): void {}\n\n    changeWinBox(collect: boolean = false): void {\n        if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n            return;\n        }\n        if (this._uncollectedWin != null) {\n            if (collect) {\n                if (!this._uncollectedWin.classList.contains(\"_hidden\")) {\n                    this._uncollectedWin.classList.add(\"_hidden\");\n                }\n            } else {\n                if (this._uncollectedWin.classList.contains(\"_hidden\")) {\n                    DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n                    DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n                    this._uncollectedWin.classList.remove(\"_hidden\");\n                }\n            }\n        }\n        if (this._collectedWin != null) {\n            if (collect) {\n                if (this._collectedWin.classList.contains(\"_hidden\")) {\n                    this._collectedWin.classList.remove(\"_hidden\");\n                }\n            } else {\n                if (!this._collectedWin.classList.contains(\"_hidden\")) {\n                    this._collectedWin.classList.add(\"_hidden\");\n                }\n            }\n        }\n    }\n\n    restoreGameRound(): void {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/UserControls.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { HtmlContainerStyle } from \"../Styles/HtmlContainerStyle\";\nimport { StyleManager } from \"../../Components/Managers/StyleManager\";\nimport { HtmlManager } from \"../../Components/Managers/HtmlManager\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n/**\n * The HtmlContainerElement class is class which creates holder for other html elements.\n * Can be defined also by Style with class HtmlContainerStyle.\n * Example 1:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerElement>\n *\n * Example 2:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\" Style=\"HtmlContainerStyle\" />\n *\n * @class HtmlContainerElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlContainerElement extends HtmlElement {\n    static Over: string = \"mouseover\";\n    static Out: string = \"mouseout\";\n    static TouchStart: string = \"touchstart\";\n    static TouchEnd: string = \"touchend\";\n    static CustomClick: string = \"click\";\n\n    private _overId: string;\n    private _clickId: string;\n\n    childs: Object;\n    style: HtmlContainerStyle;\n\n    childrenHolderClass: string = \"\";\n    childrenClass: string = \"\";\n    recalculateHeight: boolean = false;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"id\")) {\n            HtmlController.ContainerElementsById[node.getAttribute(\"id\")] = this;\n        }\n\n        /*\n         * Style can be define for better usage of html container elements.\n         * For example when you want to use same html element with same names on more than one places.\n         * Style for container element has to be instance of HtmlContainerStyle\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Style\")) {\n            // get style from loaded resources\n            this.style = <HtmlContainerStyle>StyleManager.HtmlStyles[node.getAttribute(\"Style\")];\n            if (this.style != null) {\n                // parse childs from style\n                this.childs = HtmlManager.parseElements(this.style.node, <HtmlElement>this);\n            } else {\n                if (DEBUG) {\n                    this.logError(\"ERROR no style with name \" + node.getAttribute(\"Style\"));\n                }\n            }\n        } else {\n            // parse childs from node\n            this.childs = HtmlManager.parseElements(node, <HtmlElement>this);\n        }\n\n        if (this.childs == null) {\n            if (DEBUG) {\n                this.log(\"WARNING html container element with name \" + node.nodeName + \" has no children\");\n            }\n        }\n\n        /*\n         * Attribute OnOver define element which will be react to over event handled from this element.\n         * @property OnOver\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"OnOver\")) {\n            if (node.hasAttribute(\"OnOverAction\")) {\n                var actionEnabled: boolean = HtmlController.Configurations[node.getAttribute(\"OnOverAction\")];\n                if (actionEnabled) {\n                    this._overId = node.getAttribute(\"OnOver\");\n                }\n            } else {\n                this._overId = node.getAttribute(\"OnOver\");\n            }\n        }\n\n        if (node.hasAttribute(\"ChildrenHolderClass\")) {\n            this.childrenHolderClass = node.getAttribute(\"ChildrenHolderClass\");\n        }\n        if (node.hasAttribute(\"ChildrenClass\")) {\n            this.childrenClass = node.getAttribute(\"ChildrenClass\");\n        }\n\n        if (node.hasAttribute(\"RecalculateHeight\")) {\n            this.recalculateHeight = StringUtils.parseBoolean(node.getAttribute(\"RecalculateHeight\"));\n        }\n\n        if (node.hasAttribute(\"OnClick\")) {\n            if (node.hasAttribute(\"OnClickAction\")) {\n                this._clickId = node.getAttribute(\"OnClick\");\n                this.instance.addEventListener(HtmlContainerElement.CustomClick, this.onCustomClick.bind(this));\n            }\n        }\n\n        if (this._overId != null) {\n            this.instance.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this.instance.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n        }\n\n        if (node.hasAttribute(\"ActionsHolder\")) {\n            HtmlController.registerActionsHoldersElement(node.getAttribute(\"ActionsHolder\"), this);\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        /*\n         * Attribute UIDispatcher define element which will be dispatch UI action from this element.\n         * @property UIDispatcher\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIDispatcher\")) {\n            HtmlController.registerUiDispatchElement(node.getAttribute(\"UIDispatcher\"), this);\n        }\n\n        /*\n         * Attribute UIActionDispatcher define element which will be dispatch UI action from this element.\n         * @property UIActionDispatcher\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIActionDispatcher\")) {\n            HtmlController.registerUiActionDispatchElement(node.getAttribute(\"UIActionDispatcher\"), this);\n        }\n\n        /**\n         * Attribute TouchScroll define element scrollable by touchmove.\n         * @type {boolean}\n         */\n        let touchScroll: boolean = false;\n        if (node.hasAttribute(\"TouchScroll\")) {\n            touchScroll = StringUtils.parseBoolean(node.getAttribute(\"TouchScroll\"));\n        }\n\n        if (touchScroll) {\n            this.enableScrollOnTouchmove();\n        }\n    }\n\n    /**\n     *\n     */\n    private enableScrollOnTouchmove(): void {\n        var allowScrollUp = true;\n        var allowScrollDown = true;\n        var lastY = 0;\n        let self = this;\n\n        /**\n         * On Touchstart event remember init values.\n         */\n        this.instance.addEventListener(\n            \"touchstart\",\n            function (event) {\n                // Decide enabled direction\n                allowScrollUp = this.scrollTop > 0;\n                allowScrollDown = this.scrollTop < this.scrollHeight - this.clientHeight;\n\n                // Remember where the touch started\n                lastY = event.touches[0].pageY;\n            },\n            true,\n        );\n\n        /**\n         * On Touchmove event decide if scroll if possible up or down.\n         */\n        this.instance.addEventListener(\n            \"touchmove\",\n            function (event) {\n                // Action only for one finger touch\n                if (event.touches.length === 1) {\n                    // Trying move by touch up or down?\n                    let up = event.touches[0].pageY > lastY;\n                    let down = !up;\n                    lastY = event.touches[0].pageY;\n\n                    // Trying to start past scroller bounds\n                    if ((up && allowScrollUp) || (down && allowScrollDown)) {\n                        // Stop this event from propagating, lest another object cancel it.\n                        event.stopPropagation();\n                    } else {\n                        // Cancel this event\n                        event.preventDefault();\n                    }\n                }\n            },\n            true,\n        );\n    }\n\n    /**\n     * Handler for on over event.\n     * @method onOver\n     * @return void\n     */\n    private onOver(): void {\n        if (this._overId != null) {\n            var element: HTMLElement = document.getElementById(this._overId);\n            if (element != null) {\n                element.classList.remove(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    /**\n     * Handler for on out event.\n     * @method onOut\n     * @return void\n     */\n    private onOut(): void {\n        if (this._overId != null) {\n            var element: HTMLElement = document.getElementById(this._overId);\n            if (element != null) {\n                element.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    private onCustomClick(): void {\n        if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\n            PlayList.play(\"SND_Click\");\n            var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\n            if (element != null && element.instance != null) {\n                if (element.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(\"\");\n                    if (element.recalculateHeight) {\n                        element.recalculateChildrenHeight(element);\n                    }\n                    element.reset();\n                    element.instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    if (element.recalculateHeight) {\n                        element.instance.removeAttribute(\"style\");\n                    }\n                    element.instance.classList.add(HtmlController.DisabledClass);\n                }\n                if (document.getElementById(\"autoPlayDialogTop\") != null) {\n                    document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    recalculateChildrenHeight(element: HtmlContainerElement): void {\n        if (element.instance != null && element.childrenHolderClass != \"\" && element.childrenClass != \"\") {\n            let holders: NodeListOf<Element> = element.instance.getElementsByClassName(element.childrenHolderClass);\n            if (holders[0] != null) {\n                let paddingTop: number = parseInt(\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-top\"),\n                );\n                let paddingBottom: number = parseInt(\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-bottom\"),\n                );\n                let holdersChildren: NodeListOf<Element> = holders[0].getElementsByClassName(element.childrenClass);\n                if (holdersChildren != null && holdersChildren.length > 0) {\n                    let height: number = paddingTop + paddingBottom;\n                    for (let i: number = 0; i < holdersChildren.length; i++) {\n                        let itemHeight: number = parseInt(\n                            window.getComputedStyle(holdersChildren[i], null).getPropertyValue(\"height\"),\n                        );\n                        height += itemHeight;\n                    }\n                    element.instance.style.height = height + \"px\";\n                }\n            }\n        }\n    }\n\n    changeState(value: boolean): void {\n        if (this.instance != null) {\n            if (value) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n            } else {\n                this.instance.classList.add(HtmlController.DisabledClass);\n                if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\n                    var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\n                    if (element != null && element.instance != null) {\n                        if (!element.instance.classList.contains(HtmlController.DisabledClass)) {\n                            if (element.recalculateHeight) {\n                                element.instance.removeAttribute(\"style\");\n                            }\n                            element.instance.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    reset(): void {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlContainerElement.ts\n **/","import { Logger, engineComponent, StringUtils } from \"neo-common\";\nimport { HtmlController } from \"../HtmlController\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { GameApp } from \"../../GameApp\";\n\n/**\n * HtmlElement handle basic properties for all kind of html elements.\n * @class HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlElement {\n    data: string;\n\n    instance: HTMLElement;\n\n    rid: string;\n    ridType: string;\n    ridFilter: string;\n\n    private currentValue: string;\n\n    constructor(tagName: string = \"div\") {\n        if (tagName !== \"\") {\n            this.instance = document.createElement(tagName);\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        /*\n         * CSS id reference.\n         * @property id\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"id\")) {\n            this.instance.id = node.getAttribute(\"id\");\n        }\n\n        /*\n         * Filter text when reach some values. For example NO_ZERO will dont show zero values.\n         * @property RidFilter\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"RidFilter\")) {\n            this.ridFilter = node.getAttribute(\"RidFilter\");\n        }\n\n        /*\n         * RidType is typing for formating text. For example use MONEY to have number on two decimal places.\n         * @property RidType\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"RidType\")) {\n            this.ridType = node.getAttribute(\"RidType\");\n        }\n\n        /*\n         * Rid is key from languages.\n         * @property Rid\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Rid\")) {\n            this.rid = node.getAttribute(\"Rid\");\n            HtmlController.RidElements.push(this);\n            this.setText();\n        }\n\n        /*\n         * CssClass is html class attribute.\n         * @property CssClass\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"CssClass\")) {\n            this.instance.className = node.getAttribute(\"CssClass\");\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        /*\n         * Data will handle dynamic texts dynamic from system.\n         * @property Data\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Data\")) {\n            this.data = node.getAttribute(\"Data\");\n            HtmlController.registerDataElement(node.getAttribute(\"Data\"), this);\n        }\n\n        if (node.hasAttribute(\"Lang\") && this.instance != null && GameApp.language != null) {\n            this.instance.setAttribute(\"Language\", GameApp.language);\n        }\n    }\n\n    /**\n     * Set text content to instance if exists\n     * @method setText\n     * @param value string\n     * @return void\n     */\n    setText(value?: string): void {\n        var text: string = \"\";\n\n        if (value != null) {\n            text = value;\n            this.currentValue = value;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    updateText(): void {\n        var text: string = \"\";\n\n        if (this.currentValue != null) {\n            text = this.currentValue;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlElement.ts\n **/","import { Logger, Utils } from \"neo-common\";\n\nexport type ActionsTypes = { [action: string]: boolean };\n\n/**\n * @type BatchUpdatesFunction - predicate function where is able to do multiple batched actions changes and\n * only after on updates ends, event 'onChange' is triggered once!\n * @returns true if where was any changes, false if there was not changes (and thus no 'onChange' is called on end)\n */\nexport type BatchUpdatesFunction = (actions: IActionSet) => boolean | void;\n\nexport interface IActionSet {\n    changeActionState(action: string, value: boolean): boolean;\n}\n\n/**\n * @class ActionsData - List of actions and its states.\n */\nexport class ActionSet implements IActionSet {\n    private _setName: string;\n    private _owner: string;\n    private _actions: ActionsTypes = {};\n    private _batchUpdatesActive: boolean;\n    private _onChange: Function;\n    private _readonly: boolean;\n\n    constructor(setName: string, owner: string) {\n        this._setName = setName;\n        this._owner = owner;\n        this._batchUpdatesActive = false;\n        this._readonly = false;\n\n        this.registerActions = this.registerActions.bind(this);\n        this.registerAction = this.registerAction.bind(this);\n        this.changeActionState = this.changeActionState.bind(this);\n        this.getActionState = this.getActionState.bind(this);\n        this.getAllActions = this.getAllActions.bind(this);\n        this.batchUpdates = this.batchUpdates.bind(this);\n        this.disableAllActions = this.disableAllActions.bind(this);\n        this.invokeOnChange = this.invokeOnChange.bind(this);\n    }\n\n    public get onChange(): Function {\n        return this._onChange;\n    }\n\n    public set onChange(value: Function) {\n        this._onChange = value;\n    }\n\n    private log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(this._owner, `[${this._setName}] ` + s);\n        }\n    }\n\n    private logError(s: string, e?: Error): void {\n        if (DEBUG) {\n            Logger.errorGroup(this._owner, e, `[${this._setName}] ` + s);\n        }\n    }\n\n    private invokeOnChange(): void {\n        if (this._onChange && !this._batchUpdatesActive) {\n            try {\n                this.onChange();\n            } catch (e) {\n                if (DEBUG) {\n                    this.logError(\"invokeOnChange\", e);\n                }\n            }\n        }\n    }\n\n    private checkForReadonly(): void {\n        if (this._readonly) {\n            throw new Error(`ActionSet \"${this._owner}\" [${this._setName}] is readonly!`);\n        }\n    }\n\n    private beginBatchUpdates(): void {\n        this.checkForReadonly();\n\n        if (this._batchUpdatesActive) {\n            throw new Error(`\"${this._owner}\" [${this._setName}] Other batch updates is in pending state!`);\n        }\n\n        this._batchUpdatesActive = true;\n    }\n\n    private endBatchUpdates(hasChanges: boolean): void {\n        this.checkForReadonly();\n\n        this._batchUpdatesActive = false;\n\n        // when return is null or undefined we assume that something HAS changed (return bool was forgotten?)\n        if (Utils.isNullOrUndefined(hasChanges)) {\n            hasChanges = true;\n        }\n\n        if (hasChanges) {\n            this.invokeOnChange();\n        }\n    }\n\n    public batchUpdates(updateFn: BatchUpdatesFunction): void {\n        this.beginBatchUpdates();\n\n        var hasChanges: boolean;\n        try {\n            hasChanges = updateFn(this) as boolean;\n        } finally {\n            this.endBatchUpdates(hasChanges);\n        }\n    }\n\n    /**\n     * @method registerActions - registers multiple actions at once, on end event 'onChange' is triggered.\n     * @param actions - list of actions with its initial state value.\n     */\n    public registerActions(actions: ActionsTypes): void {\n        this.beginBatchUpdates();\n\n        try {\n            for (var key in actions) {\n                if (actions.hasOwnProperty(key)) {\n                    this.registerAction(key, actions[key]);\n                }\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n\n    /**\n     * Register game action for specific controller and add him default value.\n     * @method registerAction\n     * @param action string name of action\n     * @param value boolean default value false\n     * @return true if successfully registered, otherwise returns false\n     */\n    private registerAction(action: string, value: boolean = false): boolean {\n        this.checkForReadonly();\n\n        var notExist = Utils.isNullOrUndefined(this._actions[action]);\n        if (notExist) {\n            this._actions[action] = value;\n\n            this.invokeOnChange();\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not register action '${action}', action was already registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n\n        return notExist;\n    }\n\n    /**\n     * @method changeActionStates - change value to multiple actions at once, after which event 'onChange' is triggered.\n     * @param actionNames\n     * @param value\n     */\n    public changeActionStates(actions: ActionsTypes): void;\n    public changeActionStates(value: boolean, actionNames: Array<string>): void;\n    public changeActionStates(actionsOrValue: boolean | ActionsTypes, actionNames?: Array<string>): void {\n        this.beginBatchUpdates();\n\n        try {\n            var hasValue = typeof actionsOrValue === \"boolean\";\n            if (hasValue) {\n                for (var i = 0; i < actionNames.length; i++) {\n                    var action = actionNames[i];\n                    this.changeActionState(action, actionsOrValue as boolean);\n                }\n            } else {\n                for (var key in actionsOrValue as ActionsTypes) {\n                    if ((actionsOrValue as ActionsTypes).hasOwnProperty(key)) {\n                        this.changeActionState(key, (actionsOrValue as ActionsTypes)[key]);\n                    }\n                }\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n\n    /**\n     * Change value for specific action.\n     * @method changeActionState\n     * @param action string name of action\n     * @param value boolean\n     * @return true when state was successfully changed, otherwise returns false\n     */\n    public changeActionState(action: string, value: boolean): boolean {\n        this.checkForReadonly();\n\n        var exist = !Utils.isNullOrUndefined(this._actions[action]);\n\n        if (exist) {\n            this._actions[action] = value;\n\n            this.invokeOnChange();\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not change action '${action}' value to '${value}', action was not registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n\n        return exist;\n    }\n\n    /**\n     * Get action state (true - action is enabled, false - action is disabled)\n     * @method getActionState\n     * @param action string name of action\n     * @return boolean\n     */\n    public getActionState(action: string): boolean {\n        if (this._actions[action] != null) {\n            return this._actions[action];\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not get action '${action}' value, action was not registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Return all actions with states.\n     * @method getAllActions\n     * @return Object\n     */\n    public getAllActions(): ActionsTypes {\n        return this._actions;\n    }\n\n    /**\n     * clone action set to new instance and is returned as readonly by default\n     */\n    public clone(readonly?: boolean): ActionSet {\n        var cloned = new ActionSet(this._setName, this._owner);\n\n        for (var key in this._actions) {\n            if (this._actions.hasOwnProperty(key)) {\n                cloned.registerAction(key, this._actions[key]);\n            }\n        }\n\n        cloned._readonly = Utils.valueOrDefault(readonly, true);\n        return cloned;\n    }\n\n    /**\n     * Add value false for all action. Use this method for example after dispatch spin action.\n     * @method disableAllActions\n     * @return void\n     */\n    public disableAllActions(): void {\n        this.beginBatchUpdates();\n\n        try {\n            for (var key in this._actions) {\n                this._actions[key] = false;\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/ActionSet.ts\n **/","export class GambleActions {\n    static ActionGambleStart: string = \"GAMBLE_START\";\n    static ActionGambleRed: string = \"GAMBLE_RED\";\n    static ActionGambleBlack: string = \"GAMBLE_BLACK\";\n    static ActionGambleHalve: string = \"GAMBLE_HALVE\";\n    static ActionGambleCollect: string = \"GAMBLE_COLLECT\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GambleActions.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Controller } from \"../Controller\";\nimport { GambleModel } from \"./GambleModel\";\nimport { GambleView } from \"./GambleView\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class GambleController extends Controller {\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly HalveReceived: string = \"eventHalveReceived\";\n    public static readonly SelectReceived: string = \"eventSelectReceived\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly Lose: string = \"eventLose\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n\n    protected _view: GambleView;\n    protected _model: GambleModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof GambleView) {\n            this._view = view;\n        } else {\n            this.log(\"ERROR view is not instance of GambleView\");\n        }\n\n        this._model = new GambleModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    start(): void {\n        this._model.start();\n    }\n\n    startReceived(): void {\n        this._view.startReceived();\n        this.emit(GambleController.StartReceived);\n    }\n\n    select(color: Communication.Game.Color): void {\n        this._model.select(color);\n    }\n\n    selectReceived(): void {\n        this._view.selectReceived();\n        this.emit(GambleController.SelectReceived);\n    }\n\n    halve(): void {\n        this._model.halve();\n    }\n\n    halveReceived(): void {\n        this.emit(GambleController.HalveReceived);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(GambleController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(GambleController.AllWinsFinished);\n    }\n\n    lose(): void {\n        this.emit(GambleController.Lose);\n    }\n\n    intro(): void {\n        this._view.intro();\n    }\n\n    introFinished(): void {\n        this.emit(GambleController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(GambleController.OutroFinished);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleController.ts\n **/","import { Logger } from \"neo-common\";\nimport EventEmitter = PIXI.utils.EventEmitter;\n\nexport class Controller extends EventEmitter {\n    constructor() {\n        super();\n    }\n\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Controller.ts\n **/","import { Utils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { GambleController } from \"./GambleController\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\n\nexport class GambleModel {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected controller: GambleController;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: GambleController) {\n        this.controller = controller;\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.start(Communication.Game.GameModules.Gamble).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public select(color: Communication.Game.Color): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.gambleSelect(color).then((response: any): any => {\n            MessageManager.postpone(this.selectReceived.bind(this), response);\n        });\n    }\n\n    public halve(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.gambleHalve(Communication.Game.GameModules.Gamble).then((response: any): any => {\n            MessageManager.postpone(this.halveReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected selectReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.selectReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected halveReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.halveReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleModel.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { GambleController } from \"./GambleController\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../../HTMLComponents/Elements/HtmlContainerElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { GameManager } from \"../../Managers/GameManager\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class GambleView extends ContainerElement {\n    private _controller: GambleController;\n\n    private _gambleControls: HTMLElement;\n    private _gambleRedBtn: HTMLElement;\n    private _gambleBlackBtn: HTMLElement;\n    private _gambleActualCard: HTMLElement;\n    private _gambleCardBack: HTMLElement;\n    private _gambleWin: HTMLElement;\n    private _gambleWin2: HTMLElement;\n    private _previousCards: Array<HTMLElement>;\n\n    private _actualColor: string;\n\n    private _revealTimer: FrameTimerEventEmitter;\n    private _revealBackTimer: FrameTimerEventEmitter;\n    private _winTimer: FrameTimerEventEmitter;\n    private _loseTimer: FrameTimerEventEmitter;\n    private _introDelayTimer: FrameTimerEventEmitter;\n    private _introSoundTimer: FrameTimerEventEmitter;\n    private _outroDelayTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n\n        this._revealTimer = CreateFrameTimer(\"revealTimer\");\n        this._revealTimer.on(FrameTimerEvents.Complete, this.reveal.bind(this));\n\n        this._revealBackTimer = CreateFrameTimer(\"revealTimer\");\n        this._revealBackTimer.on(FrameTimerEvents.Complete, this.revealBack.bind(this));\n\n        this._winTimer = CreateFrameTimer(\"revealTimer\");\n        this._winTimer.on(FrameTimerEvents.Complete, this.win.bind(this));\n\n        this._loseTimer = CreateFrameTimer(\"revealTimer\");\n        this._loseTimer.on(FrameTimerEvents.Complete, this.lose.bind(this));\n\n        this._introDelayTimer = CreateFrameTimer(\"introDelayTimer\");\n        this._introDelayTimer.on(FrameTimerEvents.Complete, this.introDelayed.bind(this));\n\n        this._introSoundTimer = CreateFrameTimer(\"introSoundTimer\");\n        this._introSoundTimer.on(FrameTimerEvents.Complete, this.introSoundStart.bind(this));\n\n        this._outroDelayTimer = CreateFrameTimer(\"revealTimer\");\n        this._outroDelayTimer.on(FrameTimerEvents.Complete, this.outroDelayed.bind(this));\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n    }\n\n    initReceived(controller: GambleController): void {\n        this._controller = controller;\n\n        this._gambleControls = document.getElementById(\"gamble\");\n\n        if (this._gambleControls == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gamble controlls\");\n            }\n        }\n\n        this._gambleActualCard = document.getElementById(\"gambleActualCard\");\n        if (this._gambleActualCard == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gambleActualCard\");\n            }\n        }\n\n        this._gambleCardBack = document.getElementById(\"gambleCardBack\");\n        if (this._gambleCardBack == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gambleCardBack\");\n            }\n        }\n\n        this._gambleWin = document.getElementById(\"gambleWin\");\n        if (this._gambleWin == null) {\n            this._gambleWin = document.getElementById(\"winBox\");\n            if (this._gambleWin == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no gambleWin\");\n                }\n            }\n        }\n\n        this._gambleWin2 = document.getElementById(\"winBox2\");\n        if (this._gambleWin2 == null) {\n            if (this._gambleWin2 == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no _gambleWin2\");\n                }\n            }\n        }\n\n        this._gambleRedBtn = document.getElementById(\"gambleRedBtn\");\n        this._gambleBlackBtn = document.getElementById(\"gambleBlackBtn\");\n        if (this._gambleRedBtn != null && this._gambleBlackBtn != null) {\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\n        }\n\n        this._previousCards = [];\n        for (let i: number = 0; i < 5; i++) {\n            let card: HTMLElement = document.getElementById(\"previousCard\" + i);\n            if (card != null) {\n                this._previousCards.push(card);\n            }\n        }\n    }\n\n    initIntro(): void {\n        this.previousCards();\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\n            this._gambleControls.style.display = \"block\";\n        }\n        PlayList.loop(\"SND_GambleLoop\");\n    }\n\n    private onOver(): void {\n        if (this._gambleRedBtn != null && !this._gambleRedBtn.classList.contains(\"_hover\")) {\n            this._gambleRedBtn.classList.add(\"_hover\");\n        }\n        if (this._gambleBlackBtn != null && !this._gambleBlackBtn.classList.contains(\"_hover\")) {\n            this._gambleBlackBtn.classList.add(\"_hover\");\n        }\n    }\n\n    private onOut(): void {\n        if (this._gambleRedBtn != null && this._gambleRedBtn.classList.contains(\"_hover\")) {\n            this._gambleRedBtn.classList.remove(\"_hover\");\n        }\n        if (this._gambleBlackBtn != null && this._gambleBlackBtn.classList.contains(\"_hover\")) {\n            this._gambleBlackBtn.classList.remove(\"_hover\");\n        }\n    }\n\n    startReceived(): void {\n        this.previousCards();\n    }\n\n    selectReceived(): void {\n        if (GameManager.gambleResponse.currentCard != null) {\n            if (this._gambleActualCard != null && this._gambleCardBack != null) {\n                this._gambleCardBack.classList.remove(\"_CA\");\n                this._gambleCardBack.classList.remove(\"_DA\");\n                this._gambleCardBack.classList.remove(\"_HA\");\n                this._gambleCardBack.classList.remove(\"_SA\");\n                this._gambleCardBack.classList.remove(\"_JR\");\n                this._gambleCardBack.classList.add(\"_\" + GameManager.gambleResponse.currentCard);\n                this._gambleActualCard.classList.add(\"_reveal\");\n\n                if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\n                    this._revealTimer.start(30);\n                } else {\n                    this._revealTimer.start(60);\n                }\n\n                PlayList.play(\"SND_GambleDraw\");\n            }\n        }\n    }\n    private previousCards(): void {\n        if (this._previousCards != null && GameManager.gambleResponse.previousCards != null) {\n            for (var i: number = 0; i < GameManager.gambleResponse.previousCards.length; i++) {\n                var card: HTMLElement = this._previousCards[i];\n                if (card != null) {\n                    card.classList.remove(\"_CA\");\n                    card.classList.remove(\"_DA\");\n                    card.classList.remove(\"_HA\");\n                    card.classList.remove(\"_SA\");\n                    card.classList.remove(\"_JR\");\n                    if (GameManager.gambleResponse.previousCards[i] != \"XX\") {\n                        card.classList.add(\"_\" + GameManager.gambleResponse.previousCards[i]);\n                    }\n                }\n            }\n        }\n    }\n\n    reAnimate(color: string): boolean {\n        if (this._gambleActualCard != null && this._gambleActualCard.classList.contains(\"_reveal\")) {\n            this._actualColor = color;\n            this._gambleActualCard.classList.remove(\"_reveal\");\n\n            PlayList.play(\"SND_GambleDraw\");\n\n            this._revealBackTimer.start(30);\n            return false;\n        } else {\n            return true;\n        }\n    }\n\n    disabled(): void {\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    intro(): void {\n        this._introDelayTimer.start(1);\n        if (this._gambleControls != null) {\n            this._gambleControls.style.display = \"block\";\n        }\n    }\n\n    private introDelayed(): void {\n        this._introDelayTimer.stop();\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\n        }\n        PlayList.play(\"SND_GambleOpen\");\n        this._introSoundTimer.start(30);\n    }\n\n    private introSoundStart(): void {\n        this._introSoundTimer.stop();\n        PlayList.loop(\"SND_GambleLoop\");\n        this._controller.introFinished();\n    }\n\n    outro(): void {\n        this._outroDelayTimer.start(30);\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\n        }\n        PlayList.play(\"SND_GambleTransition\");\n        PlayList.stop(\"SND_GambleLoop\");\n    }\n\n    private outroDelayed(): void {\n        this._outroDelayTimer.stop();\n        if (this._gambleControls != null) {\n            this._gambleControls.style.display = \"none\";\n        }\n        this._controller.outroFinished();\n    }\n\n    reveal(): void {\n        this._revealTimer.stop();\n        this.previousCards();\n        this._controller.winCalculationFinished();\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\n            this._gambleActualCard.classList.remove(\"_reveal\");\n            PlayList.play(\"SND_GambleWin\");\n            if (this._gambleWin != null && !this._gambleWin.classList.contains(\"winAnimation\")) {\n                this._gambleWin.classList.add(\"winAnimation\");\n            }\n            if (this._gambleWin2 != null && !this._gambleWin2.classList.contains(\"winAnimation\")) {\n                this._gambleWin2.classList.add(\"winAnimation\");\n            }\n            this._winTimer.start(15);\n        } else {\n            this._gambleActualCard.classList.remove(\"_reveal\");\n            this._revealBackTimer.start(30);\n            this._loseTimer.start(30);\n        }\n    }\n\n    revealBack(): void {\n        this.onOut(); //remove _hover class\n        this._revealBackTimer.stop();\n    }\n\n    win(): void {\n        this._winTimer.stop();\n        this._revealBackTimer.start(5);\n        if (this._gambleWin != null && this._gambleWin.classList.contains(\"winAnimation\")) {\n            this._gambleWin.classList.remove(\"winAnimation\");\n        }\n        if (this._gambleWin2 != null && this._gambleWin2.classList.contains(\"winAnimation\")) {\n            this._gambleWin2.classList.remove(\"winAnimation\");\n        }\n        this._controller.allWinsFinished();\n    }\n\n    lose(): void {\n        this._loseTimer.stop();\n        this._controller.lose();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleView.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { ContainerStyle } from \"../Styles/ContainerStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { CanvasManager } from \"../../Managers/CanvasManager\";\nimport { HtmlManager } from \"../../Managers/HtmlManager\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * ContainerElement class is class which creates holder for other elements.\n * Container element can be used for grouping more display objects and better organization in xmls.\n * Can be defined also by Style with class ContainerStyle.\n * Example 1:\n *   <ContainerElement Class=\"ContainerElement\" X=\"0\" Y=\"0\">\n *       <Child1 />\n *       <Child2 />\n *       ...\n *       <ChildX />\n *   </ContainerElement>\n *\n * Example 2:\n *   <ContainerElement Class=\"ContainerElement\" Style=\"ContainerStyle\" />\n *\n * @class ContainerElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ContainerElement extends BaseElement {\n    // style is optional in this element\n    style: ContainerStyle;\n    // list of children\n    childs: Object;\n\n    constructor() {\n        super();\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs.hasOwnProperty(key)) {\n                    if (this.childs[key] instanceof PIXI.DisplayObject) {\n                        this.childs[key].destroy(options);\n                    }\n                    this.childs[key] = null;\n                }\n            }\n\n            this.childs = null;\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n\n        /*\n         * Style can be define for better usage of container elements.\n         * For example when you want to use same display objects with same names on more than one places.\n         * Style for container element has to be instance of ContainerStyle.\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(ContainerElementAttributes.STYLE)) {\n            // get style from StyleManager\n            this.style = <ContainerStyle>StyleManager.Styles[node.getAttribute(ContainerElementAttributes.STYLE)];\n            if (this.style != null) {\n                // parse childs from style\n                if (this.childs == null) {\n                    this.childs = CanvasManager.parseElements(this.style.node, this);\n                    HtmlManager.parseElements(this.style.node, null);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name \" + node.getAttribute(ContainerElementAttributes.STYLE));\n                }\n            }\n        } else {\n            // parse childs from node\n            if (this.childs == null) {\n                this.childs = CanvasManager.parseElements(node, this);\n                HtmlManager.parseElements(node, null);\n            }\n        }\n\n        if (this.childs == null) {\n            if (DEBUG) {\n                this.log(\"WARNING container element with name \" + node.nodeName + \" has no children\");\n            }\n        }\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ContainerElement\n     */\n    clone(): ContainerElement {\n        let element: ContainerElement = new ContainerElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element.name = this.name;\n\n        element.childs = {};\n        element.removeChildren();\n        for (let key in this.childs) {\n            element.childs[key] = this.childs[key].clone();\n            element.addChild(element.childs[key]);\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nconst ContainerElementAttributes = {\n    DEBUG: \"Debug\",\n    /**\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    STYLE: \"Style\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ContainerElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { Paytable } from \"../Common/Paytable/Paytable\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\nimport { FreeRoundBonusExtended } from \"../Common/Bonuses/FreeRoundBonusExtended\";\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopBaseUserControls extends UserControls {\n    protected _controller: BaseController;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _fsDiamondsPayout: HTMLElement;\n    private _paytable: Paytable;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _autoplayAfterFeature: boolean = false;\n\n    private _wasCalclulated: boolean = true;\n    private _unColectedWin: number = 0;\n    private _unColectedWinDelay: FrameTimerEventEmitter;\n    private _machineStopped: boolean = true;\n    private longIntro: boolean = false;\n\n    private _featureAutoStartTimer: FrameTimerEventEmitter;\n    private _featureAutoStarted: boolean = false;\n\n    constructor() {\n        super(\"base\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\n\n        this._userControls = document.getElementById(\"userControls\");\n        this._fsDiamondsPayout = document.getElementById(\"fsDiamondsPayout\");\n\n        this._featureAutoStartTimer = CreateFrameTimer(\"featureAutoStartTimer\");\n        this._featureAutoStartTimer.on(FrameTimerEvents.Complete, this.featureAutoStartDelayed.bind(this));\n    }\n\n    addController(controller: BaseController): void {\n        this._controller = controller;\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\n\n        this._controller.on(BaseController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [BaseActions.ActionAutoplay]: false,\n            [BaseActions.ActionAutoplayStop]: false,\n            [BaseActions.ActionBaseCollect]: false,\n            [BaseActions.ActionBetPlus]: false,\n            [BaseActions.ActionBetMinus]: false,\n            [BaseActions.ActionMaxBet]: false,\n            [BaseActions.ActionSpin]: false,\n            [BaseActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        this._paytable = new Paytable();\n        this._paytable.initialize();\n\n        if (GameManager.gameResponse != null) {\n            if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWin,\n                    GameManager.gameResponse.totalWin.toString(),\n                );\n            }\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n\n        if (this._userControls_supreme != null && !ModuleManager.gambleActive()) {\n            this._userControls_supreme.style.display = \"none\";\n        }\n\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._fsDiamondsPayout != null &&\n                !this._fsDiamondsPayout.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._fsDiamondsPayout.classList.add(HtmlController.DisabledClass);\n            }\n        } else if (ModuleManager.gambleActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n        }\n\n        DataManager.updateDataElements();\n    }\n\n    collectReceived(): void {\n        FreeRoundBonusExtended.enableUi();\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._unColectedWin,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        super.collectReceived();\n\n        this._wasCalclulated = true;\n        DataManager.Collectable = true;\n        DataManager.updateDataElements();\n\n        this.prepareNewGameRound();\n\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n            this.changeWinBox(true);\n        } else {\n            if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            }\n            this.changeWinBox();\n        }\n        this._unColectedWinDelay.stop();\n        //this._unColectedWinDelay.start(75);\n        this._unColectedWin = 0;\n\n        if (FreeRoundBonusExtended.isLastFrb) {\n            FreeRoundBonusExtended.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n    }\n\n    restoreGameRound(collect: boolean = false): void {\n        super.collectReceived();\n        this.changeWinBox(collect);\n\n        FreeRoundBonusExtended.enableUi();\n\n        DataManager.Collectable = true;\n\n        //this.prepareNewGameRound();\n        this._afterWinDelay.start(35);\n    }\n\n    spinReceived(): void {\n        FreeRoundBonusExtended.frbSpin();\n\t\tconst hasFRBRestriction = FreeRoundBonusExtended.inFrb && AppContext.gameConfiguration.FRBGameRoundMinSpan > 0;\n\n        if (DataManager.quickspinEnabled() && !hasFRBRestriction) {\n            // auto quick stop\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            DataManager.updateDataElement(GameData.DataRoundId);\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                BaseActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop && !hasFRBRestriction,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            DataManager.updateDataElement(GameData.DataRoundId);\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.gambleActive() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            if (action === BaseActions.ActionBaseCollect) {\n                this.changeWinBox(true);\n            } else {\n                this.changeWinBox();\n            }\n\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case BaseActions.ActionSpin:\n                    this.spin();\n                    break;\n                case BaseActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case BaseActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case BaseActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n                case BaseActions.ActionMaxBet:\n                    this.changeBet(false, true, false);\n                    break;\n                case BaseActions.ActionBetPlus:\n                    this.changeBet(false, false, false);\n                    break;\n                case BaseActions.ActionBetMinus:\n                    this.changeBet(true, false, false);\n                    break;\n                case BaseActions.ActionBaseCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n            }\n        }\n\n        super.collect();\n\n        ModuleManager.disableGamble();\n        this.disable();\n        this.playCollectSound();\n\n        this._controller.collect();\n\n        LimitDialog.closeDialog();\n        GameManager.collect(GameModules.Base);\n\n        if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWin,\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\n            );\n        }\n        //this._unColectedWinDelay.start(75);\n    }\n\n    unColectedWinDelay(): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n    }\n\n    spin(): void {\n        this._machineStopped = false;\n\n        FreeRoundBonusExtended.disableUi();\n        if (FreeRoundBonusExtended.hasNewActiveOffer()) {\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                FreeRoundBonusExtended.enableUi();\n            }\n            return;\n        }\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            !(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                GameManager.canExit();\n                this.changeWinBox();\n            }\n\n            return;\n        }\n\n        if (BetHigherThanMinDialog.canOpenDialog()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            }\n            BetHigherThanMinDialog.openDialog();\n            return;\n        }\n\n        if (Paytable.shouldOpen(true, true)) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                Paytable.show();\n            }\n            return;\n        }\n\n        if (\n            !DataManager.Autoplay &&\n            !this._wasCalclulated &&\n            !DataManager.GameRoundClosed &&\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\n        ) {\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        } else {\n            this.changeWinBox();\n            if (!this._wasCalclulated) {\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n                }\n            }\n        }\n\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: balanceAfter,\n                inSpin: true,\n            });\n        }\n\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            this.autoplayStop();\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        }\n\n        if (!BalanceManager.hasCredit(false, true)) {\n            DataManager.Autoplay = false;\n            ModuleManager.disableGamble();\n            this.prepareNewGameRound();\n            return;\n        }\n\n        DataManager.Collectable = false;\n        ModuleManager.disableGamble();\n        this.actions.disableAllActions();\n\n        if (DataManager.Autoplay) {\n            if (\n                !DataManager.AutoplayStarted &&\n                GameManager.baseResponse != null &&\n                GameManager.baseResponse.totalWin != null &&\n                GameManager.baseResponse.totalWin > 0\n            ) {\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\n            }\n            DataManager.updateLossLimit();\n            this.actions.changeActionState(\n                BaseActions.ActionAutoplayStop,\n                AppContext.gameConfiguration.AutoplayModeEnabled,\n            );\n        }\n        HtmlController.dispatchUiAction(\"\");\n        HtmlController.updateActionElements(this.getAllActions());\n        this.playCollectSound();\n\n        DataManager.updateTotalGain(true);\n        BalanceManager.fixBalance();\n        if (\n            !DataManager.GameRoundClosed ||\n            (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n        }\n        this._controller.spin();\n\n        LimitDialog.closeDialog();\n\n        this._wasCalclulated = false;\n\n        Platforms.Platforms.roundStarted({\n            totalBet: BetManager.Bet,\n            freeRound: FreeRoundBonusExtended.inFrb,\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n        });\n        Platforms.Platforms.spinStarted();\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\n    }\n\n    stop(): void {\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n\n        Platforms.Platforms.autoplayStop();\n\n        if (this._machineStopped) {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusExtended.enableUi();\n                Platforms.Platforms.roundEnded();\n                if (FreeRoundBonusExtended.isLastFrb) {\n                    FreeRoundBonusExtended.endFreeRounds();\n                    ModuleManager.disableBase();\n                }\n            }\n        }\n\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\n    }\n\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        if (!DataManager.GameRoundClosed) {\n            this._unColectedWin = 0;\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            this.changeWinBox();\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBet(decrease, max, cycle);\n        this._paytable.updateDataValues();\n\n        if (BetManager.minBet) {\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n        } else if (BetManager.maxBet) {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        } else {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        }\n\n        if (AppContext.gameConfiguration.ShowMaxBetMessage && max) {\n            const message = AppContext.gameConfiguration.MaxButton\n                ? Languages.getRid(\"MAX_BET_MESSAGE_PL\")\n                : Languages.getRid(\"MAX_BET_MESSAGE\");\n            GameManager.openConfirmationDialog(Communication.Game.GameModules.Base, message);\n        }\n\n        this.updateReelsByBetChange();\n    }\n\n    updateReelsByBetChange(): void {\n        this._controller.updateReelsByBetChange();\n    }\n\n    beforeMachineStopped(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            this.autoplayStop();\n        }\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionSpinStop, false);\n    }\n\n    machineStopped(): void {\n        this._machineStopped = true;\n        Platforms.Platforms.spinEnded();\n\n        DataManager.stopAutoplayIfLossLimit();\n        DataManager.stopAutoplayIfWinLimit();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\n            FreeRoundBonusExtended.enableUi();\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n            if (FreeRoundBonusExtended.isLastFrb) {\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        this._unColectedWinDelay.stop();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            FreeRoundBonusExtended.disableUi();\n            this.disable();\n            return;\n        }\n\n        if (DataManager.Autoplay) {\n            if (DataManager.AutoplayCount === 0 + \"\") {\n                DataManager.Autoplay = false;\n            }\n        }\n\n        if (GameManager.baseResponse.totalWin === 0) {\n            this._wasCalclulated = true;\n            DataManager.Collectable = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        ModuleManager.enableGamble();\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        if (GameManager.baseResponse.totalWin > 0) {\n            this._afterWinDelay.start(30);\n        } else {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonusExtended.isLastFrb) {\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (\n                !DataManager.GameRoundClosed &&\n                GameManager.baseResponse.totalWin > 0 &&\n                GameManager.baseResponse.currentWin === 0\n            ) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\n        if (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                GameManager.canExit();\n            }\n        }\n    }\n\n    winCalculationFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n        }\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (\n            DataManager.GameRoundClosed &&\n            !(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            DataManager.updateDataElements();\n        }\n        ModuleManager.enableGamble();\n        DataManager.Collectable = true;\n        this.prepareNewGameRound();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (!ModuleManager.gambleEnabled()) {\n                FreeRoundBonusExtended.enableUi();\n            }\n            if (FreeRoundBonusExtended.isLastFrb) {\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n    }\n\n    allWinsFinished(): void {\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this.startFeatureAutoStart();\n            return;\n        }\n\n        this._afterWinDelay.stop();\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\n            this.autoplay();\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonusExtended.isLastFrb) {\n                this._controller.resetWinAnimator();\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this.startFeatureAutoStart();\n            return;\n        }\n\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n            }\n            return;\n        }\n    }\n\n    intro(long: boolean = false): void {\n        this._wasCalclulated = true;\n\n        //if(long) {\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n        //}\n\n        this.longIntro = long;\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n\n            DataManager.Collectable = true;\n        }\n\n        this._controller.intro(long);\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        let timer: number = 800;\n        if (!long) {\n            timer = 16;\n        }\n\n        setTimeout(() => {\n            if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.remove(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n            }\n        }, timer);\n    }\n\n    introFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded();\n        }\n        if (!ResponsibleDialog1.opened) {\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\n        }\n\n        if (this._autoplayAfterFeature) {\n            DataManager.Autoplay = this._autoplayAfterFeature;\n        }\n\n        ModuleManager.enableGamble();\n        this.prepareNewGameRound();\n\n        if (DataManager.Autoplay) {\n            this.autoplay();\n            this._autoplayAfterFeature = false;\n        }\n\n        if (\n            this.longIntro &&\n            DataManager.GameRoundClosed &&\n            (FreeRoundBonusExtended.id != null || FreeRoundBonusExtended.otherOfferes.length > 0)\n        ) {\n            FreeRoundBonusExtended.enableUi();\n            this.longIntro = false;\n        }\n\n        if (FreeRoundBonusExtended.isLastFrb && DataManager.GameRoundClosed) {\n            FreeRoundBonusExtended.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                ModuleManager.collect(GameModules.Base);\n            }\n        }\n    }\n\n    outro(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n            }\n        }\n\n        this._afterWinDelay.stop();\n        this._autoplayDelay.stop();\n\n        if (ModuleManager.freespinsActive()) {\n            this._autoplayAfterFeature = this._featureAutoStarted ? DataManager.Autoplay : false;\n        }\n\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\n        DataManager.Autoplay = false;\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (ModuleManager.freespinsActive()) {\n            DataManager.AutoplayAfterGamble = false;\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        }\n\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null) {\n                this._userControls.style.display = \"none\";\n            }\n\n            if (this._userControls_supreme != null) {\n                this._userControls_supreme.style.display = \"none\";\n            }\n\n            ModuleManager.introModule(GameModules.Freespins);\n        } else {\n            ModuleManager.introModule(GameModules.Gamble);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (this.prepareJackpotMiniGame()) {\n            return;\n        }\n\n        if (ResponsibleDialog1.opened) {\n            return;\n        }\n\n        BetHigherThanMinDialog.openDialog();\n        Paytable.openAtStart(true);\n\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\n            return;\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [BaseActions.ActionAutoplay]:\n                        (DataManager.GameRoundClosed ||\n                            (FreeRoundBonusExtended.inFrb &&\n                                FreeRoundBonusExtended.winPayMethod === \"cumulative\" &&\n                                !FreeRoundBonusExtended.isLastFrb)) &&\n                        AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [BaseActions.ActionAutoplayStop]: false,\n                    [BaseActions.ActionBaseCollect]:\n                        FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\"\n                            ? false\n                            : !DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                    [BaseActions.ActionMaxBet]:\n                        !ModuleManager.gambleEnabled() &&\n                        !FreeRoundBonusExtended.inFrb &&\n                        AppContext.gameConfiguration.MaxBetEnabled,\n                    [BaseActions.ActionSpin]: !FreeRoundBonusExtended.isLastFrb,\n                    [BaseActions.ActionSpinStop]: false,\n                });\n\n                if (DataManager.GameRoundClosed) {\n                    Platforms.Platforms.roundInit();\n                }\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private prepareJackpotMiniGame(): boolean {\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonusExtended.inFrb) {\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\n                DataManager.Autoplay = false;\n                this.resetWinAnimator();\n                this.disable();\n                FreeRoundBonusExtended.disableUi();\n                Jackpot.startMiniGame();\n\n                return true;\n            } else {\n                const self = this;\n\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\n                if (this._wasCalclulated) {\n                    Jackpot.initMiniGame(true, () => {\n                        self.resetWinAnimator();\n                        self.disable();\n                        DataManager.Autoplay = false;\n                        FreeRoundBonusExtended.disableUi();\n                    });\n                }\n\n                //in case we have nogamble and pb within or after gr, check limit\n                if (DataManager.GameLimit) {\n                    DataManager.Autoplay = false;\n                    this.limit();\n                }\n\n                if (Jackpot.waitForMiniGameInitialization()) {\n                    //in case we have limit, disable all actions during animation and wait for minigame\n                    this.actions.disableAllActions();\n                    HtmlController.updateActionElements(this.getAllActions());\n\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private checkJackpotMiniGame(): boolean {\n        if (!Jackpot.hasMiniGame() || FreeRoundBonusExtended.inFrb) {\n            return false;\n        }\n\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox();\n                this._wasCalclulated = true;\n\n                if (!DataManager.GameRoundClosed) {\n                    this.collect(); //collect will call prepareNewGameRound\n                } else {\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\n                    this.playCollectSound();\n                    DataManager.updateDataElements();\n                    this.prepareNewGameRound();\n                }\n            } else {\n                this.prepareNewGameRound();\n            }\n\n            return true;\n        } else {\n            Jackpot.initMiniGame(false, null);\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\n\n            return false;\n        }\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        if (DataManager.GameRoundClosed) {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: AppContext.gameConfiguration.AutoplayModeEnabled,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: false,\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                [BaseActions.ActionMaxBet]: !FreeRoundBonusExtended.inFrb && AppContext.gameConfiguration.MaxBetEnabled,\n                [BaseActions.ActionSpin]: true,\n                [BaseActions.ActionSpinStop]: false,\n            });\n        } else {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: false,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: true,\n                [BaseActions.ActionBetPlus]: false,\n                [BaseActions.ActionBetMinus]: false,\n                [BaseActions.ActionMaxBet]: false,\n                [BaseActions.ActionSpin]: false,\n                [BaseActions.ActionSpinStop]: false,\n            });\n        }\n\n        this._controller.limit();\n    }\n\n    disable(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        FreeRoundBonusIcon.disableActiveIcon();\n\n        if (!ModuleManager.freespinsEnabled()) {\n            this._controller.disableBase();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    /**\n     * Set _autoplayAfterFeature.\n     * @param tf True / False\n     */\n    public setAutoplayAfterFeature(tf: boolean): void {\n        this._autoplayAfterFeature = tf;\n    }\n\n    /**\n     * Start feature if enabled.\n     */\n    private featureAutoStartDelayed(): void {\n        this._featureAutoStartTimer.stop();\n\n        if (ModuleManager.freespinsEnabled()) {\n            this._featureAutoStarted = true;\n            ModuleManager.startFreespins();\n        }\n    }\n\n    /**\n     * Auto start feature.\n     * Duration is set to preDuration + duration from configuration.\n     * @param {number} preDuration\n     */\n    protected startFeatureAutoStart(preDuration: number = 0): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoStartTimer.start(preDuration + AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n\n    resetWinAnimator(): void {\n        this._controller.resetWinAnimator();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopBaseUserControls.ts\n **/","export class GameActions {\n    // space bar\n    static ActionSpinOrStop: string = \"SPIN_OR_STOP\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GameActions.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Controller } from \"../Controller\";\nimport { BaseModel } from \"./BaseModel\";\nimport { BaseView } from \"./BaseView\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { FreespinsController } from \"../Freespins/FreespinsController\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class BaseController extends Controller {\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n\n    public static readonly BeforeMachineStopped: string = \"eventBeforeMachineStopped\";\n\n    protected _view: BaseView;\n    protected _model: BaseModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof BaseView) {\n            this._view = view;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR view is not instance of BaseView\");\n            }\n        }\n\n        this._model = new BaseModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    disableLogo(): void {\n        this._view.disableLogo();\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    collect(): void {\n        this._view.collect();\n    }\n\n    spin(): void {\n        this._model.spin();\n        this._view.spin();\n    }\n\n    stop(): void {\n        this._view.stop();\n    }\n\n    spinReceived(): void {\n        this._view.spinReceived();\n        this.emit(BaseController.SpinReceived);\n    }\n\n    beforeMachineStopped(): void {\n        this.emit(BaseController.BeforeMachineStopped);\n    }\n\n    machineStopped(): void {\n        this.emit(BaseController.MachineStopped);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(BaseController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(BaseController.AllWinsFinished);\n    }\n\n    resetWinAnimator(): void {\n        this._view.resetWinAnimator();\n    }\n\n    intro(long: boolean = false): void {\n        this._view.intro(long);\n    }\n\n    introFinished(): void {\n        this.emit(BaseController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(BaseController.OutroFinished);\n    }\n\n    selectPayline(): void {\n        this._view.selectPayline();\n    }\n\n    disableBase(): void {\n        this._view.disableBase();\n    }\n\n    toggleSounds(enable: boolean): void {\n        this._view.toggleSounds(enable);\n    }\n\n    limit(): void {}\n\n    updateReelsByBetChange(): void {\n        this._view.updateReelsByBetChange();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseController.ts\n **/","import { engineComponent, Utils } from \"neo-common\";\nimport { BaseController } from \"./BaseController\";\nimport { Paylines } from \"../Paylines\";\nimport { Symbols } from \"../Symbols\";\nimport { WinAnimator } from \"../WinAnimator\";\nimport { Machine } from \"../Machine\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { WinAnimator2 } from \"../../CustomComponents/WinAnimator2\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\nimport { FreespinsView } from \"../Freespins/FreespinsView\";\nimport { BaseModel } from \"./BaseModel\";\nimport { SceneHolderElement } from \"../../CustomComponents/SceneHolderElement\";\nimport { LayoutManager } from \"../../Managers/LayoutManager\";\nimport { LayoutContainerElement } from \"../../CustomComponents/LayoutContainerElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseView extends LayoutContainerElement {\n    public static LayoutManager: LayoutManager;\n\n    public static Transition: SwitchElement;\n    public static FsMessageBox: SwitchElement;\n    public static Logo: SwitchElement;\n\n    private _wasFinished: boolean = false;\n    private _controller: BaseController;\n    private _introDelay: FrameTimerEventEmitter;\n    private _outroDelay: FrameTimerEventEmitter;\n    private _paylines: Paylines;\n    private _symbols: Symbols;\n    private _machine: Machine;\n    private _winAnimator: WinAnimator2;\n\n    private _wildDelay: FrameTimerEventEmitter;\n    private _devilDelay: FrameTimerEventEmitter;\n    private _symbolMoEDelay: FrameTimerEventEmitter;\n    private _symbolBonusDelay: FrameTimerEventEmitter;\n    private _gambleDelay: FrameTimerEventEmitter;\n\n    private _gambleTransition: SwitchElement;\n    private _gambleSceneHolder: SceneHolderElement;\n    private _inGamble: boolean;\n\n    protected currentBet: number = -1;\n\n    constructor() {\n        super();\n        this._introDelay = CreateFrameTimer(\"introDelay\");\n        this._introDelay.on(FrameTimerEvents.Complete, this.introFinished.bind(this));\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\n        this._wildDelay = CreateFrameTimer(\"wildDelay\");\n        this._wildDelay.on(FrameTimerEvents.Complete, this.machineStoppedDelayed.bind(this));\n        this._devilDelay = CreateFrameTimer(\"devilDelay\");\n        this._devilDelay.on(FrameTimerEvents.Complete, this.machineStoppedDelayed1.bind(this));\n        this._symbolMoEDelay = CreateFrameTimer(\"symbolMoEDelay\");\n        this._symbolMoEDelay.on(FrameTimerEvents.Complete, this.symbolMoEDelay.bind(this));\n        this._symbolBonusDelay = CreateFrameTimer(\"symbolBonusDelay\");\n        this._symbolBonusDelay.on(FrameTimerEvents.Complete, this.symbolBonusDelay.bind(this));\n        this._gambleDelay = CreateFrameTimer(\"gambleDelay\");\n        this._gambleDelay.on(FrameTimerEvents.Complete, this.gambleOutro.bind(this));\n    }\n\n    public create(node: Element): void {\n        super.create(node);\n\n        BaseView.LayoutManager = new LayoutManager();\n\n        if (this.childs[\"Symbols\"] != null) {\n            this._symbols = this.childs[\"Symbols\"];\n            this.removeChild(this._symbols);\n        }\n        if (this.childs[\"Paylines\"] != null) this._paylines = this.childs[\"Paylines\"];\n        if (this.childs[\"Machine\"] != null) this._machine = this.childs[\"Machine\"];\n        if (this.childs[\"WinAnimator\"] != null) this._winAnimator = this.childs[\"WinAnimator\"];\n\n        if (this.childs[\"FsMessageBox\"] != null) BaseView.FsMessageBox = this.childs[\"FsMessageBox\"];\n        if (this.childs[\"Logo\"] != null) BaseView.Logo = this.childs[\"Logo\"];\n        if (this.childs[\"Transition\"] != null) BaseView.Transition = this.childs[\"Transition\"];\n\n        if (this.childs[\"GambleTransition\"] != null) {\n            this._gambleTransition = this.childs[\"GambleTransition\"];\n\n            if (this._gambleTransition != null) {\n                this._gambleSceneHolder = <SceneHolderElement>this._gambleTransition.getChildElementByName(\"Scene\");\n            }\n        }\n\n        this.setupGambleSceneElement();\n        this.visible = false;\n    }\n\n    public initReceived(controller: BaseController): void {\n        this._controller = controller;\n\n        if (this._symbols != null) {\n            if (this._machine != null) {\n                if (GameManager.baseResponse != null) {\n                    if (GameManager.baseResponse.initData != null && GameManager.baseResponse.initData.reels != null) {\n                        this._machine.on(Machine.ReelStopped, this.onReelStopped.bind(this));\n                        this._machine.on(Machine.MachineStopped, this.machineStopped.bind(this));\n                        this._machine.initialize(\n                            this._symbols,\n                            GameManager.baseResponse.initData.reels,\n                            this.childs[\"Teasing\"],\n                            this.childs[\"TeasingTop\"],\n                            false,\n                            this.childs[\"Background\"],\n                            this.childs[\"SunContainer\"],\n                        );\n                    }\n\n                    if (\n                        GameManager.baseResponse.screen != null &&\n                        GameManager.baseResponse.screen.reels != null &&\n                        GameManager.baseResponse.screen.reels.length !== 0\n                    ) {\n                        if (this._winAnimator != null) {\n                            this._winAnimator.on(\n                                WinAnimator.FinishWinCalculation,\n                                this.finishWinCalculation.bind(this),\n                            );\n                            this._winAnimator.on(WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\n                            this._winAnimator.initialize(\n                                this._symbols,\n                                this._paylines,\n                                this.childs[\"NoWinContainer\"],\n                                this.childs[\"WinContainer\"],\n                                this.childs[\"WinFrameContainer\"],\n                                this.childs[\"CycleContainer\"],\n                                this.childs[\"PaylineNumbers\"],\n                                null,\n                                this.childs[\"BonusTeasingContainer\"],\n                                this.childs[\"HWContainer\"],\n                            );\n                            this._winAnimator.showSymbols(GameManager.baseResponse.screen.reels);\n                            if (BaseModel.LastScreen != null && BaseModel.LastScreen[\"reels\"] !== null)\n                                this._winAnimator.createSuns(BaseModel.LastScreen[\"reels\"]);\n                            this._winAnimator.setupPaylinesContainer(\n                                this.childs[\"PaylinesContainerBottom\"],\n                                this.childs[\"PaylinesContainerTop\"],\n                                this.childs[\"PaylineNumbersRight\"],\n                                this.childs[\"PaylineNumbersMiddle\"],\n                                null,\n                            );\n                        }\n                        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reels in response\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no base reponse\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no machine\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n        this.visible = false;\n\n        if (ModuleManager.gambleActive()) {\n            this.visible = true;\n            this._inGamble = true;\n            this._gambleTransition.goToCase(\"HIDE_GAMBLE_INIT\");\n        }\n    }\n\n    public spinReceived(): void {\n        DataManager.updateCustomBetsData();\n\n        if (GameManager.baseResponse != null && GameManager.baseResponse.screen !== null) {\n            this._winAnimator.spinReceived(GameManager.baseResponse.screen.reels);\n        }\n        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\n        this._machine.spinStop(null, false, true);\n    }\n\n    public spin(): void {\n        if (BaseModel.LastScreen != null && BaseModel.LastScreen[\"reels\"] != null) {\n            this._winAnimator.spin(BaseModel.LastScreen[\"reels\"]);\n        } else {\n            this._winAnimator.spin(null);\n        }\n        PlayList.stop(\"SND_BaseRecapLoop\");\n        PlayList.loop(\"SND_BaseLoop\");\n        PlayList.restoreVolume(\"SND_BaseLoop\");\n        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\n    }\n\n    public stop(): void {\n        this._machine.spinStop(null, true);\n    }\n\n    public collect(): void {\n        PlayList.stop(\"SND_BaseRecapLoop\");\n        PlayList.loop(\"SND_BaseLoop\");\n        PlayList.restoreVolume(\"SND_BaseLoop\");\n        this._winAnimator.reset(true);\n    }\n\n    public initIntro(): void {\n        this.visible = true;\n        if (GameManager.gameResponse.totalWin > 0) {\n            if (ModuleManager.freespinsEnabled()) {\n                PlayList.loop(\"SND_FSWait\");\n            } else if (GameManager.baseResponse.currentWin == 0) {\n                //init state after fs\n                PlayList.loop(\"SND_BaseRecapLoop\");\n            }\n        } else {\n            PlayList.loop(\"SND_BaseLoop\");\n            PlayList.restoreVolume(\"SND_BaseLoop\");\n        }\n        this._winAnimator.showInitWins(GameManager.baseResponse.wins, GameManager.baseResponse.currentWin);\n    }\n\n    public intro(long: boolean = false): void {\n        this.visible = true;\n        if (GameManager.gameResponse.totalWin > 0) {\n            PlayList.setVolume(\"SND_BaseLoop\", 0);\n        } else {\n            PlayList.stop(\"SND_BaseRecapLoop\");\n            PlayList.loop(\"SND_BaseLoop\");\n            PlayList.restoreVolume(\"SND_BaseLoop\");\n        }\n        if (this.childs[\"Background\"] != null) {\n            this.childs[\"Background\"].goToCase(\"NORMAL\");\n        }\n\n        if (this._inGamble && this._gambleTransition) {\n            this._gambleTransition.goToCase(\"SHOW\");\n        }\n\n        if (long) {\n            this.visible = true;\n            this._winAnimator.reset(false);\n            this._winAnimator.showSymbols(BaseModel.LastScreen[\"reels\"]);\n            if (BaseModel.LastScreen != null && BaseModel.LastScreen[\"reels\"] !== null)\n                this._winAnimator.createSuns(BaseModel.LastScreen[\"reels\"]);\n            if (BaseView.Transition != null) {\n                this.addChild(BaseView.Transition);\n                BaseView.Transition.goToCase(\"END\");\n            }\n            this._introDelay.start(60);\n        } else {\n            this._introDelay.start(30);\n        }\n    }\n\n    public outro(): void {\n        PlayList.stop(\"SND_FSWait\");\n        if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n\n        let wasFinished: boolean = this._wasFinished;\n        let inHighWins: boolean = this._winAnimator.reset(true);\n\n        if (ModuleManager.freespinsActive()) {\n            if (BaseView.Transition != null) {\n                this.addChild(BaseView.Transition);\n                BaseView.Transition.goToCase(\"START\");\n            }\n            PlayList.play(\"SND_FSTrans\");\n            AmbientBackground.changeAmbientBackground(\"fs\", 1500, 500);\n            this._outroDelay.start(30);\n\n            PlayList.setVolume(\"SND_BaseLoop\", 0);\n            PlayList.stop(\"SND_BaseRecapLoop\");\n        } else {\n            if (wasFinished) {\n                this._gambleDelay.start(30);\n            } else {\n                if (inHighWins) {\n                    this._gambleDelay.start(90);\n                } else {\n                    this._gambleDelay.start(60);\n                }\n            }\n        }\n    }\n\n    private outroFinished(): void {\n        this._controller.outroFinished();\n        this._winAnimator.resetTimer();\n        FreespinsView.FsMessageBox.goToCase(\"EMPTY\");\n\n        if (ModuleManager.freespinsActive()) {\n            this.visible = false;\n        } else {\n            //PlayList.play('SND_GambleTransition');\n        }\n    }\n\n    private gambleOutro(): void {\n        if (this._gambleTransition) {\n            this._inGamble = true;\n            this._gambleTransition.goToCase(\"HIDE_GAMBLE\");\n        }\n        PlayList.setVolume(\"SND_BaseLoop\", 0);\n        PlayList.stop(\"SND_BaseRecapLoop\");\n        PlayList.play(\"SND_GambleTransition\");\n        this._outroDelay.start(30);\n    }\n\n    public disableLogo(): void {\n        if (this.childs[\"Logo\"] != null) {\n            this.removeChild(this.childs[\"Logo\"]);\n        }\n    }\n\n    public resetWinAnimator(): void {\n        this._winAnimator.reset(true);\n    }\n\n    public disableBase(): void {\n        this._winAnimator.resetTimer();\n    }\n\n    public selectPayline(): void {}\n\n    public toggleSounds(enable: boolean): void {\n        if (enable) {\n            PlayList.loop(\"SND_BaseLoop\");\n            PlayList.restoreVolume(\"SND_BaseLoop\");\n        } else {\n            PlayList.setVolume(\"SND_BaseLoop\", 0);\n            PlayList.stop(\"SND_BaseRecapLoop\");\n        }\n    }\n\n    private onReelStopped(): void {\n        this._winAnimator.onReelStopped(GameManager.baseResponse.screen.reels, this._machine.actualReelStopped);\n    }\n\n    private machineStopped(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            if (this.childs[\"Background\"] != null) {\n                this.childs[\"Background\"].goToCase(\"TEASING\");\n            }\n        } else {\n            if (this.childs[\"Background\"] != null) {\n                this.childs[\"Background\"].goToCase(\"NORMAL\");\n            }\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            this._controller.beforeMachineStopped();\n            this._symbolBonusDelay.start(50);\n        } else {\n            this.symbolBonusDelay();\n        }\n    }\n\n    private symbolBonusDelay(): void {\n        this._symbolBonusDelay.stop();\n        if (this._winAnimator.isMoESymbol(GameManager.baseResponse.screen.reels)) {\n            this._controller.beforeMachineStopped();\n            this._symbolMoEDelay.start(35);\n        } else {\n            this.symbolMoEDelay();\n        }\n    }\n\n    private symbolMoEDelay(): void {\n        this._symbolMoEDelay.stop();\n        if (this._winAnimator.machineStopped(GameManager.baseResponse.screen.reels)) {\n            this._controller.beforeMachineStopped();\n            this._wildDelay.start(40);\n        } else {\n            this.machineStoppedDelayed();\n        }\n    }\n\n    private machineStoppedDelayed(): void {\n        this.machineStoppedDelayed1();\n    }\n\n    private machineStoppedDelayed1(): void {\n        this._wasFinished = false;\n        this._controller.machineStopped();\n        if (this._winAnimator.showWins(GameManager.baseResponse.wins, GameManager.baseResponse.currentWin)) {\n            // PlayList.stop('SND_BaseLoop');\n        }\n    }\n\n    private finishWinCalculation(): void {\n        this._wasFinished = true;\n        this._controller.winCalculationFinished();\n    }\n\n    private finishWinAnimator(): void {\n        if (!DataManager.Autoplay || ModuleManager.freespinsEnabled()) {\n            PlayList.setVolume(\"SND_BaseLoop\", 0);\n\n            if (ModuleManager.freespinsEnabled()) {\n                PlayList.loop(\"SND_FSWait\");\n            }\n        }\n        this._controller.allWinsFinished();\n    }\n\n    private introFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            PlayList.loop(\"SND_BaseLoop\");\n            PlayList.restoreVolume(\"SND_BaseLoop\");\n        } else {\n            PlayList.loop(\"SND_BaseRecapLoop\");\n        }\n        if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"LOGO\");\n        this._winAnimator.reset(true);\n        this._controller.introFinished();\n    }\n\n    updateReelsByBetChange(): void {\n        const customBetData = DataManager.getCustomBetDataForCurrentBetAmount();\n\n        if (!Utils.isNullOrUndefined(customBetData)) {\n            if (this.currentBet != customBetData.betAmount) {\n                this.currentBet = customBetData.betAmount;\n\n                if (!Utils.isNullOrUndefined(customBetData.reelsData)) {\n                    this._winAnimator.showSymbols(customBetData.reelsData);\n                    this._winAnimator.clearTopSuns();\n\n                    if (BaseModel.LastScreen != null) {\n                        BaseModel.LastScreen[\"reels\"] = customBetData.reelsData;\n                        this._winAnimator.createSuns(BaseModel.LastScreen[\"reels\"]);\n                    }\n                }\n            }\n        }\n    }\n\n    private setupGambleSceneElement(): void {\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"ReelsBottom\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"ReelsBottom\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"Teasing\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"Teasing\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"TeasingTop\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"TeasingTop\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"ReelsTop\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"ReelsTop\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"NoWinContainer\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"NoWinContainer\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"CycleContainer\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"CycleContainer\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PaylineNumbers\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PaylineNumbers\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PaylineNumbersRight\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PaylineNumbersRight\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"Paylines\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"Paylines\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PaylinesContainerBottom\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PaylinesContainerBottom\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PalineTable\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PalineTable\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PaylineNumbersMiddle\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PaylineNumbersMiddle\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"WinFrameContainer\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"WinFrameContainer\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"WinContainer\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"WinContainer\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"SunContainer\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"SunContainer\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"PaylinesContainerTop\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"PaylinesContainerTop\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"WinAnimator\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"WinAnimator\"]),\n        });\n        this._gambleSceneHolder.addElement({\n            element: this.childs[\"FsMessageBox\"],\n            parent: this,\n            index: this.getChildIndex(this.childs[\"FsMessageBox\"]),\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseView.ts\n **/","import { ArrayUtils, engineComponent, NumberUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Payline } from \"./Payline\";\nimport { Paylines } from \"./Paylines\";\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\nimport { Symbol } from \"./Symbol\";\nimport { Symbols } from \"./Symbols\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { SoundManager } from \"../Components/Managers/SoundManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { Languages } from \"../Utils/Languages\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { FreespinsModel } from \"./Freespins/FreespinsModel\";\nimport { LayoutContainerElement } from \"../CustomComponents/LayoutContainerElement\";\n\n/**\n * WinAnimator uses paylines and symbols to create presentation of wins to user.\n * Also handle high wins animation for presentation special screens to user when win is bigger than some defined values.\n * @class WinAnimator\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class WinAnimator extends LayoutContainerElement {\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    public static readonly FinishWinCalculation: string = \"eventFinishWinCalculation\";\n\n    public static readonly FinishWinAnimator: string = \"eventFinishWinAnimator\";\n\n    //******************************************************************************************************************\n    //  TIMER STATUSES\n    //******************************************************************************************************************\n\n    protected static readonly Idle: string = \"idle\";\n\n    protected static readonly CycleWins: string = \"cycleWins\";\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected playList: string;\n\n    protected reelCount: number;\n    protected reelX: Array<number>;\n    protected reelY: Array<number>;\n\n    protected symbolCount: number;\n    protected symbolWidth: number;\n    protected symbolHeight: number;\n\n    protected timerStatus: string;\n    protected timer: FrameTimerEventEmitter;\n\n    protected symbols: Symbols;\n    protected noWinSymbolsContainer: ContainerElement;\n    protected symbolsContainer: ContainerElement;\n    protected winFrameContainer: ContainerElement;\n    protected cycleContainer: ContainerElement;\n    protected sunContainer: ContainerElement;\n    protected paylineNumbers: SwitchElement;\n    public currentSymbols: Array<Array<Symbol>>;\n    public currentSuns: Array<Array<Symbol>>;\n    public winFrames: Array<Array<Symbol>>;\n\n    protected paylines: Paylines;\n\n    protected multipliers: Array<number>;\n    protected currentMultiplierIndex: number;\n\n    protected animationNames: Array<string>;\n    protected animationsContainer: ContainerElement;\n    protected animations: Array<TimelineElement>;\n    protected currentAnimationIndex: number;\n    protected currentAnimationFinished: boolean;\n    protected value: TimelineElement;\n\n    protected currentReels: Array<Communication.Game.IReel>;\n    protected currentWins: Array<Communication.Game.IWin>;\n    protected currentWin: number;\n\n    protected currentCycle: number;\n    protected cycleDate: number;\n    protected cycleStep: number;\n\n    protected _currentWinScatterSymbols: Array<Symbol>;\n\n    //******************************************************************************************************************\n    //  CREATE, INITIALIZE\n    //******************************************************************************************************************\n\n    public create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(WinAnimatorAttributes.SOUNDS)) {\n            if (SoundManager.PlayLists[node.getAttribute(WinAnimatorAttributes.SOUNDS)] != null) {\n                this.playList = node.getAttribute(WinAnimatorAttributes.SOUNDS);\n            }\n        }\n\n        if (node.hasAttribute(WinAnimatorAttributes.CONFIGS)) {\n            let configs: Array<string> = node.getAttribute(WinAnimatorAttributes.CONFIGS).split(\";\");\n\n            for (let i = 0; i < configs.length; i++) {\n                this.configure(Configuration.Configurations[configs[i]]);\n            }\n        }\n    }\n\n    protected configure(node: Element): void {\n        if (node.hasAttribute(\"ReelCount\")) {\n            this.reelCount = parseInt(node.getAttribute(\"ReelCount\"));\n        }\n\n        if (node.hasAttribute(\"ReelX\")) {\n            this.reelX = ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\n        }\n\n        if (node.hasAttribute(\"ReelY\")) {\n            this.reelY = ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\n        }\n\n        if (node.hasAttribute(\"VisibleSymbolCount\")) {\n            this.symbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\n        }\n\n        if (node.hasAttribute(\"SymbolWidth\")) {\n            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\n        }\n\n        if (node.hasAttribute(\"SymbolHeight\")) {\n            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\n        }\n\n        if (node.hasAttribute(\"WinsMultipliers\")) {\n            this.multipliers = ArrayUtils.numberArray(node.getAttribute(\"WinsMultipliers\"));\n        }\n\n        if (node.hasAttribute(\"WinsAnimations\")) {\n            this.animationNames = node.getAttribute(\"WinsAnimations\").split(\";\");\n        }\n    }\n\n    public initialize(\n        symbols: Symbols,\n        paylines?: Paylines,\n        noWinSymbolsContainer?: ContainerElement,\n        symbolsContainer?: ContainerElement,\n        winFrameContainer?: ContainerElement,\n        cycleContainer?: ContainerElement,\n        paylineNumbers?: SwitchElement,\n        sunContainer?: ContainerElement,\n        hwContainer?: ContainerElement,\n    ): void {\n        if (paylineNumbers != null) {\n            this.paylineNumbers = paylineNumbers;\n        }\n        this.createTimer();\n        this.createSymbols(\n            symbols,\n            noWinSymbolsContainer,\n            symbolsContainer,\n            winFrameContainer,\n            cycleContainer,\n            sunContainer,\n        );\n        this.createPaylines(paylines);\n        this.createAnimations(hwContainer);\n    }\n\n    //******************************************************************************************************************\n    //  ON REEL STOPPED, SHOW SYMBOLS\n    //******************************************************************************************************************\n\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number): void {\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n            this.removeCurrentSymbol(reelIndex, i);\n        }\n\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n            this.addCurrentSymbol(reelIndex, i);\n        }\n    }\n\n    public showSymbols(reelsData: Array<Communication.Game.IReel>): void {\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData.length; i++) {\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\n                this.removeCurrentSymbol(i, j);\n            }\n        }\n\n        for (let i = 0; i < reelsData.length; i++) {\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\n                if (!this.addTransformSymbol(i, j)) {\n                    this.addCurrentSymbol(i, j);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SHOW WINS\n    //******************************************************************************************************************\n\n    public showWins(wins: Array<Communication.Game.IWin>, win: number): boolean {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this.resetAnimations();\n\n        if (wins != null && wins.length > 0) {\n            this.currentMultiplierIndex = 0;\n\n            for (let i = 0; i < this.multipliers.length; i++) {\n                if (this.currentWin / BetManager.Bet >= this.multipliers[i]) {\n                    this.currentMultiplierIndex = i;\n                }\n            }\n\n            if (!this.showCustomWin()) {\n                this.showFirstWins();\n            }\n\n            return this.currentMultiplierIndex >= 3;\n        } else {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n\n            return false;\n        }\n    }\n\n    protected showCustomWin(): boolean {\n        return false;\n    }\n\n    protected showFirstWins(): void {\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            this.winPaylineGoToCase(i, Payline.CaseFirstWin);\n        }\n\n        this.startAnimation();\n    }\n\n    protected finishFirstWins(): void {\n        this.emit(WinAnimator.FinishWinAnimator);\n\n        this.currentCycle = 0;\n\n        this.cycleWins(true);\n    }\n\n    //******************************************************************************************************************\n    //  SHOW INIT WINS\n    //******************************************************************************************************************\n\n    public showInitWins(wins: Array<Communication.Game.IWin>, win: number): void {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this.resetAnimations();\n\n        if (wins != null && wins.length > 0) {\n            this.showCustomInitWin();\n            this.showFirstInitWins();\n            this.finishFirstInitWins();\n        } else {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n        }\n    }\n\n    protected showCustomInitWin(): void {}\n\n    protected showFirstInitWins(): void {\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            this.winPaylineGoToCase(i, Payline.CaseFirstWin);\n        }\n    }\n\n    protected finishFirstInitWins(): void {\n        this.currentCycle = 0;\n\n        this.cycleWins(true);\n    }\n\n    //******************************************************************************************************************\n    //  CYCLE WINS\n    //******************************************************************************************************************\n\n    protected cycleWins(isFirst: boolean = false): void {\n        if (this.currentWins == null) {\n            return;\n        }\n\n        if (isFirst) {\n            this.cycleStep = 0;\n        }\n\n        PlayList.play(\"SND_BaseRecapWinline\");\n\n        if (!ModuleManager.freespinsEnabled() && !ModuleManager.freespinsActive() && this.cycleStep === 0) {\n            this.cycleStep++;\n            PlayList.stop(\"SND_BaseRecapLoop\");\n            PlayList.loop(\"SND_BaseRecapLoop\");\n        }\n\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        this.winSymbolsGoToCase(this.currentCycle, Symbol.CaseCycle, true);\n        this.winPaylineGoToCase(this.currentCycle, Payline.CaseWin);\n\n        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\n\n        if (this.currentWins.length === 1) {\n            return;\n        }\n        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelayWithCorrection(isFirst));\n    }\n\n    protected getCycleWinsDelayWithCorrection(isFirst: boolean): number {\n        let winDelay = (this.getCycleWinsDelay() / 60) * 1000; // in ms\n        let diff = (Date.now() - this.cycleDate) % winDelay;\n        if (diff > 100 || isFirst) {\n            diff = 0;\n            this.cycleDate = Date.now();\n        }\n\n        return (winDelay - diff) / 16.7;\n    }\n\n    protected getCycleWinsDelay(): number {\n        return 90;\n    }\n\n    //******************************************************************************************************************\n    //  RESET\n    //******************************************************************************************************************\n\n    public reset(showLastSymbols: boolean): boolean {\n        this.stopTimer();\n\n        this.allSymbolsGoToCase(showLastSymbols ? Symbol.CaseNormal : Symbol.CaseEmpty, false);\n        this.allPaylinesGoToCase(Payline.CaseNormal);\n\n        this.paylines.showPaylinesLabel();\n\n        if (showLastSymbols) {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n        }\n\n        this.value.stop();\n        this.value.visible = false;\n\n        let lastMultiplierIndex = this.currentMultiplierIndex;\n        this.currentMultiplierIndex = -1;\n\n        if (this.currentAnimationIndex != null) {\n            if (this.currentAnimationFinished) {\n                this.resetAnimations();\n\n                this.currentWins = null;\n                this.currentWin = null;\n                return false;\n            } else {\n                this.stopAnimation();\n\n                this.currentWins = null;\n                this.currentWin = null;\n                return lastMultiplierIndex >= 3;\n            }\n        } else {\n            this.currentWins = null;\n            this.currentWin = null;\n            return lastMultiplierIndex >= 3;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  TIMER\n    //******************************************************************************************************************\n\n    protected createTimer(): void {\n        this.timerStatus = \"\";\n\n        this.timer = CreateFrameTimer(\"timer\");\n        this.timer.on(FrameTimerEvents.Complete, this.onTimerComplete.bind(this));\n    }\n\n    protected startTimer(status: string, duration: number): void {\n        this.timerStatus = status;\n\n        this.timer.start(duration);\n    }\n\n    protected stopTimer(): void {\n        if (this.timer != null) {\n            this.timer.stop();\n        }\n    }\n\n    public resetTimer(): void {\n        this.stopTimer();\n\n        if (!this.currentAnimationFinished) {\n            this.stopAnimation();\n        }\n    }\n\n    protected onTimerComplete(): void {\n        this.timer.stop();\n\n        switch (this.timerStatus) {\n            case WinAnimator.Idle:\n                this.idle();\n                break;\n            case WinAnimator.CycleWins:\n                this.cycleWins();\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected createSymbols(\n        symbols: Symbols,\n        noWinSymbolsContainer: ContainerElement,\n        symbolsContainer: ContainerElement,\n        winFrameContainer: ContainerElement,\n        cycleContainer: ContainerElement,\n        sunContainer: ContainerElement,\n    ): void {\n        this.symbols = symbols;\n\n        if (noWinSymbolsContainer != null) {\n            this.noWinSymbolsContainer = noWinSymbolsContainer;\n        } else {\n            this.noWinSymbolsContainer = new ContainerElement();\n            this.noWinSymbolsContainer.name = \"NoWinSymbols\";\n\n            this.addChild(this.noWinSymbolsContainer);\n        }\n\n        if (cycleContainer != null) {\n            this.cycleContainer = cycleContainer;\n        } else {\n            this.cycleContainer = new ContainerElement();\n            this.cycleContainer.name = \"CycleFrames\";\n\n            this.addChild(this.cycleContainer);\n        }\n\n        if (winFrameContainer != null) {\n            this.winFrameContainer = winFrameContainer;\n        } else {\n            this.winFrameContainer = new ContainerElement();\n            this.winFrameContainer.name = \"WinFrames\";\n\n            this.addChild(this.winFrameContainer);\n        }\n\n        if (symbolsContainer != null) {\n            this.symbolsContainer = symbolsContainer;\n        } else {\n            this.symbolsContainer = new ContainerElement();\n            this.symbolsContainer.name = \"Symbols\";\n\n            this.addChild(this.symbolsContainer);\n        }\n\n        if (sunContainer != null) {\n            this.sunContainer = sunContainer;\n        } else {\n            this.sunContainer = new ContainerElement();\n            this.sunContainer.name = \"Suns\";\n\n            this.addChild(this.sunContainer);\n        }\n\n        this.currentSymbols = [];\n        this.currentSuns = [];\n        this.winFrames = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            this.currentSymbols.push([]);\n            this.winFrames.push([]);\n\n            for (let j = 0; j < this.symbolCount; j++) {\n                this.currentSymbols[i].push(null);\n                const symbol = this.symbols.getSymbol(11, Symbol.CaseEmpty);\n                symbol.position.x = this.reelX[i] - symbol.offsetX;\n                symbol.position.y = this.reelY[i] + this.symbolHeight * j - symbol.offsetY;\n\n                this.winFrames[i].push(symbol);\n                this.winFrameContainer.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.reelCount; i++) {\n            this.currentSuns.push([]);\n            for (let j = 0; j < this.symbolCount + 1; j++) {\n                this.currentSuns[i].push(null);\n            }\n        }\n    }\n\n    protected addCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\n            const id = this.currentReels[reelIndex].symbols[symbolIndex];\n\n            const symbol = this.symbols.getSymbol(id - 1, Symbol.CaseNormal);\n            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\n            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\n\n            this.symbolsContainer.addChild(symbol);\n\n            this.currentSymbols[reelIndex][symbolIndex] = symbol;\n        }\n    }\n\n    protected addTransformSymbol(reelIndex: number, symbolIndex: number): boolean {\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\n            const id = this.currentReels[reelIndex].transform[symbolIndex];\n            if (id !== 10) {\n                return false;\n            }\n\n            const symbol = this.symbols.getSymbol(id - 1, Symbol.CaseNormal);\n            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\n            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\n            symbol.bindSymbols(this.symbols);\n            if (ModuleManager.freespinsActive()) {\n                if (\n                    FreespinsModel.LastScreen[\"reels\"][reelIndex].customData != null &&\n                    FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"] != null &&\n                    FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"][symbolIndex] != null\n                ) {\n                    symbol.addWildMultiplier(\n                        FreespinsModel.LastScreen[\"reels\"][reelIndex].customData[\"baseWildMultiplier\"][symbolIndex],\n                    );\n                }\n            } else {\n                symbol.removeSunMultiplier();\n            }\n\n            this.symbolsContainer.addChild(symbol);\n\n            //if there is scatter symbol with wild symbol, add wild to temporary array and return false to add scatter to currentSymbols array\n            if (this.currentReels[reelIndex].symbols[symbolIndex] == 11 && this.hasEnoughScatters()) {\n                symbol.goToCase(\"OVER_SCATTER\");\n                this._currentWinScatterSymbols.push(symbol);\n                return false;\n            }\n\n            this.currentSymbols[reelIndex][symbolIndex] = symbol;\n            return true;\n        }\n    }\n\n    protected hasEnoughScatters(): boolean {\n        let count = 0;\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if (this.currentReels[i].symbols[j] == 11) {\n                    count++;\n                }\n            }\n        }\n\n        return count > 2;\n    }\n\n    protected removeCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\n            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\n\n            this.currentSymbols[reelIndex][symbolIndex] = null;\n        }\n    }\n\n    protected allSymbolsGoToCase(caseType: string, noWin: boolean): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\n                    symbol.goToCase(caseType);\n                    if (this.winFrames != null && this.winFrames[i][j] != null) this.winFrames[i][j].goToCase(caseType);\n\n                    if (noWin) {\n                        this.noWinSymbolsContainer.addChild(symbol);\n                    } else {\n                        this.symbolsContainer.addChild(symbol);\n                    }\n                }\n            }\n        }\n    }\n\n    protected winSymbolsGoToCase(winIndex: number, caseType: string, useValue: boolean): void {\n        const win = this.currentWins[winIndex];\n        let symbols: Array<Symbol> = [];\n\n        switch (win.trigger) {\n            case Communication.Game.WinTrigger.Payline:\n                symbols = this.winSymbolsGoToCaseAsPayline(winIndex, caseType);\n                break;\n            case Communication.Game.WinTrigger.Scatter:\n                symbols = this.winSymbolsGoToCaseAsScatter(winIndex, caseType);\n                break;\n            case Communication.Game.WinTrigger.Way:\n                symbols = this.winSymbolsGoToCaseAsWay(winIndex, caseType);\n                break;\n            default:\n                symbols = this.winSymbolsGoToCaseAsCustom(winIndex, caseType);\n                break;\n        }\n\n        if (useValue && symbols.length > 0 && win.amount > 0) {\n            this.value.visible = true;\n            this.value.position.x = symbols[0].position.x + symbols[0].offsetX;\n            this.value.position.y = symbols[0].position.y + symbols[0].offsetY;\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                ImageTextCounterElement.Round = true;\n                this.value.play(parseInt(NumberUtils.devide(win.amount, BetManager.CoinSize).toString()));\n            } else {\n                ImageTextCounterElement.Round = false;\n                this.value.play(parseFloat(Languages.formatText(Languages.FormatMoney, win.amount.toString())));\n            }\n        } else {\n            this.value.visible = false;\n        }\n    }\n\n    protected winSymbolsGoToCaseAsPayline(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        if (this.paylines != null) {\n            const definition = PaylinesDefinitions.getPaylineDefinitionsById(\n                win.paylineId,\n                this.paylines.paylineDefinition,\n            );\n\n            for (let i = 0; i < definition.length; i++) {\n                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\n                    const symbol = this.currentSymbols[i][definition[i]];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsScatter(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\n                    const symbol = this.currentSymbols[i][j];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsWay(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\n                    const symbol = this.currentSymbols[i][j];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsCustom(winIndex: number, caseType: string): Array<Symbol> {\n        // TODO Implement feature when needed.\n        return [];\n    }\n\n    protected allowSymbolGoToCase(reelIndex: number, symbolIndex: number, caseType: string): boolean {\n        return true;\n    }\n\n    //******************************************************************************************************************\n    //  PAYLINES\n    //******************************************************************************************************************\n\n    protected createPaylines(paylines: Paylines): void {\n        this.paylines = paylines;\n\n        this.allPaylinesGoToCase(Payline.CaseNormal);\n\n        this.paylines.showPaylinesLabel();\n    }\n\n    protected allPaylinesGoToCase(caseType: string): void {\n        if (this.paylines != null) {\n            this.paylines.goToCase(caseType);\n        }\n    }\n\n    protected winPaylineGoToCase(winIndex: number, caseType: string): void {\n        if (this.paylines != null) {\n            const win = this.currentWins[winIndex];\n\n            if (win.trigger === Communication.Game.WinTrigger.Payline) {\n                if (caseType === Payline.CaseWin && this.currentWins.length === 1) {\n                    this.paylines.goToCase(Payline.CaseSingleWin, win.paylineId);\n                } else {\n                    this.paylines.goToCase(caseType, win.paylineId);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ANIMATIONS\n    //******************************************************************************************************************\n\n    protected createAnimations(hwContainer?: ContainerElement): void {\n        this.animationsContainer = new ContainerElement();\n        this.animationsContainer.name = \"Animations\";\n\n        if (hwContainer) {\n            hwContainer.addChild(this.animationsContainer);\n        } else {\n            this.addChild(this.animationsContainer);\n        }\n\n        if (this.childs[\"Value\"]) {\n            this.value = this.childs[\"Value\"];\n\n            this.animationsContainer.addChild(this.value);\n        }\n\n        this.animations = [];\n\n        for (let i = 0; i < this.animationNames.length; i++) {\n            if (this.childs[this.animationNames[i]]) {\n                let animation = this.childs[this.animationNames[i]];\n                animation.visible = false;\n                animation.on(\"finished\", this.onAnimationFinished.bind(this));\n                animation.on(TimelineElement.AnimationComplete, this.onAnimationComplete.bind(this));\n\n                this.animations.push(animation);\n\n                this.animationsContainer.addChild(animation);\n            }\n        }\n\n        this.currentAnimationIndex = null;\n        this.currentAnimationFinished = true;\n    }\n\n    protected resetAnimations(): void {\n        this.currentAnimationIndex = null;\n        this.currentAnimationFinished = true;\n\n        for (let i = 0; i < this.animations.length; i++) {\n            const animation = this.animations[i];\n            animation.visible = false;\n            animation.stop();\n        }\n    }\n\n    protected startAnimation(): void {\n        this.currentAnimationIndex = this.getAnimationIndex();\n        this.currentAnimationFinished = false;\n\n        const animation = this.animations[this.currentAnimationIndex];\n        animation.visible = true;\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            ImageTextCounterElement.Round = true;\n            animation.play(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\n        } else {\n            ImageTextCounterElement.Round = false;\n            animation.play(this.currentWin);\n        }\n    }\n\n    protected stopAnimation(): void {\n        if (this.currentAnimationIndex != null) {\n            const animation = this.animations[this.currentAnimationIndex];\n            animation.visible = true;\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                ImageTextCounterElement.Round = true;\n                animation.goToOutro(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\n            } else {\n                ImageTextCounterElement.Round = false;\n                animation.goToOutro(this.currentWin);\n            }\n\n            this.currentAnimationIndex = null;\n            this.currentAnimationFinished = true;\n        }\n    }\n\n    protected getAnimationIndex(): number {\n        return this.currentMultiplierIndex;\n    }\n\n    protected onAnimationFinished(): void {\n        this.currentAnimationFinished = true;\n\n        this.emit(WinAnimator.FinishWinCalculation);\n    }\n\n    protected onAnimationComplete(): void {\n        this.currentAnimationIndex = null;\n        this.currentMultiplierIndex = 0;\n\n        this.finishFirstWins();\n    }\n\n    //******************************************************************************************************************\n    //  IDLE\n    //******************************************************************************************************************\n\n    protected idle(): void {\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (\n                    symbol &&\n                    symbol.getCurrentCase() === Symbol.CaseNormal &&\n                    symbol.getCurrentCase() !== Symbol.CaseEmpty\n                ) {\n                    symbol.goToCase(Symbol.CaseIdle + \"_\" + i);\n                }\n            }\n        }\n\n        this.startTimer(WinAnimator.Idle, this.getIdleDelay());\n    }\n\n    protected getInitialIdleDelay(): number {\n        return 60;\n    }\n\n    protected getIdleDelay(): number {\n        return 240;\n    }\n\n    protected getIdleActiveElementsCount(): number {\n        return 3;\n    }\n}\n\nexport const WinAnimatorAttributes = {\n    /*\n     * Sounds property initialize playlist for winAnimator.\n     * @property Sounds\n     * @type String\n     * @default null\n     */\n    SOUNDS: \"Sounds\",\n    /*\n     * Name of config for win animator.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/WinAnimator.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Attributes } from \"../Utils/Attributes\";\n\n/**\n * The payline element is used for hold payline special cases and handle payline behaviour on screen.\n * @class Symbol\n * @extends SwitchElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Payline extends SwitchElement {\n    //base payline cases\n    static CaseSelect: string = \"SELECT\";\n\n    static CaseNormal: string = \"NORMAL\";\n    static CaseNowin: string = \"NOWIN\";\n    static CaseWin: string = \"WIN\";\n    static CaseFirstWin: string = \"FIRST_WIN\";\n    static CaseSingleWin: string = \"SINGLE_WIN\";\n    static CaseSingleCycle: string = \"SINGLE_CYCLE\";\n    static CaseCycle: string = \"CYCLE\";\n\n    zIndex: number = 0;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        this.zIndex = Attributes.assignFloatAttribute(node, PaylineAttributes.Z_INDEX, this.zIndex);\n    }\n}\n\nexport const PaylineAttributes = {\n    /**\n     * Z-index of symbol on screen\n     * @property Zindex\n     * @default 0\n     */\n    Z_INDEX: \"Zindex\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Payline.ts\n **/","import { engineComponent, ArrayUtils, StringUtils } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { SwitchStyle, SwitchStyleCaseAttributes } from \"../Styles/SwitchStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { AnimationElement } from \"./AnimationElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ParticleElement } from \"./ParticleElement\";\nimport { ProtonElement } from \"./ProtonElement\";\nimport { RopeElement } from \"../../../CustomComponents/RopeElement\";\n\n/**\n * SwitchElement class is class which creates holder for other elements and holds cases which can change children by switching cases.\n * Can be defined only with SwitchStyle (See SwitchStyle class).\n * Default case is NONE.\n * Example 1:\n *   <SwitchElement Class=\"SwitchElement\" Style=\"SwitchStyle\" />\n *\n * @class SwitchElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SwitchElement extends BaseElement {\n    // event for dispatch end of movie clip\n    static AnimationComplete: string = \"animationComplete\";\n    static FinishAnimation: string = \"finishAnimation\";\n\n    static CustomCase: string = \"\";\n\n    // style is mandatory in this element\n    protected style: SwitchStyle;\n    protected case: string;\n\n    protected elements: ContainerElement;\n\n    protected timer: FrameTimerEventEmitter;\n\n    // TODO clean\n    center: boolean;\n    // symbol width without offsetX\n    private _symbolWidth: number;\n    // symbol height without offsetY\n    private _symbolHeight: number;\n\n    private dynamicTime = 0;\n\n    constructor() {\n        super();\n\n        // default case\n        this.case = \"NONE\";\n        this.center = false;\n\n        this.timer = CreateFrameTimer(\"timer\");\n    }\n\n    public get symbolWidth(): number {\n        return this._symbolWidth;\n    }\n\n    public get symbolHeight(): number {\n        return this._symbolHeight;\n    }\n\n    public set symbolWidth(value: number) {\n        this._symbolWidth = value;\n    }\n\n    public set symbolHeight(value: number) {\n        this._symbolHeight = value;\n    }\n\n    public get hasElements(): boolean {\n        return this.elements != null && this.elements.childs != null;\n    }\n\n    public getAllChildElements(): Object {\n        if (this.hasElements) {\n            return this.elements.childs;\n        }\n\n        return null;\n    }\n\n    public getChildElementByName(name: string): Object {\n        if (this.hasElements) {\n            return this.elements.childs[name];\n        }\n\n        return null;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (node.hasAttribute(SwitchElementAttributes.STYLE)) {\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(SwitchElementAttributes.STYLE)];\n            if (this.style != null) {\n                // get all elements and add them to this display list\n                if (this.style.container != null) {\n                    if (\n                        node.hasAttribute(SwitchElementAttributes.CLONE) &&\n                        StringUtils.parseBoolean(node.getAttribute(SwitchElementAttributes.CLONE))\n                    ) {\n                        this.elements = this.style.container.clone();\n                    } else {\n                        this.elements = this.style.container;\n                    }\n                    this.addChild(this.elements);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(SwitchElementAttributes.STYLE));\n                }\n            }\n        }\n\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\n        }\n    }\n\n    updateByNode(node: Element) {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\n        }\n\n        if (node.hasAttribute(\"CustomCase\")) {\n            if (SwitchElement.CustomCase != null && SwitchElement.CustomCase != \"\") {\n                this.goToCase(SwitchElement.CustomCase);\n            }\n        }\n    }\n\n    /**\n     * Find out if this element has case s.\n     * @method hasCase\n     * @param s name of case\n     * @return Boolean\n     */\n    hasCase(s: string): Boolean {\n        return this.style != null && this.style.cases != null && this.style.cases[s];\n    }\n\n    /**\n     * Returns xml element of case s.\n     * @method getCase\n     * @param s name of case\n     * @return Element\n     */\n    getCase(s: string): Element {\n        if (this.style != null && this.style.cases != null && this.style.cases[s]) {\n            return this.style.cases[s];\n        }\n        return null;\n    }\n\n    public getCurrentCase(): string {\n        return this.case;\n    }\n\n    /**\n     * Switch this elemenet to case s.\n     * @method goToCase\n     * @param s name of case\n     * @param emitEvent boolean\n     * @return void\n     */\n    goToCase(s: string, emitEvent: boolean = false): void {\n        if (emitEvent) {\n            this.animationComplete();\n        }\n\n        if (this.style != null && this.style.cases != null && this.case !== s) {\n            if (this.timer != null) {\n                this.timer.removeAllListeners(FrameTimerEvents.Complete);\n                this.timer.stop();\n            }\n\n            if (this.hasCase(s)) {\n                let node: Element = this.style.cases[s];\n                if (node != null) {\n                    if (DEBUG) {\n                        if (node.hasAttribute(\"Debug\") && node.getAttribute(\"Debug\") === \"true\") {\n                            debugger;\n                        }\n                    }\n\n                    if (node.hasAttribute(\"FinishHandler\")) {\n                        this.emit(SwitchElement.FinishAnimation);\n                    }\n\n                    let element: any;\n                    this.case = s;\n                    let next: Element = node.firstElementChild;\n                    let arr: Array<string> = [];\n                    while (next != null) {\n                        arr.push(next.nodeName);\n                        element = this.elements.childs[next.nodeName];\n                        if (element != null) {\n                            element.visible = true;\n                            // send new node to element and set / change new attributes\n\n                            /*if(this.center) {\n                                if (this._symbolWidth != null) {\n                                    element.pivot.x = this._symbolWidth / 2;\n                                }\n                                if (this._symbolHeight != null) {\n                                    element.pivot.y = this._symbolHeight / 2;\n                                }\n                            }*/\n                            element.updateByNode(next);\n                        } else {\n                            if (DEBUG) {\n                                this.log(\n                                    \"WARNING no element child with name: \" +\n                                        next.nodeName +\n                                        \" in case: \" +\n                                        s +\n                                        \" in style: \" +\n                                        this.style.name,\n                                );\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n\n                    for (let key in this.elements.childs) {\n                        this.elements.childs[key].removeAllListeners();\n\n                        let found: boolean = false;\n                        for (let i: number = 0; i < arr.length; i++) {\n                            if (key === arr[i]) {\n                                found = true;\n                            }\n                        }\n                        if (!found) {\n                            if (this.elements.childs[key] instanceof ParticleElement) {\n                                (this.elements.childs[key] as any as ParticleElement).stop();\n                            } else if (this.elements.childs[key] instanceof PIXI.DisplayObject) {\n                                this.elements.childs[key].visible = false;\n                            } else if (this.elements.childs[key] instanceof ProtonElement) {\n                                (this.elements.childs[key] as any as ProtonElement).stop();\n                            } else if (this.elements.childs[key] instanceof RopeElement) {\n                                (this.elements.childs[key] as any as RopeElement).stop();\n                            }\n                        }\n                    }\n                    if (\n                        node.hasAttribute(SwitchStyleCaseAttributes.NEXT_CASE) &&\n                        this.hasCase(node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE))\n                    ) {\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\n                            let multiplier = 1;\n                            if (node.hasAttribute(SwitchElementAttributes.RANDOM)) {\n                                multiplier = this.getRandomDurationMultiplier(node);\n                            }\n\n                            this.timer.on(\n                                FrameTimerEvents.Complete,\n                                this.goToCase.bind(this, node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE)),\n                            );\n                            if (node.getAttribute(SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\n                                this.timer.start(this.dynamicTime * multiplier);\n                            } else {\n                                this.timer.start(\n                                    parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * multiplier,\n                                );\n                            }\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\n                            if (element) {\n                                element.on(\n                                    AnimationElement.AnimationComplete,\n                                    this.goToCase.bind(\n                                        this,\n                                        node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE),\n                                        true,\n                                    ),\n                                );\n                            }\n                        } else {\n                            this.goToCase(node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE));\n                        }\n                    } else {\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\n                            let multiplier = 1;\n                            if (node.hasAttribute(SwitchElementAttributes.RANDOM)) {\n                                multiplier = this.getRandomDurationMultiplier(node);\n                            }\n\n                            this.timer.on(FrameTimerEvents.Complete, this.animationComplete.bind(this));\n                            if (node.getAttribute(SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\n                                this.timer.start(this.dynamicTime * multiplier);\n                            } else {\n                                this.timer.start(\n                                    parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * multiplier,\n                                );\n                            }\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\n                            if (element) {\n                                element.on(AnimationElement.AnimationComplete, this.animationComplete.bind(this));\n                            }\n                        }\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no case: \" + s + \" for \" + this.name);\n                }\n            }\n        }\n\n        if (emitEvent) {\n            this.animationComplete();\n        }\n    }\n\n    /**\n     *\n     * @param {Element} node\n     * @returns {number}\n     */\n    private getRandomDurationMultiplier(node: Element): number {\n        let result = 1;\n\n        let dataArray = ArrayUtils.numberArray(node.getAttribute(SwitchElementAttributes.RANDOM));\n        if (dataArray.length > 0) {\n            let max = dataArray[0];\n            let min = 1;\n\n            if (dataArray.length === 2) {\n                min = dataArray[0];\n                max = min > dataArray[1] ? min : dataArray[1];\n            }\n\n            result = Math.round(SwitchElement.getRandom(min, max));\n        }\n\n        return result;\n    }\n\n    /**\n     * Set time of timer dynamicaly from code.\n     * @param {number} time\n     */\n    public setDynamicTime(time: number): void {\n        this.dynamicTime = time;\n    }\n\n    /**\n     *\n     * @param {number} min\n     * @param {number} max\n     * @returns {number}\n     */\n    private static getRandom(min: number, max: number): number {\n        return Math.random() * (max - min) + min;\n    }\n\n    /**\n     * Emit complete event when finish changing state.\n     * @method animationComplete\n     * @return void\n     */\n    animationComplete(): void {\n        this.emit(SwitchElement.AnimationComplete);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return SwitchElement\n     */\n    clone(): SwitchElement {\n        const element: SwitchElement = new SwitchElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.case = this.case;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n/**\n * XML has attributes SwitchElementAttributes, BaseElementAttributes\n * @type {{STYLE: string; CASE: string}}\n */\nexport const SwitchElementAttributes = {\n    /*\n     * Property case is used for set element to some case\n     * @property Case\n     * @type string\n     * @default null\n     */\n    CASE: \"Case\",\n    CLONE: \"Clone\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n    /*\n     * Style holds elements as ContainerElement and also holds cases as xml nodes.\n     * Style for switch element has to be instance of SwitchStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    /*\n     * Multiplies timer with random number between min and max\n     * @property Random\n     * @type string\n     * @default 1\n     */\n    RANDOM: \"Random\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/SwitchElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * SwitchStyle create container from child <elements> and holds xml nodes of cases for this switch elements.\n * Example:\n *   <SwitchStyle Class=\"SwitchStyle\">\n *      <Elements>\n *           <Child1 />\n *           <Child2 X=\"0\" />\n *           ...\n *      </Elements>\n *      <Cases>\n *          <Case Case=\"CASE1\">\n *              <Child2 X=\"50\" />\n *          </Case>\n *          <Case Case=\"CASE2\">\n *              <Child1 X=\"200\" />\n *          </Case>\n *      </Cases>\n *   </SwitchStyle>\n * @class SwitchStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class SwitchStyle extends Style {\n    // container for childs of switch element\n    container: ContainerElement;\n\n    // xml nodes added to object by case name\n    cases: Object;\n\n    constructor() {\n        super();\n\n        this.cases = {};\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return  void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"Elements\":\n                    this.container = new ContainerElement();\n                    this.container.create(next);\n                    break;\n                case \"Cases\":\n                    let nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(SwitchStyleCaseAttributes.CASE)) {\n                            if (this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] !== null) {\n                                this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR case \" +\n                                            nextCase.getAttribute(\"Case\") +\n                                            \" already exist in switchStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\nconst SwitchStyleAttributes = {};\n\nexport const SwitchStyleCaseAttributes = {\n    CASE: \"Case\",\n    HANDLER: \"Handler\",\n    NEXT_CASE: \"NextCase\",\n    TIMER: \"Timer\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/SwitchStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * Style holds basic properties for all kind of styles.\n * @class Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class Style {\n    name: string;\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/Style.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { AnimationStyle } from \"../Styles/AnimationStyle\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { Tweens, ITweenable, TweensAttributes } from \"../../Effects/Tweens\";\nimport { StageController } from \"../../StageController\";\nimport { TextElement } from \"../Texts/TextElement\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * AnimationElement can play animations from spritesheets.\n * AnimationElement uses spritesheets generated from editor (Adobe Animate) with json definition.\n * This element doesnt work without style. Style for this class is AnimationStyle.\n * Example:\n *   <AnimationElement Class=\"AnimationElement\" Style=\"AnimationStyle\" X=\"0\" Y=\"0\" />\n * @class AnimationElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class AnimationElement extends PIXI.extras.AnimatedSprite implements IElement, ITweenable {\n    // event for dispatch end of movie clip\n    static AnimationComplete: string = \"animationComplete\";\n\n    static DynamicTint: string = \"ff0000\";\n\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    // style is mandatory in this element\n    protected _style: AnimationStyle;\n    // animation settings for movie clip\n    private _startFrame: number;\n    private _endFrame: number;\n    private _stop: boolean;\n    private _randomStartFrame: boolean;\n    private _reverse: boolean;\n    private _continue: boolean;\n\n    private _tweenEngine: string;\n\n    public usedInPool: boolean;\n\n    maskSprite: PIXI.Sprite;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    /**\n     * Let's create animation with empty texture\n     */\n    constructor() {\n        let textureArray: Array<PIXI.Texture> = [PIXI.Texture.EMPTY];\n\n        super(textureArray, false);\n        PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\n\n        // default values\n        this._startFrame = 0;\n        this._randomStartFrame = false;\n        this.tint = 0xffffff;\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    public update(deltaTime: number): void {\n        if (this.playing) {\n            super.update(deltaTime);\n        }\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method _create\n     * @param node is Element from xml\n     * @return void\n     */\n    private createByNode(node: Element): void {\n        this.assertDestroyed(\"_create()\");\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        /*\n         * Style define animation. You can use one style on more than one elements.\n         * Style for AnimationElement has to be instance of AnimationStyle.\n         * @property Style\n         * @type string\n         */\n        if (\n            node.hasAttribute(AnimationElementAttributes.STYLE) ||\n            node.hasAttribute(AnimationElementAttributes.STYLE2)\n        ) {\n            if (node.hasAttribute(AnimationElementAttributes.STYLE)) {\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE)];\n            } else if (node.hasAttribute(AnimationElementAttributes.STYLE2)) {\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE2)];\n            }\n\n            if (this._style != null) {\n                if (this._style.startFrame != null) {\n                    this._startFrame = this._style.startFrame;\n                } else {\n                    this._startFrame = null;\n                }\n\n                if (this._style.endFrame != null) {\n                    this._endFrame = this._style.endFrame;\n                } else {\n                    this._endFrame = null;\n                }\n\n                if (this._style.stop != null) {\n                    this._stop = this._style.stop;\n                }\n\n                if (this._style.animation !== \"\") {\n                    let texture: PIXI.Texture;\n                    let textures: PIXI.Texture[] = [];\n                    if (this._endFrame != null) {\n                        for (let i = this._startFrame; i <= this._endFrame; i++) {\n                            let val = this.zerosPad(i, 4);\n                            texture = PIXI.utils.TextureCache[this._style.animation + val];\n                            if (texture != null) {\n                                if (i == this._startFrame) {\n                                    this.texture = texture;\n                                }\n\n                                textures.push(texture);\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"WARNING: No texture\" +\n                                            this._style.animation +\n                                            val +\n                                            \" in TextureCache of AnimationElement!\",\n                                    );\n                                }\n                            }\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\n                                \"WARNING: animation has no endframe number. Use ImageElement with attribute Animation instead AnimationElement!\",\n                            );\n                        }\n\n                        //  todo Disallow animations without endFrame\n                        let frame = this.zerosPad(this._startFrame, 4);\n                        texture = PIXI.utils.TextureCache[this._style.animation + frame];\n                        if (texture != null) {\n                            this.texture = texture;\n                            textures.push(texture);\n                        }\n                    }\n\n                    this.textures = textures;\n                    if (this.textures.length > 0) {\n                        this.onComplete = this._movieClipComplete.bind(this);\n\n                        this.loop = false;\n                        this.animationSpeed = 1;\n                        this.tint = 0xffffff;\n                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\n                        this.alpha = 1;\n                        this._reverse = false;\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no frames in \" + this._style.animation);\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR animation in style is not defined\");\n                    }\n                }\n\n                if (this._style.loop != null) {\n                    this.loop = this._style.loop;\n                }\n\n                if (this._style.reverse != null) {\n                    this._reverse = this._style.reverse;\n                }\n\n                if (this._style.speed != null) {\n                    this.animationSpeed = this._style.speed * (this._style.reverse ? -1 : 1);\n                }\n\n                if (this._style.tint != null) {\n                    this.tint = this._style.tint;\n                }\n\n                if (this._style.blendMode != null) {\n                    this.blendMode = CustomUtils.getBlendMode(this._style.blendMode);\n                }\n\n                if (this._style.alpha != null) {\n                    this.alpha = this._style.alpha;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR missing style: \" + node.getAttribute(AnimationElementAttributes.STYLE));\n                }\n            }\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(AnimationElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(AnimationElementAttributes.MASK));\n                }\n            }\n        }\n\n        /**\n         * todo Replace by AnimationElementAttributes\n         */\n        if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(\n                node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\n            );\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_X),\n                    );\n                }\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_Y),\n                    );\n                }\n                if (!node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\n            this.animationSpeed =\n                parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (\n            !node.hasAttribute(AnimationElementAttributes.TWEEN_PERSISTENT) ||\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.TWEEN_PERSISTENT)) != true\n        ) {\n            Tweens.removeTweens(this);\n        }\n\n        this._randomStartFrame = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.RANDOM_START_FRAME,\n            this._randomStartFrame,\n        );\n\n        if (node.hasAttribute(AnimationElementAttributes.TINT)) {\n            if (node.getAttribute(AnimationElementAttributes.TINT) === \"0\") {\n                this.tint = null;\n            } else if (node.getAttribute(AnimationElementAttributes.TINT) === \"dynamic\") {\n                this.tint = parseInt(AnimationElement.DynamicTint, 16);\n            } else {\n                this.tint = parseInt(node.getAttribute(AnimationElementAttributes.TINT), 16);\n            }\n        }\n\n        this.alpha = Attributes.assignFloatAttribute(node, AnimationElementAttributes.ALPHA, this.alpha);\n\n        if (node.hasAttribute(AnimationElementAttributes.ANCHOR)) {\n            this.anchor.x = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\n            this.anchor.y = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.ROTATION)) {\n            let rotation = Attributes.assignIntAttribute(node, AnimationElementAttributes.ROTATION, this.rotation);\n            this.rotation = this.degrees2radians(rotation);\n        }\n\n        /**\n         * todo Replace by AnimationElementAttributes\n         */\n        if (node.hasAttribute(AnimationElementAttributes.START_ROTATION)) {\n            if (\n                node.getAttribute(AnimationElementAttributes.START_ROTATION) ===\n                AnimationElementAttributes.START_ROTATION\n            ) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.scale.x = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_X, this.scale.x);\n        this.scale.y = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_Y, this.scale.y);\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\n        }\n\n        this.skew.x = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SKEW_X, this.skew.x);\n        this.skew.y = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SKEW_Y, this.skew.y);\n\n        this.position.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.Y, this.position.y);\n        this.pivot.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_Y, this.pivot.y);\n        this.visible = Attributes.assignBooleanAttribute(node, AnimationElementAttributes.VISIBLE, this.visible);\n\n        if (\n            node.hasAttribute(AnimationElementAttributes.CONTINUE) &&\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.CONTINUE))\n        ) {\n            this._continue = true;\n            this.playMe();\n        } else {\n            this._continue = false;\n        }\n\n        if (\n            node.hasAttribute(AnimationElementAttributes.PLAY) &&\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.PLAY))\n        ) {\n            this._stop = false;\n            this._reverse = false;\n            if (\n                node.hasAttribute(AnimationElementAttributes.REVERSE) &&\n                StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE))\n            ) {\n                this._reverse = StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE));\n                this.animationSpeed = this.animationSpeed * (this._reverse ? -1 : 1);\n            }\n\n            if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\n                this.animationSpeed =\n                    parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\n            }\n\n            this.playMe();\n        } /*else if (this._startFrame != null && this._endFrame == null) {\n            this._stop = false;\n            this.playMe();\n        }*/\n\n        if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\n            this.animationSpeed =\n                parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\n        }\n\n        /**\n         * @deprecated\n         */\n        if (node.hasAttribute(AnimationElementAttributes.STOP)) {\n            //this._stop = true;\n            this.showMe(parseInt(node.getAttribute(AnimationElementAttributes.STOP)));\n        }\n\n        /**\n         *\n         */\n        if (node.hasAttribute(AnimationElementAttributes.SHOW_FRAME)) {\n            //this._stop = true;\n            this.showMe(parseInt(node.getAttribute(AnimationElementAttributes.SHOW_FRAME)));\n        }\n\n        this.runPositionTween(node);\n        this.runScaleTween(node);\n        this.runRotationTween(node);\n        this.runAlphaTween(node);\n        this.runTween(node);\n\n        if (DEBUG) {\n            /*this._printDebugInfo({\n             'element': 'Animation',\n             'style': this._style.node.nodeName,\n             'currentFrame': this.currentFrame,\n             'currentTime': this._currentTime,\n             'start': this._startFrame,\n             'end': this._endFrame,\n             'x': this.position.x,\n             'y': this.position.y\n             }, node);*/\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Play movie clip set up for this class.\n     * If animation has Loop property set to true play will loop throught the movie clip.\n     * If animation has Stop property set to true play will loop only single frame on start frame position.\n     * If animation has Reverse property set to true play will start from frame on end frame position.\n     *\n     * @method play\n     * @return void\n     */\n    playMe(frame: number = -1): void {\n        if (!this._continue || !this.playing) {\n            if (this._randomStartFrame && this._startFrame === 0 && this._endFrame != null) {\n                this._startFrame = Math.floor(Math.random() * this._endFrame);\n            }\n\n            if (this._reverse) {\n                this.gotoAndPlay(this._endFrame);\n            } else {\n                this.gotoAndPlay(this._startFrame);\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {number} frameNumber\n     */\n    showMe(frameNumber: number): void {\n        if (frameNumber != null) {\n            this.gotoAndStop(frameNumber);\n        } else {\n            if (this._reverse) {\n                this.gotoAndStop(this._endFrame);\n            } else {\n                this.gotoAndStop(this._startFrame);\n            }\n        }\n    }\n\n    /**\n     * Return movie clip.\n     * @method getMovieClip\n     * @return PIXI.extras.AnimatedSprite\n     *\n     * @deprecated - use only \"object\" instead \"object.getMovieClip()\"\n     */\n    getMovieClip(): PIXI.extras.AnimatedSprite {\n        return this;\n    }\n\n    /**\n     * Dispatch event complete when movie clip goto last frame.\n     * @method movieClipComplete\n     * @return void\n     */\n    private _movieClipComplete(): void {\n        this.emit(AnimationElement.AnimationComplete);\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        let bezierX: Array<number> = null;\n        let bezierY: Array<number> = null;\n        let bezier: any = null;\n\n        if (\n            node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_X) &&\n            node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y)\n        ) {\n            bezierX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_X));\n            bezierY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y));\n            bezier = { values: [] };\n\n            for (let i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\n                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\n            }\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_DELAY,\n            0,\n        );\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, bezier });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN)) {\n            scaleTween = AnimationElement._getPointsFromPointsAttribute(\n                node.getAttribute(AnimationElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        if (scaleTween && scaleTween.length) {\n            tweenValues = scaleTween;\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: scaleTweenY[i],\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenX) {\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                return {\n                    x: scaleXValue,\n                    y: this.scale.y,\n                } as PIXI.Point;\n            });\n        } else if (scaleTweenY) {\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                return {\n                    x: this.scale.x,\n                    y: scaleYValue,\n                } as PIXI.Point;\n            });\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, AnimationElementAttributes.SCALE_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(AnimationElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN),\n        );\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_DELAY,\n            0,\n        );\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(AnimationElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        let alphaTween: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN),\n        );\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, AnimationElementAttributes.ALPHA_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     *\n     * @param {Element} node\n     * @returns {boolean}\n     */\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Formats values in case of characters \"c/+/-\".\n     * @param tween\n     * @param values\n     */\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) => {\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\n            })\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Add zero padding\n     * @param {number} num\n     * @param {number} size\n     * @returns {string}\n     */\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return AnimationElement\n     */\n    clone(): AnimationElement {\n        let element: AnimationElement = new AnimationElement();\n\n        element._style = this._style;\n        element._startFrame = this._startFrame;\n        element._endFrame = this._endFrame;\n        element._stop = this._stop;\n        element._randomStartFrame = this._randomStartFrame;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.rotation = this.rotation;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.skew.x = this.skew.x;\n        element.skew.y = this.skew.y;\n        element.visible = this.visible;\n        element.blendMode = this.blendMode;\n        element.tint = this.tint;\n        element.name = this.name;\n        element.alpha = this.alpha;\n\n        if (this.textures != null && this.textures.length > 0) {\n            element.texture = this.texture;\n            element.textures = this.textures;\n            element.onComplete = element._movieClipComplete.bind(element);\n            if (this._style != null && this._style.loop != null) {\n                element.loop = this._style.loop;\n            }\n\n            element.animationSpeed = this.animationSpeed;\n\n            //element.removeChildren();\n            /* todo Potrebujeme ? */\n        }\n\n        element.playMe = this.playMe.bind(element);\n        element.showMe = this.showMe.bind(element);\n        element.stop = this.stop.bind(element);\n        //element.getMovieClip = this.getMovieClip.bind(element);\n\n        element.markAsCloned(); // must be called last before return!\n\n        return element;\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"_markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    /**\n     *\n     * @param method\n     */\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     *\n     * @param method\n     * @private\n     */\n    /*    protected _assertDestroyed(method: string): void\n     {\n     if (DEBUG) {\n     if (this.__destroyed) {\n     throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n     }\n     }\n     }*/\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = AnimationElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy();\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.onComplete = null;\n        this.textures = [PIXI.Texture.EMPTY];\n\n        Tweens.removeTweens(this);\n    }\n\n    /**\n     *\n     *\n     * @returns {any}\n     */\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = this.debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n\n        return \"\";\n    }\n\n    /**\n     *\n     * @returns {any}\n     */\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n            let animation = this._style ? this._style.animation : \"\";\n            if (!StringUtils.isNullOrEmpty(animation)) {\n                result += \"\\nAnimation: \" + animation;\n            }\n\n            return result;\n        }\n\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     *\n     * @param speed\n     */\n    public changeAnimationSpeed(speed: number): void {\n        this.animationSpeed = speed;\n    }\n\n    /**\n     * Prints output on screen inside element with specified debug content\n     */\n    protected _printDebugInfo(text: any, node?: Element) {\n        if (DEBUG) {\n            if (this.getChildByName(AnimationElementAttributes.DEBUG_INFO) != null) {\n                //this.getChildByName(AnimationElementAttributes.DEBUG_INFO).destroy();\n                this.removeChild(this.getChildByName(AnimationElementAttributes.DEBUG_INFO));\n            }\n            if (\n                node == undefined ||\n                (node.hasAttribute(AnimationElementAttributes.DEBUG_INFO) &&\n                    node.getAttribute(AnimationElementAttributes.DEBUG_INFO) === \"true\")\n            ) {\n                // test\n                /*let border = new ShapeElement();\n                 border.beginFill(0xFFFFFF, 0);\n                 border.lineStyle(2, 0xff0000);\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\n                 this.addChild(border);*/\n\n                let textInfo = new TextElement();\n                textInfo.name = AnimationElementAttributes.DEBUG_INFO;\n                textInfo.x = textInfo.y = 0;\n                textInfo.style.fill = 0xffffff;\n                textInfo.style.fontSize = 12;\n                textInfo.text = JSON.stringify(text, null, 4);\n\n                this.addChild(textInfo);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nexport const AnimationElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ANCHOR: \"Anchor\",\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /**\n     * If Continue is true animation is not restarted.\n     * @property Continue\n     * @type boolean\n     */\n    CONTINUE: \"Continue\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\n    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /*\n     *\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    /*\n     * Indicates if animation should animate reverse.\n     * @property Reverse\n     * @type boolean\n     * @default false\n     */\n    REVERSE: \"Reverse\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Tween rotation of this display object with children.\n     * For duration use RotateTweenDuration (number - frames).\n     * For tweenEase use RotateTweenEase (string - name of easeing function).\n     * @property RotateTweenDegrees\n     * @type Array<numbers> - consist of two values (start degrees; end degrees) or three values (start degrees, middle degrees, end degrees)\n     * @default null\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /*\n     * Tween scale of this display object with children.\n     * For ease use ScaleTweenEase (string - name of easeing function).\n     * For scaling X use ScaleTweenX (consist of two values (start scaleX; end scaleX) or three values (start scaleX; middle scaleX, end scaleX)).\n     * For scaling Y use ScaleTweenY (consist of two values (start scaleY; end scaleY) or three values (start scaleY; middle scaleY, end scaleY)).\n     * @property ScaleTweenDuration\n     * @type number - frames\n     * @default null\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * The factor to skew this display object horizontally.\n     * @property SkewX\n     * @type Number\n     * @default 0\n     */\n    SKEW_X: \"SkewX\",\n    /*\n     * The factor to skew this display object vertically.\n     * @property SkewY\n     * @type Number\n     * @default 0\n     */\n    SKEW_Y: \"SkewY\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    SHOW_FRAME: \"ShowFrame\",\n    SPEED: \"Speed\",\n    /*\n     * @deprecated Instead this use ShowFrame attribute.\n     * @property Stop\n     * @type Number\n     */\n    STOP: \"Stop\",\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    TWEEN_PERSISTENT: \"TweenPersistent\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/AnimationElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * The image text element render bitmap font to text.\n * Example:\n *   <TextElement Class=\"TextElement\" Font=\"fontName\" Text=\"09123456789.,+\" X=\"960\" Y=\"540\" TextAlign=\"center\" TextBaseline=\"middle\" />\n *\n * @class TextElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class TextElement extends PIXI.Text {\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    constructor() {\n        super();\n\n        this.text = \"\";\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        if (node.hasAttribute(TextElementAttributes.FONT)) {\n            this.style.fontFamily = node.getAttribute(TextElementAttributes.FONT);\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (node.hasAttribute(TextElementAttributes.TEXT)) {\n            this.text = node.getAttribute(TextElementAttributes.TEXT);\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TEXT_ALIGN)) {\n            //this.style.align = node.getAttribute(TextElementAttributes.TEXT_ALIGN);\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TEXT_BASELINE)) {\n            //this.textBaseline = node.getAttribute(TextElementAttributes.TEXT_BASELINE);\n            /*switch (node.getAttribute(TextElementAttributes.TEXT_BASELINE)) {\n                case TextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\n                    this.position.y = this.position.y - this.parent.height / 2;\n                    break;\n                case TextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\n                    this.position.y = -this.parent.height;\n                    break;\n            }*/\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SIZE)) {\n            this.style.fontSize = parseInt(node.getAttribute(TextElementAttributes.SIZE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(TextElementAttributes.ALPHA));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.ROTATION)) {\n            this.rotation = parseInt(node.getAttribute(TextElementAttributes.ROTATION));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(TextElementAttributes.START_ROTATION) === TextElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.X)) {\n            this.position.x = parseInt(node.getAttribute(TextElementAttributes.X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.Y)) {\n            this.position.y = parseInt(node.getAttribute(TextElementAttributes.Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.PIVOT_X)) {\n            this.pivot.x = parseInt(node.getAttribute(TextElementAttributes.PIVOT_X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.PIVOT_Y)) {\n            this.pivot.y = parseInt(node.getAttribute(TextElementAttributes.PIVOT_Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.VISIBLE)) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(TextElementAttributes.VISIBLE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TINT)) {\n            if (node.getAttribute(TextElementAttributes.TINT) === \"0\") {\n                this.style.fill = null;\n            } else {\n                this.style.fill = parseInt(node.getAttribute(TextElementAttributes.TINT), 16);\n            }\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n\n            return result;\n        }\n        return \"\";\n    }\n}\n\n/**\n *\n * @type {{DURATION: string; ROUND: string; FORCE: string}}\n */\nexport const TextElementAttributes = {\n    /**\n     * The text to display.\n     * @property Text\n     * @type string\n     * @default null\n     */\n    TEXT: \"Text\",\n    /*\n     * Bitmap font for text.\n     * @property Font\n     * @type string\n     * @default null\n     */\n    FONT: \"Font\",\n    /**\n     * The font size (as a number it converts to px, but as a string, equivalents are '26px','20pt','160%' or '1.6em')\n     */\n    SIZE: \"Size\",\n    /*\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\n     * For detailed information view the whatwg spec. Default is \"left\".\n     * @property TextAlign\n     * @type string\n     * @default left\n     */\n    TEXT_ALIGN: \"TextAlign\",\n    TEXT_ALIGN_VALUE: {\n        LEFT: \"left\",\n        CENTER: \"center\",\n        RIGHT: \"right\",\n    },\n    /*\n     * The vertical alignment point on the text.\n     * Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\n     * @property TextBaseline\n     * @type string\n     * @default top\n     */\n    TEXT_BASELINE: \"TextBaseline\",\n    TEXT_BASELINE_VALUE: {\n        MIDDLE: \"middle\",\n        BOTTOM: \"bottom\",\n    },\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/TextElement.ts\n **/","import { NumberUtils } from \"neo-common\";\nimport { Scaling } from \"./Scaling\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { Communication } from \"neo-games\";\n\n/**\n * @class CustomUtils\n * @author Marek Turkovic\n * 25.10.2019\n * todo Implement not only on baseResponse, but freespinsRespons etc..\n */\nexport class CustomUtils {\n    public static hasFeatureGame(): boolean {\n        if (GameManager.baseResponse && GameManager.baseResponse.wins && GameManager.baseResponse.wins.length > 0) {\n            for (let i = 0; i < GameManager.baseResponse.wins.length; i++) {\n                let win = GameManager.baseResponse.wins[i];\n\n                if (\n                    win.trigger == Communication.Game.WinTrigger.Scatter &&\n                    win.type == Communication.Game.WinType.Feature\n                ) {\n                    if (win.customData[\"miniGameSymbols\"]) {\n                        return true;\n                    }\n                }\n            }\n        }\n\n        return false;\n    }\n\n    public static getBaseCurrentWin(withoutFeatureWin: boolean = false): number {\n        let currentWin = GameManager.baseResponse.currentWin;\n\n        if (CustomUtils.hasFeatureGame() && withoutFeatureWin) {\n            if (GameManager.baseResponse && GameManager.baseResponse.wins.length > 0) {\n                for (let i = 0; i < GameManager.baseResponse.wins.length; i++) {\n                    let win = GameManager.baseResponse.wins[i];\n\n                    if (\n                        win.trigger == Communication.Game.WinTrigger.Scatter &&\n                        win.type == Communication.Game.WinType.Feature\n                    ) {\n                        currentWin = parseFloat(NumberUtils.subtract(currentWin, win.amount));\n                    }\n                }\n            }\n        }\n\n        return currentWin;\n    }\n\n    public static getBlendMode(blendMode: number): number {\n        if (Scaling.IsIOs) {\n            if (blendMode == 1) {\n                blendMode = 3;\n            }\n        }\n\n        return blendMode;\n    }\n\n    public static updateSpineData(spineData: JSON): JSON {\n        if (Scaling.IsIOs) {\n            if (spineData != null) {\n                let spineTextData = JSON.stringify(spineData);\n                spineTextData = spineTextData.split('\"blend\":\"additive\"').join('\"blend\":\"screen\"');\n                spineData = JSON.parse(spineTextData);\n            }\n        }\n\n        return spineData;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/CustomUtils.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ImageElement } from \"./ImageElement\";\nimport { StageController } from \"../../StageController\";\nimport { BaseElement } from \"./BaseElement\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\nimport { AnimationElement } from \"./AnimationElement\";\nimport Animation = gsap.Animation;\n\n// TODO add comments\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ParticleElement extends BaseElement {\n    // handle definition for particles\n    private _style: ParticleStyle;\n    private _styleName: string;\n\n    //  holds particles in pool and reused them\n    private _pool: Array<ImageElement | AnimationElement>;\n\n    // container of whole particle element\n    private _target: BaseElement;\n    // timer for add particles\n    private _timer: FrameTimerEventEmitter;\n\n    private _stopping: boolean;\n    private _stop: boolean;\n    private _emitOnce: boolean;\n    private _preGenerate: boolean;\n    private _startType: string;\n    private _randomStartFrame: boolean;\n    private _maxEmit: number;\n\n    private _blendMode: number;\n    private _created: boolean;\n\n    constructor() {\n        super();\n\n        this._pool = [];\n\n        this._timer = CreateFrameTimer(\"particleTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.addParticles.bind(this));\n\n        this._blendMode = 0;\n        this._created = false;\n        this._stopping = false;\n        this._stop = true;\n        this._emitOnce = false;\n        this._preGenerate = false;\n        this._startType = \"\";\n        this._randomStartFrame = false;\n        this._maxEmit = 1;\n        this.visible = false;\n        this._target = this;\n    }\n\n    //******************************************************************************************************************\n    //  INITIALIZATION\n    //******************************************************************************************************************\n\n    createByNode(node: Element): void {\n        if (!this._created) {\n            super.createByNode(node);\n\n            //prevent generating wasted amount of particles, emit once can be setup only on create\n            if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\n                this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.PRE_GENERATE)) {\n                this._preGenerate = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.PRE_GENERATE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.BLEND_MODE)) {\n                this._blendMode = parseInt(node.getAttribute(ParticleElementAttributes.BLEND_MODE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.RANDOM_START_FRAME)) {\n                this._randomStartFrame = StringUtils.parseBoolean(\n                    node.getAttribute(ParticleElementAttributes.RANDOM_START_FRAME),\n                );\n            }\n\n            if (\n                node.hasAttribute(ParticleElementAttributes.STYLE) ||\n                node.hasAttribute(ParticleElementAttributes.STYLE2)\n            ) {\n                if (node.hasAttribute(ParticleElementAttributes.STYLE)) {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE)]\n                    );\n                } else {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE2)]\n                    );\n                }\n\n                this._styleName = this._style.name;\n            }\n\n            //if is subParticle, create image representation of particle, otherwise create just child particles\n            this.createParticles();\n            this._created = true;\n        }\n    }\n\n    updateByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ParticleElementAttributes.DEBUG) &&\n                node.getAttribute(ParticleElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.MAX_EMIT)) {\n            this._maxEmit = parseInt(node.getAttribute(ParticleElementAttributes.MAX_EMIT));\n            this._maxEmit = this._maxEmit * 0.01;\n\n            if (this._maxEmit > 1) {\n                this._maxEmit = 1;\n            }\n        }\n\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.START) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\n        ) {\n            this.start(this._emitOnce, this._startType);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\n        ) {\n            this.stopping();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\n        ) {\n            this.stop();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\n        ) {\n            this.reset();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\n        ) {\n            this.clear();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CREATING PARTICLES\n    //******************************************************************************************************************\n\n    public createParticles(): void {\n        if (this._style != null) {\n            if (this._style.images != null && this._style.images.length > 0) {\n                let count: number = this._emitOnce ? this._style.count : this._style.calculateElements();\n\n                for (let i: number = 0; i < count; i++) {\n                    let particle: ImageElement | AnimationElement = this.createParticle();\n\n                    this._pool.push(particle);\n                }\n            }\n        }\n    }\n\n    private createParticle(): ImageElement | AnimationElement {\n        let particle: ImageElement | AnimationElement;\n        particle = this.createParticleResource();\n\n        this.setupParticle(particle);\n\n        if (this._preGenerate) {\n            this.setupPosition(particle);\n            this.addBehaviour(particle);\n        }\n\n        return particle;\n    }\n\n    private createParticleResource(): ImageElement | AnimationElement {\n        if (this._style != null) {\n            let resource: ImageElement | AnimationElement = null;\n            let resourceId = this.getRandomResource();\n\n            if (resourceId.indexOf(\"GFX_\") > -1) {\n                resource = new ImageElement(StageController.getTextureByResourceId(resourceId));\n                resource.blendMode = CustomUtils.getBlendMode(this._blendMode);\n            } else if (resourceId.indexOf(\"ANI_\") > -1) {\n                let node: Element = document.createElement(\"Animation\");\n                node.setAttribute(\"Style2\", resourceId);\n                node.setAttribute(\"RandomStartFrame\", this._randomStartFrame.toString());\n                resource = new AnimationElement();\n                resource.create(node);\n            }\n\n            let localBounds = resource.getLocalBounds();\n            resource.pivot.set(localBounds.width / 2, localBounds.height / 2);\n            return resource;\n        }\n\n        return null;\n    }\n\n    private getRandomResource(): string {\n        return this._style.images[Math.floor(Math.random() * this._style.images.length)];\n    }\n\n    //******************************************************************************************************************\n    //  INITIAL SETUP\n    //******************************************************************************************************************\n\n    private setupParticle(particle: ImageElement | AnimationElement) {\n        this.setVisibility(particle, false);\n        particle.usedInPool = false;\n\n        return particle;\n    }\n\n    private setVisibility(particle: ImageElement | AnimationElement, visible: boolean): void {\n        particle.visible = visible;\n\n        if (particle instanceof AnimationElement) {\n            if (visible) {\n                particle.playMe();\n            } else {\n                particle.stop();\n            }\n        }\n    }\n\n    private setupPosition(particle: ImageElement | AnimationElement): void {\n        let startX = 0;\n        let startY = 0;\n\n        switch (this._style.positionZone.type) {\n            case ParticleStyle.ZoneRectangle:\n                startX = this._style.positionZone.x + Math.random() * this._style.positionZone.width;\n                startY = this._style.positionZone.y + Math.random() * this._style.positionZone.height;\n\n                if (this._style.positionZone.innerWidth != -1 && this._style.positionZone.innerHeight != -1) {\n                    let centerX = this._style.positionZone.x + this._style.positionZone.width / 2;\n                    let centerY = this._style.positionZone.y + this._style.positionZone.height / 2;\n                    let innerCenterX = this._style.positionZone.innerX + this._style.positionZone.innerWidth / 2;\n                    let innerCenterY = this._style.positionZone.innerY + this._style.positionZone.innerHeight / 2;\n                    let correctX = Math.random() > 0.5;\n\n                    if (correctX) {\n                        if (startX > centerX) {\n                            startX = this.getRandom(\n                                innerCenterX + this._style.positionZone.innerWidth * 0.5,\n                                centerX + this._style.positionZone.width * 0.5,\n                            );\n                        } else {\n                            startX = this.getRandom(0, innerCenterX - this._style.positionZone.innerWidth * 0.5);\n                        }\n                    } else {\n                        if (startY > centerY) {\n                            startY = this.getRandom(\n                                innerCenterY + this._style.positionZone.innerHeight * 0.5,\n                                centerY + this._style.positionZone.height * 0.5,\n                            );\n                        } else {\n                            startY = this.getRandom(0, innerCenterY - this._style.positionZone.innerHeight * 0.5);\n                        }\n                    }\n                }\n\n                particle.x = startX;\n                particle.y = startY;\n\n                break;\n            case ParticleStyle.ZoneTarget:\n                startX =\n                    this._target.x +\n                    Math.random() * this._style.positionZone.width -\n                    this._style.positionZone.width / 2;\n                startY =\n                    this._target.y +\n                    Math.random() * this._style.positionZone.height -\n                    this._style.positionZone.height / 2;\n\n                particle.x = startX;\n                particle.y = startY;\n                break;\n            case ParticleStyle.ZoneLine:\n                // TODO\n                break;\n            case ParticleStyle.ZoneEllipse:\n                startX = this._style.positionZone.x;\n                startY = this._style.positionZone.y;\n                let radianDegrees = Math.floor(\n                    this.getRandom(this._style.positionZone.startAngle, this._style.positionZone.angle),\n                );\n                let radian = this.degrees2radians(radianDegrees);\n\n                //start is not from origin but from another, inner circle\n                if (this._style.positionZone.innerRadius > 0) {\n                    let radius = this.getRandom(\n                        this._style.positionZone.minInnerRadius,\n                        this._style.positionZone.innerRadius,\n                    );\n                    let radiusB = this.getRandom(\n                        this._style.positionZone.minInnerRadiusB,\n                        this._style.positionZone.innerRadiusB,\n                    );\n\n                    startX = Math.floor(this._style.positionZone.innerX + radius * Math.cos(radian));\n                    startY = Math.floor(this._style.positionZone.innerY + radiusB * Math.sin(radian));\n                }\n\n                particle.x = startX;\n                particle.y = startY;\n                particle.rotation = radian;\n\n                break;\n        }\n    }\n\n    public setTargetElement(element: BaseElement): void {\n        this._target = element;\n    }\n\n    //******************************************************************************************************************\n    //  BEHAVIOUR\n    //******************************************************************************************************************\n\n    private addBehaviour(particle: ImageElement | AnimationElement): void {\n        let particleLife: number =\n            Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\n\n        this.addPathBehaviour(particle, particleLife);\n        this.addScaleBehaviour(particle, particleLife);\n        this.addRotationBehaviour(particle, particleLife);\n        this.addAlphaBehaviour(particle, particleLife);\n    }\n\n    private addPathBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        switch (this._style.positionZone.type) {\n            case ParticleStyle.ZoneRectangle:\n            case ParticleStyle.ZoneTarget:\n                this.addRectanglePathBehavior(particle, life);\n                break;\n            case ParticleStyle.ZoneEllipse:\n                this.addEllipsePathBehavior(particle, life);\n                break;\n        }\n    }\n\n    private addRectanglePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.pathValues != null) {\n            let points: Array<Object> = [];\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\n                if (\n                    this._style.pathValues[i] != null &&\n                    this._style.pathValues[i].x != null &&\n                    this._style.pathValues[i].y != null\n                ) {\n                    let valueX: number = this._style.pathValues[i].x;\n                    let valueY: number = this._style.pathValues[i].y;\n                    if (this._style.pathValues[i].randomX != null) {\n                        valueX =\n                            Math.floor(\n                                Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x),\n                            ) + this._style.pathValues[i].x;\n                    }\n                    if (this._style.pathValues[i].randomY != null) {\n                        valueY =\n                            Math.floor(\n                                Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y),\n                            ) + this._style.pathValues[i].y;\n                    }\n                    points.push({ x: particle.x + valueX, y: particle.y + valueY });\n                }\n            }\n            if (points.length > 2) {\n                Tweens.positionTween(particle, {\n                    bezier: {\n                        values: points,\n                    },\n                    tweenX: [particle.x, particle.x],\n                    tweenY: [particle.y, particle.y],\n                    tweenDuration: life,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            } else if (points.length === 2) {\n                Tweens.positionTween(particle, {\n                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\n                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\n                    tweenDuration: life,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            }\n        }\n    }\n\n    private addEllipsePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\n        let radius = this.getRandom(this._style.positionZone.minRadius, this._style.positionZone.radius);\n        let radiusB = this.getRandom(this._style.positionZone.minRadiusB, this._style.positionZone.radiusB);\n        let finalX = Math.floor(this._style.positionZone.x + radius * Math.cos(particle.rotation));\n        let finalY = Math.floor(this._style.positionZone.y + radiusB * Math.sin(particle.rotation));\n\n        Tweens.positionTween(particle, {\n            tweenX: [particle.x, finalX],\n            tweenY: [particle.y, finalY],\n            tweenDuration: life,\n            paused: false,\n            callbackFunction: this.removeFromPool,\n            callbackParams: [particle],\n            callbackScope: null,\n        });\n    }\n\n    private addScaleBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.scaleValues != null) {\n            let scalePoints: Array<PIXI.Point> = [];\n            for (let i: number = 0; i < this._style.scaleValues.length; i++) {\n                let scaleValue: number;\n                if (this._style.scaleValues[i].length > 1) {\n                    scaleValue =\n                        Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\n                        this._style.scaleValues[i][0];\n                } else {\n                    scaleValue = this._style.scaleValues[i][0];\n                }\n\n                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\n            }\n\n            if (scalePoints.length === 1) {\n                particle.scale.x = scalePoints[0].x;\n                particle.scale.y = scalePoints[0].y;\n            } else if (scalePoints.length > 1) {\n                Tweens.scaleTween(particle, {\n                    tweenValues: scalePoints,\n                    tweenDuration: life,\n                    paused: false,\n                });\n            }\n        }\n    }\n\n    private addRotationBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\n            Tweens.rotationTween(particle, {\n                degrees: [this._style.rotationValues[0], this._style.rotationValues[1]],\n                tweenDuration: life,\n                paused: false,\n            });\n        }\n    }\n\n    private addAlphaBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.alphaValues != null) {\n            let alphas: Array<number> = [];\n            for (let i: number = 0; i < this._style.alphaValues.length; i++) {\n                alphas.push(this._style.alphaValues[i]);\n            }\n            Tweens.alphaTween(particle, {\n                alphas: alphas,\n                tweenDuration: life,\n                paused: false,\n            });\n        }\n    }\n\n    //******************************************************************************************************************\n    //  GETTING PARTICLES\n    //******************************************************************************************************************\n\n    private addParticles(): void {\n        if (!this._stop) {\n            let tabActive = true;\n            if (document.visibilityState != null && document.visibilityState === \"hidden\") {\n                tabActive = false;\n            }\n\n            if (tabActive) {\n                this.getFromPool();\n            }\n\n            if (!this._stopping) {\n                this._timer.start(this._style.time);\n            }\n        }\n    }\n\n    private getFreeParticleIndex(): number {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            if (!this._pool[i].usedInPool) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    private getFromPool(): void {\n        let count = Math.floor(this._style.count * this._maxEmit);\n\n        for (let i: number = 0; i < count; i++) {\n            let particle: ImageElement | AnimationElement;\n            let index: number = this.getFreeParticleIndex();\n\n            // to keep pool ordered by usedInPool check if first element is usedInPool\n            // if yes, create new and push to pool\n            // if not, shift element, set usedInPool and push to pool\n            if (index == -1) {\n                particle = this.createParticle();\n\n                this._pool.push(particle);\n            } else {\n                particle = this._pool[index];\n            }\n\n            if (particle != null) {\n                particle.usedInPool = true;\n                this.addChild(particle);\n                this.setVisibility(particle, true);\n\n                if (this._preGenerate) {\n                    Tweens.restartTweens(particle.uid);\n                } else {\n                    Tweens.removeTweens(particle);\n                    this.setupPosition(particle);\n                    this.addBehaviour(particle);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CONTROLS\n    //******************************************************************************************************************\n\n    start(emitOnce: boolean = false, startType: string = \"\"): void {\n        this.visible = true;\n\n        //if there is no style, there is no particles to emit\n        if (this._style != null) {\n            this._timer.stop();\n            this._emitOnce = emitOnce;\n            this._startType = startType;\n            this._stopping = emitOnce;\n            this._stop = false;\n            if (!this._emitOnce) {\n                this._timer.start(this._style.time);\n                if (this._startType === \"now\") {\n                    this.addParticles();\n                }\n            } else {\n                if (this._startType === \"now\") {\n                    this.addParticles();\n                } else {\n                    this._timer.start(this._style.time);\n                }\n            }\n        }\n    }\n\n    stopping(): void {\n        this._stopping = true;\n    }\n\n    stop(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n        this.removeFromStage();\n    }\n\n    reset(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setupPosition(this._pool[i]);\n            this.setVisibility(this._pool[i], false);\n        }\n    }\n\n    clear(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n        this.removeAllFromPool();\n    }\n\n    //******************************************************************************************************************\n    //  REMOVING\n    //******************************************************************************************************************\n\n    private removeFromPool(particle: ImageElement | AnimationElement): void {\n        // this.setVisibility(particle, false);\n        particle.visible = false;\n        if (particle instanceof AnimationElement) {\n            particle.stop();\n        }\n\n        particle.usedInPool = false;\n    }\n\n    private removeFromStage(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setVisibility(this._pool[i], false);\n            this.removeChild(this._pool[i]);\n            this._pool[i].usedInPool = false;\n        }\n    }\n\n    private removeAllFromPool(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setVisibility(this._pool[i], false);\n            this.removeChild(this._pool[i]);\n            Tweens.removeTweens(this._pool[i]);\n            this._pool[i].usedInPool = false;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    private getRandom(min: number, max: number): number {\n        return Math.random() * (max - min) + min;\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ParticleElement\n     */\n    clone(): ParticleElement {\n        let element: ParticleElement = new ParticleElement();\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element._target = this._target;\n        element._blendMode = this._blendMode;\n        element._emitOnce = this._emitOnce;\n        element._preGenerate = this._preGenerate;\n        let node: Element = document.createElement(this.name);\n        node.setAttribute(\"Style2\", this._styleName);\n        element.create(node);\n        element._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const ParticleElementAttributes = {\n    /**\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    DEBUG: \"Debug\",\n    /**\n     * Random start frame, when animation particles are used\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    SPEED: \"Speed\",\n    EMIT_ONCE: \"EmitOnce\",\n    START_TYPE: \"StartType\",\n    /**\n     * Setup particle position and tween after create, so Start function just restart already created tween\n     */\n    PRE_GENERATE: \"PreGenerate\",\n    /**\n     * How many particles in one fire will be used in percentage. Max 100%\n     */\n    MAX_EMIT: \"MaxEmit\",\n    // Tweens used in BaseElementParticle\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    /**\n     * Style define animation. You can use one style on more than one place.\n     * Style for ParticleElement has to be instance of ParticleStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    EXTEND_STYLE: \"ExtendStyle\",\n    START: \"Start\",\n    STOPPING: \"Stopping\",\n    STOP: \"Stop\",\n    RESET: \"Reset\",\n    CLEAR: \"Clear\",\n    IMAGE: \"Image\",\n    /**\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    ATTR_COUNT: \"Count\",\n    ATTR_TIME: \"Time\",\n    ATTR_MIN: \"Min\",\n    ATTR_MAX: \"Max\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_TYPE: \"Type\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    ATTR_RANDOM_X: \"RandomX\",\n    ATTR_RANDOM_Y: \"RandomY\",\n    ATTR_WIDTH: \"Width\",\n    ATTR_HEIGHT: \"Height\",\n    ATTR_RADIUS: \"Radius\",\n    ATTR_POSITION_RADIUS: \"PositionRadius\",\n    ATTR_RANDOM_POSITION_ANGLE: \"RandomPositionAngle\",\n    ATTR_MIN_RADIUS: \"MinRadius\",\n    ATTR_INNER_RADIUS: \"InnerRadius\",\n    ATTR_ANGLE: \"Angle\",\n    ATTR_SHOW_ANGLE: \"ShowAngle\",\n    ATTR_VALUES: \"Values\",\n    ATTR_VALUE: \"Value\",\n    IMAGE_MASK: \"ImageMask\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleElement.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, ITweenable, TweensAttributes } from \"../../Effects/Tweens\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\nimport { TextElement } from \"../Texts/TextElement\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * ImageElement class is class which creates holder for image from resources. This image will be rendered to canvas.\n * Example:\n *   <ImageElement Class=\"ImageElement\" Image=\"[imageId]\" X=\"0\" Y=\"0\" />\n * @class ImageElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageElement extends PIXI.Sprite implements IElement, ITweenable {\n    static DynamicTint: string = \"ff0000\";\n\n    static CustomTints: Object = {};\n\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n    private _tweenEngine: string;\n\n    maskGraphics: ShapeElement;\n    maskSprite: PIXI.Sprite;\n\n    usedInPool: boolean;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    zIndex: number = 0;\n\n    constructor(texture?: PIXI.Texture) {\n        super(texture);\n        this.usedInPool = false;\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        this.tint = 0xffffff;\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    set tweenEngine(engine: string) {\n        this._tweenEngine = engine;\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.IMAGE)) {\n            // get loaded image from resources\n            this.texture = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.IMAGE));\n        } else if (node.hasAttribute(ImageElementAttributes.FROM_FRAME)) {\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\n                let frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\n                let frameStr = frame < 10 ? \"0\" + frame : frame;\n                this.texture = StageController.getTextureByResourceId(\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME) + \"00\" + frameStr,\n                );\n            } else {\n                this.texture = StageController.getTextureByResourceId(\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME),\n                );\n            }\n        } else if (node.hasAttribute(ImageElementAttributes.ANIMATION)) {\n            let frame: number = 0;\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\n                frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\n            }\n            let frameStr = frame < 10 ? \"0\" + frame : frame;\n\n            this.texture = StageController.getTextureByResourceId(\n                node.getAttribute(ImageElementAttributes.ANIMATION) + \"00\" + frameStr,\n            );\n        }\n\n        if (this.texture) {\n            if (node.hasAttribute(ImageElementAttributes.ANCHOR)) {\n                let anchorPoints = node.getAttribute(ImageElementAttributes.ANCHOR).split(\";\");\n\n                if (anchorPoints.length === 1) {\n                    this.anchor.x = parseFloat(anchorPoints[0]);\n                    this.anchor.y = parseFloat(anchorPoints[0]);\n                } else if (anchorPoints.length === 2) {\n                    this.anchor.x = parseFloat(anchorPoints[0]);\n                    this.anchor.y = parseFloat(anchorPoints[1]);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                if (!(this.texture && this.texture.baseTexture)) {\n                    //this.log('ERROR no Image with name: ' + node.getAttribute(ImageElementAttributes.IMAGE));\n                    this.log(\"ERROR Image has no texture\");\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.TWEEN_ENGINE)) {\n            this._tweenEngine = node.getAttribute(ImageElementAttributes.TWEEN_ENGINE);\n        }\n\n        if (this.maskGraphics != null) {\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\n            }\n\n            if (node.hasAttribute(\"MaskScaleX\")) {\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\n            }\n\n            if (node.hasAttribute(\"MaskScaleY\")) {\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\n            }\n\n            if (node.hasAttribute(\"MaskX\")) {\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\n            }\n\n            if (node.hasAttribute(\"MaskY\")) {\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\n            }\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): ImageElement {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (\n            !node.hasAttribute(\"RemoveTweens\") ||\n            StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false\n        ) {\n            Tweens.removeTweens(this);\n        }\n\n        this.visible = Attributes.assignBooleanAttribute(node, ImageElementAttributes.VISIBLE, this.visible);\n        this.alpha = Attributes.assignFloatAttribute(node, ImageElementAttributes.ALPHA, this.alpha);\n        this.blendMode = CustomUtils.getBlendMode(\n            this.getBlendModeByString(\n                Attributes.assignStringAttribute(node, ImageElementAttributes.BLEND_MODE, this.blendMode),\n            ),\n        );\n        this.pivot.x = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_Y, this.pivot.y);\n\n        if (node.hasAttribute(ImageElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(ImageElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(ImageElementAttributes.START_ROTATION) === ImageElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, ImageElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, ImageElementAttributes.Y, this.position.y);\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SKEW_X)) {\n            this.skew.x = parseFloat(node.getAttribute(ImageElementAttributes.SKEW_X));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SKEW_Y)) {\n            this.skew.y = parseFloat(node.getAttribute(ImageElementAttributes.SKEW_Y));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SKEW)) {\n            this.skew.x = parseFloat(node.getAttribute(ImageElementAttributes.SKEW));\n            this.skew.y = parseFloat(node.getAttribute(ImageElementAttributes.SKEW));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(ImageElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.maskGraphics = shapeElement;\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ImageElementAttributes.MASK));\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.BITMAP_MASK));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_X));\n                }\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_Y));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\n                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\n                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\n                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\n                }\n\n                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\n                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\n                }\n\n                if (!node.hasAttribute(ImageElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n\n                this.runBitmapMaskScaleTween(node, this.maskSprite);\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(ImageElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.TINT)) {\n            let spr: PIXI.Sprite;\n            if (node.getAttribute(ImageElementAttributes.TINT) === \"0\") {\n                this.tint = null;\n            } else if (node.getAttribute(ImageElementAttributes.TINT) === \"dynamic\") {\n                this.tint = parseInt(ImageElement.DynamicTint, 16);\n            } else {\n                this.tint = parseInt(node.getAttribute(ImageElementAttributes.TINT), 16);\n                if (this.children != null && this.children[0] != null && this.children[0] instanceof PIXI.Sprite) {\n                    spr = <PIXI.Sprite>this.children[0];\n                    spr.tint = this.tint;\n                }\n            }\n        }\n\n        if (node.hasAttribute(\"CustomTint\")) {\n            if (ImageElement.CustomTints[node.getAttribute(\"CustomTint\")] != null) {\n                this.tint = ImageElement.CustomTints[node.getAttribute(\"CustomTint\")];\n            }\n        }\n\n        if (this.maskGraphics != null) {\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\n            }\n\n            if (node.hasAttribute(\"MaskScaleX\")) {\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\n            }\n\n            if (node.hasAttribute(\"MaskScaleY\")) {\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\n            }\n\n            if (node.hasAttribute(\"MaskX\")) {\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\n            }\n\n            if (node.hasAttribute(\"MaskY\")) {\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\n            }\n        }\n\n        this.runPositionTween(node);\n        this.runScaleTween(node);\n        this.runRotationTween(node);\n        this.runAlphaTween(node);\n        this.runTween(node);\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(ImageElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n\n        if (alphaTweenPosition == ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.ALPHA_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            (!node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_X) ||\n                !node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_Y)) &&\n            (!node.hasAttribute(\"PositionTweenToX\") || !node.hasAttribute(\"PositionTweenToY\")) &&\n            (!node.hasAttribute(\"AbsolutePositionTweenToX\") || !node.hasAttribute(\"AbsolutePositionTweenToY\"))\n        ) {\n            return false;\n        }\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        if (\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_X) &&\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            let positionTweenPosition: string = Attributes.assignStringAttribute(\n                node,\n                ImageElementAttributes.POSITION_TWEEN_POSITION,\n                null,\n            );\n            if (positionTweenPosition === ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n                positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X)).map(\n                    (value) => value + this.position.x,\n                );\n                positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y)).map(\n                    (value) => value + this.position.y,\n                );\n            } else {\n                positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X));\n                positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y));\n            }\n        } else if (node.hasAttribute(\"PositionTweenToX\") && node.hasAttribute(\"PositionTweenToY\")) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToX\"));\n            positionTweenX.unshift(this.position.x);\n\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToY\"));\n            positionTweenY.unshift(this.position.y);\n        } else if (node.hasAttribute(\"AbsolutePositionTweenToX\") && node.hasAttribute(\"AbsolutePositionTweenToY\")) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToX\")).map(\n                (value) => this.position.x + (value - this.getGlobalPosition().x),\n            );\n            positionTweenX.unshift(this.position.x);\n\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToY\")).map(\n                (value) => this.position.y + (value - this.getGlobalPosition().y),\n            );\n            positionTweenY.unshift(this.position.y);\n        }\n\n        let bezierX: Array<number> = null;\n        let bezierY: Array<number> = null;\n        let bezier: any = null;\n\n        if (\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_X) &&\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_Y)\n        ) {\n            bezierX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_X));\n            bezierY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_Y));\n            bezier = { values: [] };\n\n            for (let i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\n                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\n            }\n\n            if (node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE)) {\n                let autorotate: string = node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE);\n                if (parseInt(autorotate) || StringUtils.parseBoolean(autorotate)) {\n                    bezier[\"autoRotate\"] = autorotate;\n                } else {\n                    let autorotateArray: Array<any> = autorotate.split(\";\");\n                    if (autorotateArray.length == 5) {\n                        // e.g. [\"x\",\"y\",\"rotation\",45,true]\n                        let [a, b, c, d, e] = autorotateArray;\n                        bezier[\"autoRotate\"] = [];\n                        bezier[\"autoRotate\"].push(a);\n                        bezier[\"autoRotate\"].push(b);\n                        bezier[\"autoRotate\"].push(c);\n                        bezier[\"autoRotate\"].push(parseInt(d));\n                        bezier[\"autoRotate\"].push(e == \"true\");\n                    }\n                }\n            }\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.POSITION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, bezier });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(ImageElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(ImageElementAttributes.ROTATION_TWEEN),\n        );\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.ROTATION_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN)) {\n            scaleTween = ImageElement._getPointsFromPointsAttribute(\n                node.getAttribute(ImageElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        if (scaleTween && scaleTween.length) {\n            tweenValues = scaleTween;\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: scaleTweenY[i],\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenX) {\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                return {\n                    x: scaleXValue,\n                    y: this.scale.y,\n                } as PIXI.Point;\n            });\n        } else if (scaleTweenY) {\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                return {\n                    x: this.scale.x,\n                    y: scaleYValue,\n                } as PIXI.Point;\n            });\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.SCALE_TWEEN_DELAY, 0);\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runBitmapMaskScaleTween(node: Element, maskObject: any): void {\n        let scaleTweenY: Array<number>;\n        let tweenValues: Array<number> = [];\n        let tweenDuration: Array<number> = [];\n        let tweenEase: Array<string> = [];\n        let tweenDelay: Array<number> = [];\n        let tweenLoop: boolean = false;\n\n        let maskSprite: ITweenable = <any>maskObject;\n\n        if (maskObject instanceof ShapeElement) {\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenScaleY\"));\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenYScaleDuration\") || \"120\");\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\n        } else {\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleTweenY\"));\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleYTweenDuration\") || \"120\");\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\n        }\n\n        Tweens.removeTweens(maskSprite, \"all\");\n        Tweens.customTween(maskSprite, {\n            tween: \"scale.y\",\n            tweenValues,\n            tweenEase,\n            tweenDuration,\n            tweenDelay,\n            tweenLoop,\n        });\n    }\n\n    /**\n     *\n     * @param {Element} node\n     * @returns {boolean}\n     */\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                if (tween === \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"~\":\n                    value = parseFloat(current.slice(0, -1));\n\n                    if (property[0] == \"position\") {\n                        if (property[1] == \"x\") {\n                            value = this.position.x + (value - this.getGlobalPosition().x);\n                        } else if (property[1] == \"y\") {\n                            value = this.position.y + (value - this.getGlobalPosition().y);\n                        }\n                    }\n\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ImageElement\n     */\n    clone(): ImageElement {\n        let element: ImageElement = new ImageElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.anchor = this.anchor;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._tweenEngine = this._tweenEngine;\n\n        if (this.texture != null) {\n            element.texture = this.texture;\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        } else if (this.maskGraphics != null) {\n        }\n\n        element.markAsCloned(); // must be called last before return!\n\n        return element;\n    }\n\n    /**\n     *\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n\n        this.texture = null;\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = this.debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n            let imgurl = this.texture && this.texture.baseTexture ? this.texture.baseTexture.imageUrl : \"\";\n            if (!StringUtils.isNullOrEmpty(imgurl)) {\n                result += \"\\nUrl: \" + imgurl;\n            }\n            return result;\n        }\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = ImageElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected _markAsCloned(): void {\n        this.markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    markAsCloned(): void {\n        this._assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     *\n     * @param method\n     * @private\n     */\n    protected _assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected _removeAndDestroyChildren(): void {\n        this._assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     * Important! The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes.\n     * Anything else will silently act like NORMAL.\n     *\n     * @param mode\n     * @returns {number}\n     */\n    public getBlendModeByString(mode: string): number {\n        mode = mode.toString();\n        switch (mode) {\n            case \"0\":\n            case \"normal\":\n                return PIXI.BLEND_MODES.NORMAL;\n            case \"1\":\n            case \"add\":\n                return PIXI.BLEND_MODES.ADD;\n            case \"2\":\n            case \"multiply\":\n                return PIXI.BLEND_MODES.MULTIPLY;\n            case \"3\":\n            case \"screen\":\n                return PIXI.BLEND_MODES.SCREEN;\n            case \"4\":\n            case \"overlay\":\n                return PIXI.BLEND_MODES.OVERLAY;\n            case \"5\":\n            case \"darken\":\n                return PIXI.BLEND_MODES.DARKEN;\n            case \"6\":\n            case \"lighten\":\n                return PIXI.BLEND_MODES.LIGHTEN;\n            case \"7\":\n            case \"color_dodge\":\n                return PIXI.BLEND_MODES.COLOR_DODGE;\n            case \"8\":\n            case \"color_burn\":\n                return PIXI.BLEND_MODES.COLOR_BURN;\n            case \"9\":\n            case \"hard_light\":\n                return PIXI.BLEND_MODES.HARD_LIGHT;\n            case \"10\":\n            case \"soft_light\":\n                return PIXI.BLEND_MODES.SOFT_LIGHT;\n            case \"11\":\n            case \"difference\":\n                return PIXI.BLEND_MODES.DIFFERENCE;\n            case \"12\":\n            case \"exclusion\":\n                return PIXI.BLEND_MODES.EXCLUSION;\n            case \"13\":\n            case \"hue\":\n                return PIXI.BLEND_MODES.HUE;\n            case \"14\":\n            case \"saturation\":\n                return PIXI.BLEND_MODES.SATURATION;\n            case \"15\":\n            case \"color\":\n                return PIXI.BLEND_MODES.COLOR;\n            case \"16\":\n            case \"luminosity\":\n                return PIXI.BLEND_MODES.LUMINOSITY;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\n                }\n                return PIXI.BLEND_MODES.NORMAL;\n        }\n    }\n\n    /**\n     * Prints output on screen inside element with specified debug content\n     */\n    protected _printDebugInfo(text: any, node?: Element) {\n        if (DEBUG) {\n            if (this.getChildByName(ImageElementAttributes.DEBUG_INFO) != null) {\n                this.removeChild(this.getChildByName(ImageElementAttributes.DEBUG_INFO));\n            }\n            if (\n                node == undefined ||\n                (node.hasAttribute(ImageElementAttributes.DEBUG_INFO) &&\n                    node.getAttribute(ImageElementAttributes.DEBUG_INFO) === \"true\")\n            ) {\n                // test\n                /*let border = new ShapeElement();\n                 border.beginFill(0xFFFFFF, 0);\n                 border.lineStyle(2, 0xff0000);\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\n                 this.addChild(border);*/\n\n                let textInfo = new TextElement();\n                textInfo.name = ImageElementAttributes.DEBUG_INFO;\n                textInfo.x = textInfo.y = 0;\n                textInfo.style.fill = 0xff0000;\n                textInfo.style.fontSize = 10;\n                textInfo.text = JSON.stringify(text, null, 4);\n\n                this.addChild(textInfo);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nclass ShockwaveOptions {\n    amplitude?: number;\n    wavelength?: number;\n    brightness?: number;\n    speed?: number;\n    radius?: number;\n}\n\nexport const ImageElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    ANCHOR: \"Anchor\",\n    /**\n     * Target animation from where is specific frame selected. Attribute Frame=\"?\" needed.\n     */\n    ANIMATION: \"Animation\",\n    /**\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /**\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n\n    FRAME: \"Frame\",\n\n    FROM_FRAME: \"FromFrame\",\n    /**\n     * Reference to image from resources.\n     * @property Image\n     * @type string\n     * @default 0\n     */\n    IMAGE: \"Image\",\n    /**\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /**\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /**\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_BEZIER_AUTOROTATE: \"PositionTweenBezierAutorotate\",\n    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\n    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /**\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /**\n     *\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /**\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /**\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    SKEW: \"Skew\",\n    /**\n     * The factor to skew this display object horizontally.\n     * @property SkewX\n     * @type Number\n     * @default 0\n     */\n    SKEW_X: \"SkewX\",\n    /**\n     * The factor to skew this display object vertically.\n     * @property SkewY\n     * @type Number\n     * @default 0\n     */\n    SKEW_Y: \"SkewY\",\n    /**\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /**\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    TWEEN_ENGINE: \"TweenEngine\",\n    VISIBLE: \"Visible\",\n    /**\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /**\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ImageElement.ts\n **/","import { ArrayUtils, engineComponent, StringUtils } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ParticleElementAttributes } from \"../Graphics/ParticleElement\";\n\nexport interface IZoneOptions {\n    type: string;\n    x?: number;\n    y?: number;\n    width?: number;\n    height?: number;\n    innerWidth?: number;\n    innerHeight?: number;\n    radius?: number;\n    minRadius?: number;\n    radiusB?: number;\n    minRadiusB?: number;\n    innerRadius?: number;\n    minInnerRadius?: number;\n    innerRadiusB?: number;\n    minInnerRadiusB?: number;\n    innerX?: number;\n    innerY?: number;\n    angle?: number;\n    startAngle?: number;\n}\n\nexport interface IPathOptions {\n    x?: number;\n    y?: number;\n    randomX?: number;\n    randomY?: number;\n}\n\n@engineComponent(ComponentTypes.Style)\n// TODO add comments\nexport class ParticleStyle extends Style {\n    // value in percentage for creating reserv in display list to pooling particles\n    static ElementsReserve: number = 0.5;\n\n    // names for zones\n    static ZoneRectangle: string = \"Rectangle\";\n    static ZoneLine: string = \"Line\";\n    static ZoneEllipse: string = \"Ellipse\";\n    static ZoneTarget: string = \"Target\";\n    static ZoneDynamic: string = \"Dynamic\";\n\n    static NodeCount: string = \"Count\";\n    static NodeLife: string = \"Life\";\n    static NodeImages: string = \"Images\";\n    static NodePosition: string = \"Position\";\n    static NodePath: string = \"Path\";\n    static NodeScale: string = \"Scale\";\n    static NodeRotation: string = \"Rotation\";\n    static NodeAlpha: string = \"Alpha\";\n    static NodeValue: string = \"Value\";\n\n    // TODO possible memory leak\n    node: Element;\n\n    private _count: number;\n    private _time: number;\n    private _minLife: number;\n    private _maxLife: number;\n    private _images: Array<string>;\n    private _randomStartFrame: boolean;\n    private _subParticleStyle: string;\n    private _positionZone: IZoneOptions;\n    private _pathValues: Array<IPathOptions>;\n    private _scaleValues: Array<Array<number>>;\n    private _rotationValues: Array<number>;\n    private _alphaValues: Array<number>;\n\n    constructor() {\n        super();\n\n        this._count = 1;\n        this._time = 60;\n        this._minLife = 60;\n        this._maxLife = 120;\n        this._images = [];\n        this._randomStartFrame = false;\n        this._subParticleStyle = \"\";\n        this._positionZone = {\n            type: ParticleStyle.ZoneRectangle,\n            x: 0,\n            y: 0,\n            innerX: 0,\n            innerY: 0,\n            width: StageController.Width,\n            height: StageController.Height,\n            innerWidth: -1,\n            innerHeight: -1,\n            radius: 0,\n            minRadius: 0,\n            radiusB: 0,\n            minRadiusB: 0,\n            innerRadius: 0,\n            minInnerRadius: 0,\n            innerRadiusB: 0,\n            minInnerRadiusB: 0,\n            angle: 360,\n            startAngle: 0, //used to prevent container rotation deformation with ellipse\n        };\n        this._pathValues = [];\n        this._scaleValues = [];\n        this._rotationValues = [];\n        this._alphaValues = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element) {\n        this.node = node;\n\n        super.create(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.EXTEND_STYLE)) {\n            let extendStyle: ParticleStyle = <ParticleStyle>(\n                StyleManager.Styles[node.getAttribute(ParticleElementAttributes.EXTEND_STYLE)]\n            );\n            if (extendStyle != null && extendStyle.node != null) {\n                this.parseChildrenNodes(extendStyle.node);\n            }\n        }\n\n        this.parseChildrenNodes(node);\n    }\n\n    private parseChildrenNodes(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case ParticleStyle.NodeCount:\n                    this.initializeCount(next);\n                    break;\n                case ParticleStyle.NodeLife:\n                    this.initializeLife(next);\n                    break;\n                case ParticleStyle.NodeImages:\n                    this.initializeImages(next);\n                    break;\n                case ParticleStyle.NodePosition:\n                    this.initializePosition(next);\n                    break;\n                case ParticleStyle.NodePath:\n                    this.initializePath(next);\n                    break;\n                case ParticleStyle.NodeScale:\n                    this.initializeScale(next);\n                    break;\n                case ParticleStyle.NodeRotation:\n                    this.initializeRotation(next);\n                    break;\n                case ParticleStyle.NodeAlpha:\n                    this.initializeAlpha(next);\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    get count(): number {\n        return this._count;\n    }\n\n    get time(): number {\n        return this._time;\n    }\n\n    get minLife(): number {\n        return this._minLife;\n    }\n\n    get maxLife(): number {\n        return this._maxLife;\n    }\n\n    get images(): Array<string> {\n        return this._images;\n    }\n\n    get randomStartFrame(): boolean {\n        return this._randomStartFrame;\n    }\n\n    get subParticleStyle(): string {\n        return this._subParticleStyle;\n    }\n\n    get positionZone(): IZoneOptions {\n        return this._positionZone;\n    }\n\n    get pathValues(): Array<IPathOptions> {\n        return this._pathValues;\n    }\n\n    get scaleValues(): Array<Array<number>> {\n        return this._scaleValues;\n    }\n\n    get rotationValues(): Array<number> {\n        return this._rotationValues;\n    }\n\n    get alphaValues(): Array<number> {\n        return this._alphaValues;\n    }\n\n    calculateElements(): number {\n        let elementsPerSecond: number = (StageController.FPS / this._time) * this._count;\n        let elementsWithLife: number = (this._maxLife / StageController.FPS) * elementsPerSecond;\n        return elementsWithLife;\n    }\n\n    /**\n     * Initialize elements per second.\n     * Count - how much elements\n     * Time - time when specified count of elements is generated\n     *\n     * Example:\n     *  <Count Count=\"8\" Time=\"2\"/>\n     * @param node\n     */\n    private initializeCount(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_COUNT)) {\n            this._count = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_COUNT));\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TIME)) {\n            this._time = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_TIME));\n        }\n    }\n\n    /**\n     * Example:\n     *  <Life Min=\"500\" Max=\"1000\"/>\n     * @param node\n     */\n    private initializeLife(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN)) {\n            this._minLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MIN));\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MAX)) {\n            this._maxLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MAX));\n        }\n\n        if (this._minLife > this._maxLife) {\n            this._maxLife = this._minLife;\n        }\n    }\n\n    /**\n     * Example:\n     *  <Images Images=\"GFX_particle1;GFX_particle2;...\"/>\n     * @param node\n     */\n    private initializeImages(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME)) {\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME).split(\";\");\n\n            for (let i: number = 0; i < this._images.length; i++) {\n                // TODO 0000\n                this._images[i] = this._images[i] + \"0000\";\n            }\n        } else if (node.hasAttribute(ParticleStyleAttributes.ATTR_IMAGES)) {\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_IMAGES).split(\";\");\n        }\n\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME)) {\n            this._randomStartFrame = StringUtils.parseBoolean(\n                node.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME),\n            );\n        }\n\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE)) {\n            this._subParticleStyle = node.getAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE);\n        }\n    }\n\n    /**\n     * Bornplace of elements.\n     * Example:\n     *  <Position Type=\"Rectangle\" X=\"0\" Y=\"-100\" Width=\"288\" Height=\"1080\"/>\n     * @param node\n     */\n    private initializePosition(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TYPE)) {\n            this._positionZone.type = node.getAttribute(ParticleStyleAttributes.ATTR_TYPE);\n            switch (this._positionZone.type) {\n                case ParticleStyle.ZoneRectangle:\n                    // TODO separate method get Zone\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\n                        this._positionZone.innerX = this._positionZone.x;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                        this._positionZone.innerY = this._positionZone.y;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH)) {\n                        this._positionZone.innerWidth = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT)) {\n                        this._positionZone.innerHeight = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT),\n                        );\n                    }\n                    break;\n                case ParticleStyle.ZoneTarget:\n                    this._positionZone.width = 0;\n                    this._positionZone.height = 0;\n\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\n                    }\n\n                    break;\n                case ParticleStyle.ZoneDynamic:\n                    break;\n                case ParticleStyle.ZoneLine:\n                    // TODO\n                    break;\n                case ParticleStyle.ZoneEllipse:\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\n                        this._positionZone.innerX = this._positionZone.x;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                        this._positionZone.innerY = this._positionZone.y;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS)) {\n                        let radius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS));\n                        //set all attributes by radius, if we have only circle with no minRadius\n                        this._positionZone.radius = radius;\n                        this._positionZone.radiusB = radius;\n                        this._positionZone.minRadius = radius;\n                        this._positionZone.minRadiusB = radius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS)) {\n                        this._positionZone.minRadius = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS),\n                        );\n                        this._positionZone.minRadiusB = this._positionZone.minRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS_B)) {\n                        this._positionZone.radiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS_B),\n                        );\n                        this._positionZone.minRadiusB = this._positionZone.radiusB;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B)) {\n                        this._positionZone.minRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS)) {\n                        let innerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS));\n                        this._positionZone.innerRadius = innerRadius;\n                        this._positionZone.innerRadiusB = innerRadius;\n                        this._positionZone.minInnerRadius = innerRadius;\n                        this._positionZone.minInnerRadiusB = innerRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS)) {\n                        this._positionZone.minInnerRadius = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS),\n                        );\n                        this._positionZone.minInnerRadiusB = this._positionZone.minInnerRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B)) {\n                        this._positionZone.innerRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B),\n                        );\n                        this._positionZone.minInnerRadiusB = this._positionZone.innerRadiusB;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B)) {\n                        this._positionZone.minInnerRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_ANGLE)) {\n                        let startAngle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_START_ANGLE));\n                        this._positionZone.startAngle = startAngle;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_ANGLE)) {\n                        let angle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_ANGLE));\n                        this._positionZone.angle = angle;\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown zone \" + this._positionZone.type);\n                    }\n            }\n        }\n    }\n\n    /**\n     * Initialize movement from defined start points to end points with possible random range.\n     * Example:\n     *  <Path>\n     *      <Value X=\"0\" Y=\"0\"/>\n     *      <Value X=\"100\" Y=\"-100\" RandomX=\"100\" RandomY=\"-100\"/>\n     *  </Path>\n     * @param node\n     */\n    private initializePath(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                let path: IPathOptions = {};\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                    path.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\n                } else {\n                    path.x = 0;\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                    path.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                } else {\n                    path.y = 0;\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\n                    path.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\n                } else {\n                    path.randomX = null;\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\n                    path.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\n                } else {\n                    path.randomY = null;\n                }\n                this._pathValues.push(path);\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Scale of object.\n     * Example:\n     *  <Scale>\n     *      <Value Values=\"0.5;1\"/>\n     *      <Value Values=\"0.1;0.2\"/>\n     *  </Scale>\n     * @param node\n     */\n    private initializeScale(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\n                    this._scaleValues.push(\n                        ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES)),\n                    );\n                }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Rotations of object in degrees.\n     * Example:\n     *  <Rotation>\n     *      <Value Value=\"0.1\"/>\n     *      <Value Value=\"3\"/>\n     *  </Rotation>\n     * @param node\n     */\n    private initializeRotation(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\n                    this._rotationValues.push(parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)));\n                }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Example:\n     *  <Alpha>\n     *      <Value Value=\"0.8\"/>\n     *      <Value Value=\"1\"/>\n     *  </Alpha>\n     * @param node The Alpha node\n     */\n    private initializeAlpha(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\n                    this._alphaValues.push(parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)));\n                }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\nconst ParticleStyleAttributes = {\n    ATTR_COUNT: \"Count\",\n    ATTR_TIME: \"Time\",\n    ATTR_MIN: \"Min\",\n    ATTR_MAX: \"Max\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_TYPE: \"Type\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    ATTR_INNER_X: \"InnerX\",\n    ATTR_INNER_Y: \"InnerY\",\n    ATTR_RADIUS: \"Radius\",\n    ATTR_MIN_RADIUS: \"MinRadius\",\n    ATTR_RADIUS_B: \"RadiusB\",\n    ATTR_MIN_RADIUS_B: \"MinRadiusB\",\n    ATTR_INNER_RADIUS: \"InnerRadius\",\n    ATTR_MIN_INNER_RADIUS: \"MinInnerRadius\",\n    ATTR_INNER_RADIUS_B: \"InnerRadiusB\",\n    ATTR_MIN_INNER_RADIUS_B: \"MinInnerRadiusB\",\n    ATTR_ANGLE: \"Angle\",\n    ATTR_START_ANGLE: \"StartAngle\",\n    ATTR_RANDOM_X: \"RandomX\",\n    ATTR_RANDOM_Y: \"RandomY\",\n    ATTR_WIDTH: \"Width\",\n    ATTR_HEIGHT: \"Height\",\n    ATTR_INNER_WIDTH: \"InnerWidth\",\n    ATTR_INNER_HEIGHT: \"InnerHeight\",\n    ATTR_VALUES: \"Values\",\n    ATTR_VALUE: \"Value\",\n    ATTR_RANDOM_START_FRAME: \"RandomStartFrame\",\n    ATTR_SUB_PARTICLE_STYLE: \"SubParticleStyle\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ParticleStyle.ts\n **/","import { ArrayUtils, StringUtils, Logger, engineComponent, Utils } from \"neo-common\";\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { AnimationFrameBaseElement } from \"../../../AnimationFrame/AnimationFrame\";\nimport { StageController } from \"../../StageController\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\nvar protonProto: any = window[\"Proton\"];\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ProtonElement extends AnimationFrameBaseElement {\n    static Pool: Object = {};\n\n    private _animationName: string = \"\";\n\n    // style is mandatory\n    private _style: ParticleStyle;\n    private _styleName: string;\n    private _proton: Proton.Proton;\n    private _renderer: Proton.Renderer;\n    private _emitters: Array<Proton.Emitter>;\n\n    private _tint: number;\n    private _blendMode: number;\n    private _emitting: boolean;\n    private _stopping: boolean;\n    private _textures: Array<PIXI.Texture>;\n    private _animationSpeed: number;\n\n    constructor() {\n        super();\n\n        this._emitting = false;\n        this._stopping = true;\n        //this._stopped = true;\n        this._animationSpeed = 1;\n        this._emitters = [];\n        this._proton = new protonProto() as Proton.Proton;\n\n        this.onProtonUpdate = this.onProtonUpdate.bind(this);\n        this.onParticleCreated = this.onParticleCreated.bind(this);\n        this.onParticleUpdate = this.onParticleUpdate.bind(this);\n        this.onParticleDead = this.onParticleDead.bind(this);\n        this.transformSprite = this.transformSprite.bind(this);\n        this.alphaDead = this.alphaDead.bind(this);\n        this.scaleDead = this.scaleDead.bind(this);\n    }\n\n    protected frame_onFrame(): void {\n        this._proton.update();\n    }\n\n    protected get frame_name(): string {\n        return this._styleName;\n    }\n\n    public updateByNode(node: Element): void {\n        this.create(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        this.super2.createByNode(node);\n\n        /*\n         * Tint of animation. Hex color which colorize movie clip.\n         * @property Tint\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Tint\")) {\n            this._tint = parseInt(node.getAttribute(\"Tint\"), 16);\n        }\n\n        /*\n         * Blend mode for animation.\n         * Bleding modes:\n         *   0 = NORMAL;\n         *   1 = ADD;\n         *   2 = MULTIPLY;\n         *   3 = SCREEN;\n         *   4 = OVERLAY;\n         *   5 = DARKEN;\n         *   6 = LIGHTEN;\n         *   7 = COLOR_DODGE;\n         *   8 = COLOR_BURN;\n         *   9 = HARD_LIGHT;\n         *   10 = SOFT_LIGHT;\n         *   11 = DIFFERENCE;\n         *   12 = EXCLUSION;\n         *   13 = HUE;\n         *   14 = SATURATION;\n         *   15 = COLOR;\n         *   16 = LUMINOSITY;\n         * @property BlendMode\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"BlendMode\")) {\n            this._blendMode = parseInt(node.getAttribute(\"BlendMode\"));\n        }\n\n        /*\n         * Style define animation. You can use one style on more than one place.\n         * Style for ParticleElement has to be instance of ParticleStyle.\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Style\") || node.hasAttribute(\"Style2\")) {\n            if (node.hasAttribute(\"Style\")) {\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(\"Style\")];\n                this._styleName = this._style.node.nodeName;\n            } else {\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(\"Style2\")];\n                this._styleName = this._style.node.nodeName;\n            }\n\n            if (this._style != null) {\n                var next: Element = this._style.node.firstElementChild;\n                while (next != null) {\n                    if (next.nodeName === \"Emitter\") {\n                        var emitter: Proton.Emitter = new Proton.Emitter();\n                        this._emitters.push(emitter);\n\n                        var emitterNext: Element = next.firstElementChild;\n                        while (emitterNext != null) {\n                            switch (emitterNext.nodeName) {\n                                case \"Rate\":\n                                    if (emitterNext.hasAttribute(\"Rate\")) {\n                                        var rate: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"Rate\"),\n                                        );\n                                        if (rate.length === 2) {\n                                            emitter.rate = new Proton.Rate(rate[0], rate[1]);\n                                        } else {\n                                            if (DEBUG) {\n                                                this.log(\n                                                    \"WARNING Rate has different number of parameters. It has to have two parameters.\",\n                                                );\n                                            }\n                                        }\n                                    } else if (\n                                        emitterNext.hasAttribute(\"RateStart\") &&\n                                        emitterNext.hasAttribute(\"RateEnd\")\n                                    ) {\n                                        var rateStart: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"RateStart\"),\n                                        );\n                                        var rateEnd: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"RateEnd\"),\n                                        );\n                                        emitter.rate = new Proton.Rate(\n                                            new Proton.Span(rateStart[0], rateStart[1]),\n                                            new Proton.Span(rateEnd[0], rateEnd[1]),\n                                        );\n                                    } else {\n                                        if (DEBUG) {\n                                            this.log(\"WARNING Rate has wrong attributes\");\n                                        }\n                                    }\n                                    break;\n                                case \"Initializers\":\n                                    this.createInitializers(emitterNext, this._emitters[this._emitters.length - 1]);\n                                    break;\n                                case \"Behaviours\":\n                                    this.createBehaviours(emitterNext, this._emitters[this._emitters.length - 1]);\n                                    break;\n                                default:\n                                    if (DEBUG) {\n                                        this.log(\"WARNING unknown type for emitter\");\n                                    }\n                            }\n                            emitterNext = emitterNext.nextElementSibling;\n                        }\n\n                        if (next.hasAttribute(\"Emit\")) {\n                            emitter.emit(next.getAttribute(\"Emit\"));\n                        } else {\n                            emitter.emit();\n                        }\n\n                        if (next.hasAttribute(\"X\")) {\n                            emitter[\"p\"].x = parseInt(next.getAttribute(\"X\"));\n                        }\n\n                        if (next.hasAttribute(\"Y\")) {\n                            emitter[\"p\"].y = parseInt(next.getAttribute(\"Y\"));\n                        }\n                    }\n                    next = next.nextElementSibling;\n                }\n\n                if (this._emitters != null) {\n                    for (var i = 0; i < this._emitters.length; i++) {\n                        this._proton.addEmitter(this._emitters[i]);\n                    }\n\n                    this._renderer = new Proton.Renderer(\"other\", this._proton);\n                    this._renderer.onProtonUpdate = this.onProtonUpdate;\n                    this._renderer.onParticleCreated = this.onParticleCreated;\n                    this._renderer.onParticleUpdate = this.onParticleUpdate;\n                    this._renderer.onParticleDead = this.onParticleDead;\n                    this._emitting = false;\n                    this.frame_stop();\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no emitters\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(\"Style\"));\n                }\n            }\n        }\n\n        if (node.hasAttribute(\"Start\")) {\n            if (this.isFrameStopped) {\n                if (this._renderer != null) {\n                    this._renderer.stop();\n                }\n\n                this.removeChilds();\n\n                if (this._emitters != null && this._emitters.length > 0) {\n                    if (node.hasAttribute(\"Emit\")) {\n                        for (var i: number = 0; i < this._emitters.length; i++) {\n                            this._emitters[i].emit(node.getAttribute(\"Emit\"));\n                        }\n                    }\n                }\n                if (this._renderer != null) {\n                    this._renderer.start();\n                    this._stopping = false;\n                    this._emitting = true;\n                    this.frame_start();\n                }\n            }\n        }\n\n        if (node.hasAttribute(\"Stopping\")) {\n            this._emitting = false;\n            this._stopping = true;\n        }\n\n        if (node.hasAttribute(\"Stop\")) {\n            this.stop();\n        }\n    }\n\n    private onProtonUpdate(): void {\n        var emmiter0 = this._emitters[0];\n\n        if (emmiter0[\"emitTotalTimes\"] === \"none\" && emmiter0[\"particles\"].length === 0) {\n            this._emitting = false;\n            this.frame_stop();\n            this._renderer.stop();\n\n            this.removeChilds();\n        }\n    }\n\n    private onParticleCreated(particle: any): void {\n        if (this._stopping === false) {\n            particle.sprite = null;\n            if (particle.sprite != null) {\n                if (this._textures != null && this._textures.length > 0) {\n                    ProtonElement.Pool[this._animationName].push(particle.sprite);\n                    this.super2.removeChild(particle.sprite);\n                } else {\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                    this.super2.removeChild(particle.sprite);\n                }\n            }\n            let particleSprite: any;\n            if (this._textures != null && this._textures.length > 0) {\n                if (ProtonElement.Pool[this._animationName] == null) {\n                    ProtonElement.Pool[this._animationName] = [];\n                }\n\n                /*\n                particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\n                particleSprite.name = this._animationName;\n                */\n\n                if (ProtonElement.Pool[this._animationName].length === 0) {\n                    particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\n                    particleSprite.name = this._animationName;\n                } else {\n                    particleSprite = ProtonElement.Pool[this._animationName].shift();\n                }\n\n                particleSprite.loop = true;\n                particleSprite.animationSpeed = this._animationSpeed;\n                particleSprite.play();\n            } else {\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]] == null) {\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]] = [];\n                }\n\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]].length === 0) {\n                    particleSprite = new PIXI.Sprite(particle.target);\n                    particleSprite.name = particle.target.textureCacheIds[0];\n                } else {\n                    particleSprite = ProtonElement.Pool[particle.target.textureCacheIds[0]].shift();\n                }\n            }\n            if (this._tint != null) {\n                particleSprite.tint = this._tint;\n            }\n\n            if (this._blendMode != null) {\n                particleSprite.blendMode = CustomUtils.getBlendMode(this._blendMode);\n            }\n\n            particleSprite.visible = true;\n            particle.sprite = particleSprite;\n            this.super2.addChild(particleSprite);\n        }\n    }\n\n    private onParticleUpdate(particle: any): void {\n        if (particle != null && particle.sprite != null) {\n            this.transformSprite(particle.sprite, particle);\n        }\n    }\n\n    private onParticleDead(particle: any) {\n        if (particle.sprite != null) {\n            particle.sprite.visible = false;\n            if (particle.sprite instanceof PIXI.extras.AnimatedSprite) {\n                particle.sprite.stop();\n            }\n            this.super2.removeChild(particle.sprite);\n        }\n\n        particle.sprite = null;\n        particle.dead = true;\n        particle = null;\n    }\n\n    /**\n     * Transform sprite in particle with proton.\n     * @method transformSprite\n     * @param particleSprite any\n     * @param particle any\n     * @return void\n     */\n    private transformSprite(particleSprite: any, particle: any) {\n        if (\n            particleSprite.transform != null &&\n            !Utils.isNullOrUndefined(particleSprite) &&\n            !Utils.isNullOrUndefined(particle)\n        ) {\n            particleSprite.position.x = particle.p.x;\n            particleSprite.position.y = particle.p.y;\n            particleSprite.scale.x = particle.scale;\n            particleSprite.scale.y = particle.scale;\n            particleSprite.anchor.x = 0.5;\n            particleSprite.anchor.y = 0.5;\n            particleSprite.alpha = particle.alpha;\n            particleSprite.rotation = (particle.rotation * Math.PI) / 180;\n        } else {\n            particle.dead = true;\n        }\n    }\n\n    /**\n     * Stop emitting particles.\n     * @method stop\n     * @return void\n     */\n    stop(): void {\n        this._emitting = false;\n        this._stopping = true;\n        this.frame_stop();\n\n        if (this._renderer != null) {\n            this._renderer.stop();\n        }\n\n        this.removeChilds();\n    }\n\n    removeChilds(): void {\n        if (this.super2.children != null) {\n            let i: number = 0;\n            while (this.super2.children.length !== 0) {\n                if (this.super2.children[0] != null) {\n                    if (this._textures != null && this._textures.length > 0) {\n                        (this.super2.children[0] as PIXI.extras.AnimatedSprite).stop();\n                        ProtonElement.Pool[this._animationName].push(this.super2.children[0]);\n                    } else {\n                        ProtonElement.Pool[this.super2.children[0].name].push(this.super2.children[0]);\n                    }\n                    this.super2.removeChild(this.super2.children[0]);\n                }\n            }\n        }\n    }\n\n    internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._emitting = false;\n        this._stopping = true;\n        this.frame_stop();\n        this._textures = null;\n\n        if (this._emitters != null && this._emitters.length > 0) {\n            for (var i = 0; i < this._emitters.length; i++) {\n                if (this._emitters[i] != null) {\n                    this._proton.removeEmitter(this._emitters[i]);\n                    this._emitters[i].destroy();\n                    this._emitters[i] = null;\n                }\n            }\n        }\n\n        // removeEmitter\n        // particleSleep\n        // destroy\n\n        if (this._renderer != null) {\n            this._renderer.stop();\n            this._renderer = null;\n        }\n\n        this._proton.destroy();\n        this._proton = null;\n\n        this.removeChilds();\n    }\n\n    /**\n     * Create initializers from xml for emitter instance.\n     * Initializers create start values and behaviour for particle instances.\n     * @method createInitializers\n     * @param node is Element from xml\n     * @param emitter Proton.Emitter\n     * @return void\n     */\n    private createInitializers(node: Element, emitter: Proton.Emitter): void {\n        var next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"ImageTarget\":\n                    var imageTarget: Proton.ImageTarget = this.addImageTarget(next);\n                    if (imageTarget != null) {\n                        emitter.addInitialize(imageTarget);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING ImageTarget is null\");\n                        }\n                    }\n                    break;\n                case \"AnimationTarget\":\n                    this.addAnimationTarget(next);\n                    break;\n                case \"Radius\":\n                    var radius: Proton.Radius = this.addRadius(next);\n                    if (radius != null) {\n                        emitter.addInitialize(radius);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Radius is null\");\n                        }\n                    }\n                    break;\n                case \"Mass\":\n                    var mass: Proton.Mass = this.addMass(next);\n                    if (mass != null) {\n                        emitter.addInitialize(mass);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Mass is null\");\n                        }\n                    }\n                    break;\n                case \"Life\":\n                    var life: Proton.Life = this.addLife(next);\n                    if (life != null) {\n                        emitter.addInitialize(life);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Life is null\");\n                        }\n                    }\n                    break;\n                case \"Position\":\n                    var position: Proton.Position = this.addPosition(next);\n                    if (position != null) {\n                        emitter.addInitialize(position);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Position is null\");\n                        }\n                    }\n                    break;\n                case \"Velocity\":\n                    var velocity: Proton.Velocity = this.addVelocity(next);\n                    if (velocity != null) {\n                        emitter.addInitialize(velocity);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Velocity is null\");\n                        }\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown initializer\");\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Add initializer ImageTarget.\n     * This initializer add images instead of shapes as particles.\n     * Example:\n     *   <ImageTarget Image=\"IMAGE_1;IMAGE_2;IMAGE_3;IMAGE_4;IMAGE_5;IMAGE_6\" />\n     * @method addImageTarget\n     * @param node is Element from xml\n     * @return void\n     */\n    private addImageTarget(node: Element): Proton.Radius {\n        if (node.hasAttribute(\"Image\")) {\n            var arr: Array<string> = node.getAttribute(\"Image\").split(\";\");\n            var arrTextures: Array<PIXI.Texture> = [];\n            for (var i: number = 0; i < arr.length; i++) {\n                var resourceId = arr[i];\n                var texture: PIXI.Texture = StageController.getTextureByResourceId(resourceId);\n                if (texture != null) {\n                    arrTextures.push(texture);\n                }\n            }\n            if (arrTextures != null && arrTextures.length > 0) {\n                return new Proton.ImageTarget(arrTextures);\n            } else {\n                return null;\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Image target has no attribute Image\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add initializer animation as target for particle.\n     * Example:\n     *   <AnimationTarget Animation=\"[AnimationId]\" Speed=\"1\" Frames=\"numberOfFrames\" />\n     * @method addAnimationTarget\n     * @param node is Element from xml\n     * @return void\n     */\n    private addAnimationTarget(node: Element): void {\n        if (node.hasAttribute(\"Animation\") && node.hasAttribute(\"Frames\")) {\n            if (node.hasAttribute(\"Speed\")) {\n                this._animationSpeed = parseFloat(node.getAttribute(\"Speed\"));\n            }\n\n            this._animationName = node.getAttribute(\"Animation\");\n\n            this._textures = [];\n            for (var i = 0; i < parseInt(node.getAttribute(\"Frames\")) - 1; i++) {\n                var val = i < 10 ? \"0\" + i : i;\n                var texture: PIXI.Texture = PIXI.Texture.fromFrame(node.getAttribute(\"Animation\") + \"00\" + val);\n                this._textures.push(texture);\n            }\n        }\n    }\n\n    /**\n     * Add initializer Mass.\n     * Example:\n     *   <Mass Mass=\"1;5\" />\n     * @method addMass\n     * @param node is Element from xml\n     * @return Proton.Mass\n     */\n    private addMass(node: Element): Proton.Mass {\n        if (node.hasAttribute(\"Mass\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Mass\"));\n            if (arr.length === 3) {\n                return new Proton.Mass(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Mass(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Mass(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Mass attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Mass in Mass initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Radius.\n     * Example:\n     *   <Radius Radius=\"50;130\" />\n     * @method addRadius\n     * @param node is Element from xml\n     * @return Proton.Radius\n     */\n    private addRadius(node: Element): Proton.Radius {\n        if (node.hasAttribute(\"Radius\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Radius\"));\n            if (arr.length === 3) {\n                return new Proton.Radius(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Radius(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Radius(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Radius attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Radius in Radius initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Life.\n     * Example:\n     *   <Life Life=\"20\" />\n     * @method addLife\n     * @param node is Element from xml\n     * @return Proton.Life\n     */\n    private addLife(node: Element): Proton.Life {\n        if (node.hasAttribute(\"Life\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Life\"));\n            if (arr.length === 3) {\n                return new Proton.Life(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Life(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Life(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Life attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Life in Life initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Position. Position use zones. See method getZone().\n     * Example:\n     *   <Position>\n     *       <RectZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" />\n     *   </Position>\n     * @method addPosition\n     * @param node is Element from xml\n     * @return Proton.Position\n     */\n    private addPosition(node: Element): Proton.Position {\n        var zone: Element = node.firstElementChild;\n        if (zone != null) {\n            return new Proton.Position(this.getZone(zone));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Position has no zone\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Velocity.\n     * Example:\n     *   <Velocity RPan=\"0.1;0.3\" ThaPan=\"0;360\" Type=\"polar\" />\n     * @method addVelocity\n     * @param node is Element from xml\n     * @return Proton.Velocity\n     */\n    private addVelocity(node: Element): Proton.Velocity {\n        var rpan: Array<number>;\n        var thapan: Array<number>;\n        var type: string;\n\n        if (node.getAttribute(\"RPan\")) {\n            rpan = ArrayUtils.numberArray(node.getAttribute(\"RPan\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute RPan in Velocity\");\n            }\n        }\n\n        if (node.getAttribute(\"ThaPan\")) {\n            thapan = ArrayUtils.numberArray(node.getAttribute(\"ThaPan\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute ThaPan in Velocity\");\n            }\n        }\n\n        if (node.getAttribute(\"Type\")) {\n            type = node.getAttribute(\"Type\");\n        }\n\n        if (rpan != null && thapan != null) {\n            var rpanSpan: any;\n            if (rpan.length === 2) {\n                rpanSpan = new Proton.Span(rpan[0], rpan[1]);\n            } else {\n                rpanSpan = rpan[0];\n            }\n\n            var thapanSpan: any;\n            if (thapan.length === 2) {\n                thapanSpan = new Proton.Span(thapan[0], thapan[1]);\n            } else {\n                thapanSpan = thapan[0];\n            }\n            if (type != null) {\n                return new Proton.Velocity(rpanSpan, thapanSpan, type);\n            } else {\n                return new Proton.Velocity(rpanSpan, thapanSpan);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING missing some attribute in Velocity\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Return zone from xml.\n     * @method getZone\n     * @param node is Element from xml\n     * @return any\n     */\n    private getZone(node: Element): any {\n        switch (node.nodeName) {\n            case \"RectZone\":\n                var rectZoneX: number;\n                var rectZoneY: number;\n                var rectZoneWidth: number;\n                var rectZoneHeight: number;\n\n                if (node.hasAttribute(\"X\")) {\n                    rectZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    rectZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Width\")) {\n                    rectZoneWidth = parseInt(node.getAttribute(\"Width\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Width in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Height\")) {\n                    rectZoneHeight = parseInt(node.getAttribute(\"Height\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Height in RectZone\");\n                    }\n                }\n\n                if (rectZoneX != null && rectZoneY != null && rectZoneWidth != null && rectZoneHeight != null) {\n                    return new Proton.RectZone(rectZoneX, rectZoneY, rectZoneWidth, rectZoneHeight);\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in RectZone\");\n                    }\n                }\n                break;\n            case \"LineZone\":\n                var lineZoneX: number;\n                var lineZoneY: number;\n                var lineZoneWidth: number;\n                var lineZoneHeight: number;\n                var lineZoneDirection: string;\n\n                if (node.hasAttribute(\"X\")) {\n                    lineZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    lineZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Width\")) {\n                    lineZoneWidth = parseInt(node.getAttribute(\"Width\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Width in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Height\")) {\n                    lineZoneHeight = parseInt(node.getAttribute(\"Height\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Height in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Direction\")) {\n                    lineZoneDirection = node.getAttribute(\"Direction\");\n                }\n\n                if (lineZoneX != null && lineZoneY != null && lineZoneWidth != null && lineZoneHeight != null) {\n                    if (lineZoneDirection != null) {\n                        return new Proton.LineZone(\n                            lineZoneX,\n                            lineZoneY,\n                            lineZoneWidth,\n                            lineZoneHeight,\n                            lineZoneDirection,\n                        );\n                    } else {\n                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight);\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in LineZone\");\n                    }\n                }\n\n                break;\n            case \"CircleZone\":\n                var circleZoneX: number;\n                var circleZoneY: number;\n                var circleZoneRadius: number;\n\n                if (node.hasAttribute(\"X\")) {\n                    circleZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in CircleZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    circleZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in CircleZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Radius\")) {\n                    circleZoneRadius = parseInt(node.getAttribute(\"Radius\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Radius in CircleZone\");\n                    }\n                }\n\n                if (circleZoneX != null && circleZoneY != null && circleZoneRadius != null) {\n                    return new Proton.CircleZone(circleZoneX, circleZoneY, circleZoneRadius);\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in CircleZone\");\n                    }\n                }\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknown type zone: \" + node.nodeName);\n                }\n        }\n        return null;\n    }\n\n    /**\n     * Create behaviours from xml for emitter instance.\n     * This bevaiours will define behaviour of particle when particle is alive.\n     * @method createBehaviours\n     * @param node is Element from xml\n     * @param emitter Proton.Emitter\n     * @return void\n     */\n    private createBehaviours(node: Element, emitter: Proton.Emitter): void {\n        var next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"AlphaDead\":\n                    if (next.hasAttribute(\"Age\")) {\n                        emitter.addBehaviour(this.alphaDead(parseFloat(next.getAttribute(\"Age\"))));\n                    } else {\n                        emitter.addBehaviour(this.alphaDead(1));\n                    }\n                    break;\n                case \"ScaleDead\":\n                    emitter.addBehaviour(this.scaleDead());\n                    break;\n                case \"Alpha\":\n                    var alpha: Proton.Alpha = this.addAlpha(next);\n                    if (alpha != null) {\n                        emitter.addBehaviour(alpha);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Alpha is null\");\n                        }\n                    }\n                    break;\n                case \"Scale\":\n                    var scale: Proton.Scale = this.addScale(next);\n                    if (scale != null) {\n                        emitter.addBehaviour(scale);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Scale is null\");\n                        }\n                    }\n                    break;\n                case \"Rotate\":\n                    var rotate: Proton.Rotate = this.addRotate(next);\n                    if (rotate != null) {\n                        emitter.addBehaviour(rotate);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Rotate is null\");\n                        }\n                    }\n                    break;\n                case \"Color\":\n                    var color: Proton.Color = this.addColor(next);\n                    if (color != null) {\n                        emitter.addBehaviour(color);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Color is null\");\n                        }\n                    }\n                    break;\n                case \"CrossZone\":\n                    var crossZone: Proton.CrossZone = this.addCrossZone(next);\n                    if (crossZone != null) {\n                        emitter.addBehaviour(crossZone);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING CrossZone is null\");\n                        }\n                    }\n                    break;\n                case \"RandomDrift\":\n                    var randomDrift: Proton.RandomDrift = this.addRandomDrift(next);\n                    if (randomDrift != null) {\n                        emitter.addBehaviour(randomDrift);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING RandomDrift is null\");\n                        }\n                    }\n                    break;\n                case \"Gravity\":\n                    var gravity: Proton.Gravity = this.addGravity(next);\n                    if (gravity != null) {\n                        emitter.addBehaviour(gravity);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Gravity is null\");\n                        }\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown behaviour\");\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * AlphaDead is custom custom dead behaviour. After particle reach some age particle will fade out to alpha 0.\n     * Example:\n     *   <AlphaDead Age=\"10\" />\n     * @method alphaDead\n     * @param age number\n     * @return any\n     */\n    alphaDead(age: number): any {\n        var self: any = this;\n        return {\n            initialize: function (particle: any) {},\n            applyBehaviour: function (particle: any) {\n                if (particle.age >= age) {\n                    particle[\"transform\"][\"alphaA\"] = 1;\n                    particle[\"transform\"][\"alphaB\"] = 0;\n                }\n\n                if (particle.age >= particle.life) {\n                    if (particle.sprite != null) {\n                        if (self._textures != null && self._textures.length > 0) {\n                            ProtonElement.Pool[self._animationName].push(particle.sprite);\n                        } else {\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                        }\n                        self.super2.removeChild(particle.sprite);\n                    }\n                    particle.sprite = null;\n                    particle.dead = true;\n                    particle = null;\n                }\n            },\n        };\n    }\n\n    /**\n     * ScaleDead is custom custom dead behaviour. After particle reach some energy particle will scale down to zero.\n     * Example:\n     *   <ScaleDead />\n     * @method scaleDead\n     * @return any\n     */\n    scaleDead(): any {\n        var self: any = this;\n        return {\n            initialize: function (particle: any) {\n                particle.scale = 0;\n            },\n            applyBehaviour: function (particle: any) {\n                if (particle.energy >= 2 / 3) {\n                    particle.scale = (1 - particle.energy) * 3;\n                } else if (particle.energy <= 1 / 3) {\n                    particle.scale = particle.energy * 3;\n                }\n                if (particle.scale < 0) {\n                    if (particle.sprite != null) {\n                        if (this._textures != null && this._textures.length > 0) {\n                            ProtonElement.Pool[this._animationName].push(particle.sprite);\n                        } else {\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                        }\n                        self.super2.removeChild(particle.sprite);\n                    }\n                    particle.sprite = null;\n                    particle.dead = true;\n                    particle = null;\n                }\n            },\n        };\n    }\n\n    /**\n     * Add behaviour Alpha.\n     * Example:\n     *   <Alpha Start=\"0\" End=\"1\" Life=\"5\" />\n     * @method addAlpha\n     * @param node is Element from xml\n     * @return Proton.Alpha\n     */\n    private addAlpha(node: Element): Proton.Alpha {\n        var start: number;\n        var end: number;\n        var life: Proton.Life;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = parseFloat(node.getAttribute(\"Start\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = parseFloat(node.getAttribute(\"End\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no attribute End\");\n            }\n        }\n\n        if (node.hasAttribute(\"Life\")) {\n            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\n        }\n\n        if (start != null && end != null) {\n            if (life != null) {\n                return new Proton.Alpha(start, end, life);\n            } else {\n                return new Proton.Alpha(start, end);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no Start or End attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Scale.\n     * Example:\n     *   <Scale Start=\"1\" End=\"1.5\" />\n     * @method addScale\n     * @param node is Element from xml\n     * @return Proton.Scale\n     */\n    private addScale(node: Element): Proton.Scale {\n        var start: Array<number>;\n        var end: Array<number>;\n        var life: Proton.Life;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = ArrayUtils.numberArray(node.getAttribute(\"Start\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Scale has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = ArrayUtils.numberArray(node.getAttribute(\"End\"));\n        }\n\n        if (node.hasAttribute(\"Life\")) {\n            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\n        }\n\n        if (start != null) {\n            var startSpan: any;\n            if (start.length === 2) {\n                startSpan = new Proton.Span(start[0], start[1]);\n            } else {\n                startSpan = start[0];\n            }\n\n            var endSpan: any;\n            if (end != null) {\n                if (end.length === 2) {\n                    endSpan = new Proton.Span(end[0], end[1]);\n                } else {\n                    endSpan = end[0];\n                }\n            }\n\n            if (startSpan != null && endSpan != null && life != null) {\n                return new Proton.Scale(startSpan, endSpan, life);\n            } else if (startSpan != null && endSpan != null) {\n                return new Proton.Scale(startSpan, endSpan);\n            } else {\n                return new Proton.Scale(startSpan);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Scale has no Start or End attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Rotate.\n     * Example:\n     *   <Rotate Start=\"0;360\" End=\"-0.5;0.5\" Style=\"add\" />\n     * @method addRotate\n     * @param node is Element from xml\n     * @return Proton.Rotate\n     */\n    private addRotate(node: Element): Proton.Rotate {\n        var start: Array<number>;\n        var end: Array<number>;\n        var style: string;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = ArrayUtils.numberArray(node.getAttribute(\"Start\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Rotate has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = ArrayUtils.numberArray(node.getAttribute(\"End\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Rotate has no attribute End\");\n            }\n        }\n\n        if (node.hasAttribute(\"Style\")) {\n            style = node.getAttribute(\"Style\");\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Style has no attribute End\");\n            }\n        }\n\n        if (start != null && end != null && style != null) {\n            var startSpan: any;\n            if (start.length === 2) {\n                startSpan = new Proton.Span(start[0], start[1]);\n            } else {\n                startSpan = start[0];\n            }\n\n            var endSpan: any;\n            if (end.length === 2) {\n                endSpan = new Proton.Span(end[0], end[1]);\n            } else {\n                endSpan = start[0];\n            }\n\n            return new Proton.Rotate(startSpan, endSpan, style);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Rotate has no Start or End attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour RandomDrift.\n     * Example:\n     *   <RandomDrift DriftX=\"5\" DriftY=\"0\" Delay=\"0.15\"/>\n     * @method addRandomDrift\n     * @param node is Element from xml\n     * @return Proton.RandomDrift\n     */\n    private addRandomDrift(node: Element): Proton.RandomDrift {\n        var driftX: number;\n        var driftY: number;\n        var delay: number;\n\n        if (node.hasAttribute(\"DriftX\")) {\n            driftX = parseFloat(node.getAttribute(\"DriftX\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute DriftX\");\n            }\n        }\n\n        if (node.hasAttribute(\"DriftY\")) {\n            driftY = parseFloat(node.getAttribute(\"DriftY\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute DriftY\");\n            }\n        }\n\n        if (node.hasAttribute(\"Delay\")) {\n            delay = parseFloat(node.getAttribute(\"Delay\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute Delay\");\n            }\n        }\n\n        if (driftX != null && driftY != null && delay != null) {\n            return new Proton.RandomDrift(driftX, driftY, delay);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no valid attributes\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Gravity.\n     * Example:\n     *   <Gravity Gravity=\"5\" />\n     * @method addGravity\n     * @param node is Element from xml\n     * @return Proton.Gravity\n     */\n    private addGravity(node: Element): Proton.Gravity {\n        var gravity: number;\n\n        if (node.hasAttribute(\"Gravity\")) {\n            gravity = parseFloat(node.getAttribute(\"Gravity\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Gravity has no attribute Gravity\");\n            }\n        }\n\n        if (gravity != null) {\n            return new Proton.Gravity(gravity);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Gravity has no valid attributes\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Color.\n     * Example:\n     *   <Color Color=\"FFFFFF\" EndColor=\"000000\" />\n     * @method addColor\n     * @param node is Element from xml\n     * @return Proton.Color\n     */\n    private addColor(node: Element): Proton.Color {\n        var i: number;\n        var arr: Array<string>;\n        var endArr: Array<string>;\n        var color: Array<string> = [];\n        var endColor: Array<string> = [];\n\n        if (node.hasAttribute(\"Color\")) {\n            arr = node.getAttribute(\"Color\").split(\";\");\n            for (i = 0; i < arr.length; i++) {\n                color.push(StringUtils.hexColor(arr[i]));\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Color has no attribute Color\");\n            }\n        }\n\n        if (node.hasAttribute(\"EndColor\")) {\n            endArr = node.getAttribute(\"EndColor\").split(\";\");\n            for (i = 0; i < endArr.length; i++) {\n                endColor.push(StringUtils.hexColor(endArr[i]));\n            }\n        }\n\n        if (color.length > 0) {\n            if (endColor.length > 0) {\n                return new Proton.Color(color, endColor);\n            } else {\n                return new Proton.Color(color);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Color has no Color attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour CrossZone. CrossZone is used for collisions. Need some zone. See method getZone().\n     * Example:\n     *   <CrossZone Type=\"bound\">\n     *       <LineZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" Direction=\"down\" />\n     *   </CrossZone>\n     * @method addCrossZone\n     * @param node is Element from xml\n     * @return Proton.CrossZone\n     */\n    private addCrossZone(node: Element): Proton.CrossZone {\n        var zone: any;\n        var type: string;\n\n        if (node.firstElementChild != null) {\n            zone = this.getZone(node.firstElementChild);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no zone in CrossZone\");\n            }\n        }\n\n        if (node.hasAttribute(\"Type\")) {\n            type = node.getAttribute(\"Type\");\n        }\n\n        if (zone != null) {\n            if (type != null) {\n                return new Proton.CrossZone(zone, type);\n            } else {\n                return new Proton.CrossZone(zone);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no zone in CrossZone\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    clone(): ProtonElement {\n        var element: ProtonElement = new ProtonElement();\n\n        element.super2.position.x = this.super2.position.x;\n        element.super2.position.y = this.super2.position.y;\n        element.super2.pivot.x = this.super2.pivot.x;\n        element.super2.pivot.y = this.super2.pivot.y;\n        element.super2.scale.x = this.super2.scale.x;\n        element.super2.scale.y = this.super2.scale.y;\n        element.super2.visible = this.super2.visible;\n        var node: Element = document.createElement(\"particle\");\n        node.setAttribute(\"Style2\", this._styleName);\n\n        element.create(node);\n        element.super2._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ProtonElement.ts\n **/","import { engineComponent, StringUtils, ArrayUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BezierPlugin } from \"gsap\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { StageController } from \"../Components/StageController\";\nimport { AnimationStyle } from \"../Components/Elements/Styles/AnimationStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { CustomUtils } from \"../Utils/CustomUtils\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class RopeElement extends BaseElement {\n    // private _rope: PIXI.mesh.Rope;\n    private _rope: PIXI.mesh.Rope;\n    private _texture: PIXI.Texture;\n    private _pointsCount: number;\n    private _bezierPoints: Array<PIXI.Point>;\n    private _pointsData: Array<any>;\n    private _pointsDataBuffer: Array<PIXI.Point>;\n    private _blendMode: number;\n    private _animationStyle: AnimationStyle;\n    private _frame: number;\n    private _tint: number;\n    private _curviness: number;\n    private _continue: boolean;\n    private _isPlaying: boolean;\n    private _randomStartFrame: boolean;\n    private _time: number;\n    private count: number;\n\n    private _ropeLength: number;\n    private _increment: number;\n    private _parts: Array<number>;\n    private _strength: Array<Array<number>>;\n    private _smooth: Array<Array<number>>;\n\n    private _created: boolean;\n    private _noWebGL: boolean = false;\n\n    constructor() {\n        super();\n\n        this._rope = null;\n        this._pointsCount = 100;\n        this._bezierPoints = [];\n        this._pointsData = [];\n        this._pointsDataBuffer = [];\n        this._blendMode = 0;\n        this._animationStyle = null;\n        this._frame = 0;\n        this._tint = null;\n        this._curviness = 1;\n        this._continue = false;\n        this._isPlaying = false;\n        this._randomStartFrame = false;\n        this._time = -1;\n\n        /**\n         * Group of variables for wave effect\n         */\n        this.count = 0;\n        this._ropeLength = 0;\n        this._increment = 0;\n        this._parts = [];\n        this._strength = [];\n        this._smooth = [];\n\n        this._created = false;\n\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\n            this._noWebGL = true;\n        }\n    }\n\n    public createByNode(node: Element): void {\n        if (!this._created) {\n            super.createByNode(node);\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS_COUNT)) {\n                this._pointsCount = parseInt(node.getAttribute(RopeElementAttributes.POINTS_COUNT));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.BLEND_MODE)) {\n                this._blendMode = CustomUtils.getBlendMode(\n                    parseInt(node.getAttribute(RopeElementAttributes.BLEND_MODE)),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.CURVINESS)) {\n                this._curviness = parseFloat(node.getAttribute(RopeElementAttributes.CURVINESS));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.RANDOM_START_FRAME)) {\n                this._randomStartFrame = StringUtils.parseBoolean(\n                    node.getAttribute(RopeElementAttributes.RANDOM_START_FRAME),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.TIME)) {\n                this._randomStartFrame = false;\n                this._time = parseFloat(node.getAttribute(RopeElementAttributes.TIME));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.TINT)) {\n                if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\n                    this._tint = null;\n                } else {\n                    this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\n                let pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\n                let bezierData = BezierPlugin.bezierThrough(pointsData);\n\n                this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\n                let textureName = node.getAttribute(RopeElementAttributes.IMAGE);\n                if (textureName.indexOf(\"ANI_\") === 0) {\n                    this._animationStyle = <AnimationStyle>StyleManager.Styles[textureName];\n                    if (this._animationStyle != null) {\n                        textureName = this._animationStyle.animation + \"0000\";\n                    }\n                }\n\n                this._texture = StageController.getTextureByResourceId(textureName);\n                if (this._texture != null) {\n                    if (this._bezierPoints.length == 0) {\n                        for (let i: number = 0; i < this._pointsCount; i++) {\n                            this._bezierPoints.push(\n                                new PIXI.Point(Math.round(this._texture.width / (this._pointsCount - 1)) * i, 0),\n                            );\n                        }\n                    }\n\n                    this._rope = new PIXI.mesh.Rope(this._texture, this._bezierPoints);\n                    if (this._noWebGL) {\n                        this._rope.canvasPadding = 5;\n                    }\n                    this._rope.blendMode = CustomUtils.getBlendMode(this._blendMode);\n\n                    if (this._tint != null) {\n                        this._rope.tint = this._tint;\n                    }\n\n                    this.addChild(this._rope);\n                }\n            }\n\n            this._created = true;\n        }\n    }\n\n    /**\n     * Add base points to buffer.\n     * @param {Array<any>} points\n     */\n    public addPoints(points: Array<PIXI.Point>): void {\n        this._pointsDataBuffer = this._pointsDataBuffer.concat(points);\n    }\n\n    /**\n     * Get base points to buffer.\n     */\n    public getPoints(): Array<any> {\n        return this._pointsData;\n    }\n\n    /**\n     *\n     * @param {Element} node\n     */\n    public updateByNode(node: Element): void {\n        if (this._created) {\n            super.updateByNode(node);\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\n                let XMLpointsData: Array<PIXI.Point> = this.formatPoints(\n                    node.getAttribute(RopeElementAttributes.POINTS),\n                );\n                this._pointsData = [];\n\n                if (\n                    node.hasAttribute(RopeElementAttributes.REVERSE_POINTS) &&\n                    StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.REVERSE_POINTS))\n                ) {\n                    this._pointsData = XMLpointsData.concat(this._pointsDataBuffer).reverse();\n                } else {\n                    this._pointsData = this._pointsDataBuffer.concat(XMLpointsData);\n                }\n                this._pointsDataBuffer = [];\n                // this.updatePoints(this._pointsData);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.GLOBAL_POINTS)) {\n                this._pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS), true);\n                this.updatePoints(this._pointsData);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.TINT)) {\n                if (this._rope != null) {\n                    if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\n                        this._tint = null;\n                    } else {\n                        this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\n                    }\n                    this._rope.tint = this._tint;\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\n                let textureName = node.getAttribute(RopeElementAttributes.IMAGE);\n                if (textureName.indexOf(\"ANI_\") === 0) {\n                    this._animationStyle = <AnimationStyle>StyleManager.Styles[textureName];\n                    if (this._animationStyle != null) {\n                        textureName = this._animationStyle.animation + \"0000\";\n                    }\n                }\n\n                this._texture = StageController.getTextureByResourceId(textureName);\n                if (this._texture != null) {\n                    if (this._rope != null) {\n                        this._rope.texture = this._texture;\n                    }\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.ROPE_LENGTH)) {\n                this._ropeLength = parseInt(node.getAttribute(RopeElementAttributes.ROPE_LENGTH));\n            }\n\n            /**\n             *  - : from left to right\n             *  + : from right to left\n             */\n            if (node.hasAttribute(RopeElementAttributes.INCREMENT)) {\n                this._increment = parseFloat(node.getAttribute(RopeElementAttributes.INCREMENT));\n            }\n\n            /**\n             *  Parts of Image with different wave effect moving\n             *  It depends on points of images\n             */\n            if (node.hasAttribute(RopeElementAttributes.PARTS)) {\n                this._parts = ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.PARTS));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.STRENGTH)) {\n                let strength = ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.STRENGTH));\n                for (let i = 0; i < this._parts.length; i++) {\n                    if (strength.length == 2) {\n                        this._strength.push([strength[0], strength[1]]);\n                    } else {\n                        this._strength.push([strength[i * 2], strength[i * 2 + 1]]);\n                    }\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.SMOOTH)) {\n                let smooth = ArrayUtils.numberArray(node.getAttribute(RopeElementAttributes.SMOOTH));\n                for (let i = 0; i < this._parts.length; i++) {\n                    if (smooth.length == 2) {\n                        this._smooth.push([smooth[0], smooth[1]]);\n                    } else {\n                        this._smooth.push([smooth[i * 2], smooth[i * 2 + 1]]);\n                    }\n                }\n            }\n\n            if (\n                node.hasAttribute(RopeElementAttributes.CONTINUE) &&\n                StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE))\n            ) {\n                this._continue = true;\n            }\n\n            if (\n                node.hasAttribute(RopeElementAttributes.PLAY) &&\n                StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.PLAY))\n            ) {\n                this.play();\n            }\n\n            if (\n                node.hasAttribute(RopeElementAttributes.STOP) &&\n                StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.STOP))\n            ) {\n                this.stop();\n            }\n        }\n    }\n\n    /**\n     *\n     */\n    private play(): void {\n        if (this._animationStyle != null) {\n            if (!this._continue || !this._isPlaying) {\n                Tweens.removeTweens(this, \"_frame\");\n                this.count = 0;\n\n                let tweenDuration = 60 / this._animationStyle.speed;\n                let tl = Tweens.customTween(this, {\n                    tween: \"_frame\",\n                    tweenValues: [0, this._animationStyle.endFrame],\n                    tweenDuration: [tweenDuration],\n                    tweenEase: [\"linear\"],\n                    tweenLoop: this._animationStyle.loop,\n                    callbackType: \"onUpdate\",\n                    callbackFunction: this.updateTexture,\n                    callbackScope: this,\n                    callbackParams: [\"{self}\"],\n                });\n                tl.pause();\n\n                if (this._randomStartFrame) {\n                    tl.time(Math.random() * (tweenDuration / 60));\n                }\n\n                if (this._time > 0) {\n                    tl.time(this._time);\n                }\n\n                tl.play();\n                this._isPlaying = true;\n            }\n        } else {\n            Tweens.removeTweens(this, \"rope\");\n\n            Tweens.customTween(this, {\n                tween: \"rope\",\n                tweenValues: [0, 0],\n                tweenDuration: [120],\n                tweenEase: [\"linear\"],\n                tweenLoop: true,\n                callbackType: \"onUpdate\",\n                callbackFunction: this.updateTexture,\n                callbackScope: this,\n                callbackParams: [\"{self}\"],\n            });\n\n            this._isPlaying = true;\n        }\n    }\n\n    /**\n     *\n     */\n    public stop(): void {\n        Tweens.removeTweens(this, \"rope\");\n        this._isPlaying = false;\n        this.count = 0;\n    }\n\n    /**\n     *\n     * @param self\n     */\n    private updateTexture(self: any): void {\n        if (this._rope != null) {\n            this.count += this._increment;\n            for (let i: number = 0; i < this._pointsCount; i++) {\n                for (let j = 0; j < this._parts.length; j++) {\n                    if (i > this._parts[j]) {\n                        this._rope.points[i].y = Math.sin(i * this._smooth[j][0] + this.count) * this._strength[j][0];\n                        this._rope.points[i].x =\n                            i * this._ropeLength + Math.cos(i * this._smooth[j][1] + this.count) * this._strength[j][1];\n                    }\n                }\n            }\n        }\n\n        if (this._animationStyle != null) {\n            let currentFrame: number = Math.round(this._frame);\n\n            if (currentFrame > self.previousValue || currentFrame == 0) {\n                this._rope.texture = StageController.getTextureByResourceId(\n                    this._animationStyle.animation + this.zerosPad(currentFrame, 4),\n                );\n            }\n            self.previousValue = currentFrame;\n        }\n    }\n\n    /**\n     *\n     * @param num\n     * @param size\n     */\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    /**\n     *\n     * @param {Array<any>} points\n     */\n    private updateMeshPoints(points: Array<any>): void {\n        if (this._rope != null) {\n            for (let i: number = 0; i < this._pointsCount; i++) {\n                this._rope.points[i].x = points[i].x;\n                this._rope.points[i].y = points[i].y;\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {Array<any>} points\n     */\n    public updatePoints(points: Array<any>): void {\n        let bezierData = BezierPlugin.bezierThrough(points, this._curviness);\n        this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\n\n        this.updateMeshPoints(this._bezierPoints);\n    }\n\n    /**\n     *\n     * @param {string} points\n     * @param {boolean} useGlobal\n     * @returns {Array<PIXI.Point>}\n     */\n    private formatPoints(points: string, useGlobal: boolean = false): Array<PIXI.Point> {\n        let result: Array<PIXI.Point> = [];\n        let regex = /\\[(.*?)\\]/g;\n        let data = points.match(regex);\n\n        for (let i: number = 0; i < data.length; i++) {\n            let pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\n\n            if (pointArray.length == 2) {\n                let x = this.formatPoint(pointArray[0], \"x\", useGlobal);\n                let y = this.formatPoint(pointArray[1], \"y\", useGlobal);\n\n                result.push(new PIXI.Point(x, y));\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *\n     * @param {string} value\n     * @param {string} id\n     * @param {boolean} useGlobal\n     * @returns {number}\n     */\n    private formatPoint(value: string, id: string, useGlobal: boolean = false): number {\n        let result: number;\n        if (value == \"c\") {\n            result = this[id];\n        } else {\n            if (useGlobal) {\n                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\n            } else {\n                result = parseInt(value);\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *\n     * @param data\n     * @param {number} length\n     * @returns {Array<PIXI.Point>}\n     */\n    private getBezierStepPoints(data: any, length: number): Array<PIXI.Point> {\n        let segmentLength = length / data.x.length;\n        let pointPerSegment: Array<number> = [];\n        let bezierStepPoints: Array<PIXI.Point> = [];\n\n        if (data.x.length > 1) {\n            segmentLength = Math.round(segmentLength);\n            let sum = 0;\n            for (let i: number = 0; i < data.x.length - 1; i++) {\n                pointPerSegment.push(segmentLength);\n                sum += segmentLength;\n            }\n            pointPerSegment.push(length - sum);\n        } else {\n            pointPerSegment = [segmentLength];\n        }\n\n        let time = 0;\n        for (let i: number = 0; i < data.x.length; i++) {\n            for (let j: number = 0; j < pointPerSegment[i]; j++) {\n                if (i + 1 < data.x.length) {\n                    time = j / pointPerSegment[i];\n                } else {\n                    time = j / (pointPerSegment[i] - 1);\n                }\n                bezierStepPoints.push(this.bezier(time, data.x[i], data.y[i]));\n            }\n        }\n\n        return bezierStepPoints;\n    }\n\n    /**\n     *\n     * @param {number} t\n     * @param {IBezierData} dataX\n     * @param {IBezierData} dataY\n     * @returns {PIXI.Point}\n     */\n    private bezier(t: number, dataX: IBezierData, dataY: IBezierData): PIXI.Point {\n        let cX = 3 * dataX.ba,\n            bX = 3 * (dataX.c - dataX.b) - cX,\n            aX = dataX.da - cX - bX;\n\n        let cY = 3 * dataY.ba,\n            bY = 3 * (dataY.c - dataY.b) - cY,\n            aY = dataY.da - cY - bY;\n\n        let x = aX * Math.pow(t, 3) + bX * Math.pow(t, 2) + cX * t + dataX.a;\n        let y = aY * Math.pow(t, 3) + bY * Math.pow(t, 2) + cY * t + dataY.a;\n\n        return new PIXI.Point(x, y);\n    }\n\n    /**\n     *\n     * @returns {RopeElement}\n     */\n    clone(): RopeElement {\n        let element: RopeElement = new RopeElement();\n\n        element._created = this._created;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element._pointsCount = this._pointsCount;\n        element._texture = this._texture;\n        element._blendMode = this._blendMode;\n        element._animationStyle = this._animationStyle;\n        element._frame = this._frame;\n        element._tint = this._tint;\n        element._randomStartFrame = this._randomStartFrame;\n        element._increment = this._increment;\n        element._parts = this._parts;\n        element._smooth = this._smooth;\n        element._strength = this._strength;\n        element._ropeLength = this._ropeLength;\n\n        element._bezierPoints = [];\n        for (let i = 0; i < this._bezierPoints.length; i++) {\n            element._bezierPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\n        }\n\n        element._rope = new PIXI.mesh.Rope(element._texture, element._bezierPoints);\n        element._rope.canvasPadding = this._rope.canvasPadding;\n        element._rope.blendMode = element._blendMode;\n\n        element.addChild(element._rope);\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport interface IBezierData {\n    a: number;\n    b: number;\n    ba: number;\n    c: number;\n    ca: number;\n    d: number;\n    da: number;\n}\n\nconst RopeElementAttributes = {\n    /**\n     * Blend mode of mesh object.\n     * @property BlendMode\n     * @default 0\n     */\n    BLEND_MODE: \"BlendMode\",\n    /**\n     * Bezier curviness.\n     * @default 1\n     */\n    CURVINESS: \"Curviness\",\n    /**\n     * Start animation in random frame.\n     * @default false\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    /**\n     * Start time of the first animation loop. Automatically set RandomStartFrame to false.\n     * @default false\n     */\n    TIME: \"Time\",\n    /**\n     * Global points, pairs of X,Y coords for mesh.\n     * @property Points\n     * @default null\n     */\n    GLOBAL_POINTS: \"GlobalPoints\",\n    ROPE_LENGTH: \"RopeLength\",\n    INCREMENT: \"Increment\",\n    PARTS: \"Parts\",\n    STRENGTH: \"Strength\",\n    SMOOTH: \"Smooth\",\n    /**\n     * Reference to image from resources.\n     * @property Image\n     * @default 0\n     */\n    IMAGE: \"Image\",\n    /**\n     * Play animation\n     * @property Play\n     * @default false\n     */\n    PLAY: \"Play\",\n    /**\n     * If true, animation will not be stopped and restarted, when PLAY is fired\n     * @property Play\n     * @default false\n     */\n    CONTINUE: \"Continue\",\n    /**\n     * Points, pairs of X,Y coords for mesh.\n     * @property Points\n     * @default null\n     */\n    POINTS: \"Points\",\n    /**\n     * Number of X,Y points for mesh. Higher make mesh detailed.\n     * @property PointsCount\n     * @default 100\n     */\n    POINTS_COUNT: \"PointsCount\",\n    /**\n     * Reverse collected input points.\n     */\n    REVERSE_POINTS: \"ReversePoints\",\n    /**\n     * Stop animation\n     * @property Play\n     * @default false\n     */\n    STOP: \"Stop\",\n    /**\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/RopeElement.ts\n **/","import { Logger } from \"neo-common\";\n\n/**\n * Definitions for payline for all kind of reels.\n * @class PaylinesDefinitions\n */\nexport class PaylinesDefinitions {\n    private static _paylineGroupsDefinitions: Object = {};\n\n    /**\n     * Initialize payline definiftion specific for game.\n     * @method initializePaylineDefinitions\n     * @param paylineGroupId string\n     * @return void\n     */\n    static initializePaylineDefinitions(paylineGroupId: string) {\n        var definition: Object = {};\n\n        switch (paylineGroupId) {\n            case \"5x4\":\n                definition[1] = [1, 1, 1, 1, 1];\n                definition[2] = [2, 2, 2, 2, 2];\n                definition[3] = [0, 0, 0, 0, 0];\n                definition[4] = [3, 3, 3, 3, 3];\n                definition[5] = [1, 2, 3, 2, 1];\n                definition[6] = [2, 1, 0, 1, 2];\n                definition[7] = [1, 0, 0, 0, 1];\n                definition[8] = [2, 3, 3, 3, 2];\n                definition[9] = [1, 1, 2, 1, 1];\n                definition[10] = [2, 2, 1, 2, 2];\n                definition[11] = [0, 0, 1, 0, 0];\n                definition[12] = [3, 3, 2, 3, 3];\n                definition[13] = [1, 1, 2, 2, 1];\n                definition[14] = [2, 2, 1, 1, 2];\n                definition[15] = [0, 0, 0, 1, 0];\n                definition[16] = [3, 3, 3, 2, 3];\n                definition[17] = [0, 1, 2, 1, 0];\n                definition[18] = [3, 2, 1, 2, 3];\n                definition[19] = [0, 0, 1, 1, 0];\n                definition[20] = [3, 3, 2, 2, 3];\n                definition[21] = [0, 1, 0, 1, 0];\n                definition[22] = [3, 2, 3, 2, 3];\n                definition[23] = [1, 2, 2, 1, 1];\n                definition[24] = [2, 1, 1, 2, 2];\n                definition[25] = [1, 1, 0, 1, 1];\n                definition[26] = [2, 2, 3, 2, 2];\n                definition[27] = [1, 0, 1, 0, 1];\n                definition[28] = [2, 3, 2, 3, 2];\n                definition[29] = [0, 1, 1, 1, 0];\n                definition[30] = [3, 2, 2, 2, 3];\n                definition[31] = [1, 2, 1, 0, 1];\n                definition[32] = [2, 1, 2, 3, 2];\n                definition[33] = [0, 1, 1, 0, 0];\n                definition[34] = [3, 2, 2, 3, 3];\n                definition[35] = [1, 2, 2, 2, 1];\n                definition[36] = [2, 1, 1, 1, 2];\n                definition[37] = [1, 2, 1, 2, 1];\n                definition[38] = [2, 1, 2, 1, 2];\n                definition[39] = [1, 0, 1, 2, 1];\n                definition[40] = [2, 3, 2, 1, 2];\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\n                }\n                return;\n        }\n\n        this._paylineGroupsDefinitions[paylineGroupId] = definition;\n    }\n\n    /**\n     * Get payline by id and group id.\n     * @method getPaylineDefinitionsById\n     * @param paylineId string\n     * @param paylineGroupId string\n     * @return void\n     */\n    static getPaylineDefinitionsById(paylineId: number, paylineGroupId: string): Array<number> {\n        if (this._paylineGroupsDefinitions != null) {\n            if (this._paylineGroupsDefinitions[paylineGroupId] != null) {\n                if (this._paylineGroupsDefinitions[paylineGroupId][paylineId] != null) {\n                    return this._paylineGroupsDefinitions[paylineGroupId][paylineId];\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no paylineId: \" + paylineId + \" in \" + paylineGroupId);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no paylines definitions\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"PaylineDefinitions\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesDefinitions.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Attributes } from \"../Utils/Attributes\";\nimport { GeneralConfigurationAttributes } from \"../Components/Configuration\";\nimport { Languages } from \"../Utils/Languages\";\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { Symbols } from \"./Symbols\";\n\n/**\n * The symbol element is used for hold symbol special cases and handle symbol behaviour on screen.\n * @class Symbol\n * @extends SwitchElement\n */\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Symbol extends SwitchElement {\n    static Teas: boolean = false;\n\n    //special symbol cases\n    static CaseRotation: string = \"ROTATION\";\n    static CaseBlur: string = \"BLUR\";\n\n    static CaseEmpty: string = \"EMPTY\";\n    static CaseNormal: string = \"NORMAL\";\n    static CaseIdle: string = \"IDLE\";\n    static CaseNowin: string = \"NOWIN\";\n    static CaseWin: string = \"WIN\";\n    static CaseCycle: string = \"CYCLE\";\n\n    static CaseImpact: string = \"IMPACT\";\n    static CaseTease: string = \"TEASE\";\n    static CaseImpactWithTease: string = \"IMPACT_WITH_TEASE\";\n\n    //offsets for symbol which has bigger dimension than standard symbols\n    offsetX: number;\n    offsetY: number;\n\n    zIndex: number = 0;\n    type: string;\n    hasWinFrame: boolean;\n\n    usedInPool: boolean;\n    id: number;\n    amount: number = 0;\n    symbols: Symbols;\n\n    constructor() {\n        super();\n\n        //default values\n        this.offsetX = 0;\n        this.offsetY = 0;\n\n        this.center = true;\n\n        this.usedInPool = false;\n        this.id = -1;\n\n        this.hasWinFrame = true;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        this.offsetX = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_X, this.offsetX);\n        this.offsetY = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_Y, this.offsetY);\n\n        if (node.hasAttribute(SymbolAttributes.OFFSET)) {\n            this.offsetX = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\n            this.offsetY = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\n        }\n\n        this.zIndex = Attributes.assignFloatAttribute(node, SymbolAttributes.Z_INDEX, this.zIndex);\n        this.type = Attributes.assignStringAttribute(node, SymbolAttributes.TYPE, this.type);\n\n        this.hasWinFrame = Attributes.assignBooleanAttribute(node, \"HasWinFrame\", this.hasWinFrame);\n\n        if (node.hasAttribute(SymbolAttributes.ID)) {\n            this.id = parseInt(node.getAttribute(SymbolAttributes.ID));\n        }\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH)) {\n            this.symbolWidth = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH));\n        }\n\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT)) {\n            this.symbolHeight = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT));\n        }\n    }\n\n    bindSymbols(symbols: Symbols): void {\n        this.symbols = symbols;\n    }\n\n    removeSunMultiplier(): void {\n        if (this.elements != null && this.elements.childs[\"Mlp\"] != null) {\n            this.elements.childs[\"Mlp\"].goToCase(\"NORMAL\");\n        }\n    }\n\n    addSunMultiplier(mlp: number): void {\n        if (this.elements != null && this.elements.childs[\"Mlp\"] != null) {\n            this.elements.childs[\"Mlp\"].goToCase(\"MLP_\" + mlp);\n        }\n    }\n\n    removeWildMultiplier(): void {\n        if (this.elements != null && this.elements.childs[\"Title\"] != null) {\n            this.elements.childs[\"Title\"].goToCase(\"NORMAL\");\n        }\n        if (this.elements != null && this.elements.childs[\"TitleB\"] != null) {\n            this.elements.childs[\"TitleB\"].goToCase(\"NORMAL\");\n        }\n        if (this.elements != null && this.elements.childs[\"NoWinTitle\"] != null) {\n            this.elements.childs[\"NoWinTitle\"].goToCase(\"NORMAL\");\n        }\n    }\n\n    addWildMultiplier(mlp: number): void {\n        if (this.elements != null && this.elements.childs[\"Title\"] != null) {\n            this.elements.childs[\"Title\"].goToCase(\"MLP_\" + mlp);\n        }\n        if (this.elements != null && this.elements.childs[\"TitleB\"] != null) {\n            this.elements.childs[\"TitleB\"].goToCase(\"MLP_\" + mlp);\n        }\n        if (this.elements != null && this.elements.childs[\"NoWinTitle\"] != null) {\n            this.elements.childs[\"NoWinTitle\"].goToCase(\"MLP_\" + mlp);\n        }\n    }\n\n    goToCase(s: string, emitEvent: boolean = false): void {\n        if (s === \"RETURN\") {\n            if (this.symbols != null) {\n                this.symbols.returnSymbol(this);\n                return;\n            }\n        }\n        if (this.id === 10 && ModuleManager.freespinsEnabled()) {\n            if (this.case === Symbol.CaseTease && s !== Symbol.CaseWin && s !== Symbol.CaseNowin) {\n                return;\n            }\n        }\n        if (Symbol.Teas && s === \"IMPACT_TO_NORMAL\") {\n            super.goToCase(Symbol.CaseTease, emitEvent);\n            return;\n        }\n\n        if (this.id === 9 && this.case === \"LOOP\") {\n            if (s === Symbol.CaseNormal || s === Symbol.CaseNowin || s === Symbol.CaseCycle) {\n                return;\n            }\n        }\n\n        super.goToCase(s, emitEvent);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return Symbol\n     */\n    clone(): Symbol {\n        let element: Symbol = new Symbol();\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.name = this.name;\n        element.id = this.id;\n        element.style = this.style;\n        element.offsetX = this.offsetX;\n        element.offsetY = this.offsetY;\n        element.symbolWidth = this.symbolWidth;\n        element.symbolHeight = this.symbolHeight;\n        element.visible = this.visible;\n        element.case = this.case;\n        element.style = this.style;\n        element.zIndex = this.zIndex;\n        element.type = this.type;\n        element.hasWinFrame = this.hasWinFrame;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n\n    switchAmounts(on: boolean = true): void {\n        if (\n            this.elements == null ||\n            this.elements.childs == null ||\n            this.elements.childs[\"Amount\"] == null ||\n            this.elements.childs[\"AmountReset\"] == null\n        ) {\n            return;\n        }\n\n        if (on) {\n            this.elements.childs[\"Amount\"].alpha = 1;\n            this.elements.childs[\"AmountReset\"].alpha = 0;\n        } else {\n            this.elements.childs[\"Amount\"].alpha = 0;\n            this.elements.childs[\"AmountReset\"].alpha = 1;\n        }\n    }\n\n    public setAmount(value: number, prefixName?: string): void {\n        let amountElements = this.getAmountElements(prefixName);\n        this.amount = value;\n\n        for (let i = 0; i < amountElements.length; i++) {\n            amountElements[i].bitmapText.text = Languages.formatText(Languages.FormatMoney, value.toString());\n            amountElements[i].realign();\n        }\n    }\n\n    public resetAmount(prefixName?: string): void {\n        let amountElements = this.getAmountElements(prefixName);\n\n        for (let i = 0; i < amountElements.length; i++) {\n            amountElements[i].bitmapText.text = \"\";\n        }\n    }\n\n    private getAmountElements(prefixName: string = \"Amount\"): Array<ImageTextElement> {\n        let result: Array<ImageTextElement> = [];\n        if (this.elements != null && this.elements.childs != null) {\n            for (let key in this.elements.childs) {\n                if (key.indexOf(prefixName) > -1 && this.elements.childs[key] instanceof ImageTextElement) {\n                    result.push(this.elements.childs[key]);\n                }\n            }\n        }\n\n        return result;\n    }\n}\n\nexport const SymbolAttributes = {\n    DEBUG: \"Debug\",\n    /**\n     *\n     */\n    ID: \"Id\",\n    /**\n     * OffsetX is difference between width of this symbol and standard symbol width divided by two.\n     * @property OffsetX\n     * @default 0\n     */\n    OFFSET_X: \"OffsetX\",\n    /**\n     * OffsetY is difference between heigth of this symbol and standard symbol height divided by two.\n     * @property OffsetX\n     * @default 0\n     */\n    OFFSET_Y: \"OffsetY\",\n    /**\n     * Use offset property when offseX and offsetY is the same number.\n     * @property Offset\n     * @default 0\n     */\n    OFFSET: \"Offset\",\n    /**\n     * Z-index of symbol on screen\n     * @property Zindex\n     * @default 0\n     */\n    Z_INDEX: \"Zindex\",\n    /**\n     * Type of symbol. E.g.: wild\n     */\n    TYPE: \"Type\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbol.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { BaseElement } from \"../Graphics/BaseElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextElement extends BaseElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public textAlign: string;\n\n    public textBaseline: string;\n\n    public text: string;\n\n    public font: string;\n\n    public bitmapText: PIXI.extras.BitmapText;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.textAlign = ImageTextElementAttributes.TEXT_ALIGN_VALUE.LEFT;\n        this.textBaseline = ImageTextElementAttributes.TEXT_BASELINE_VALUE.TOP;\n        this.text = \"\";\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (this.bitmapText == null) {\n            if (node.hasAttribute(ImageTextElementAttributes.FONT)) {\n                if (node.hasAttribute(ImageTextElementAttributes.TEXT)) {\n                    this.text = node.getAttribute(ImageTextElementAttributes.TEXT);\n                }\n\n                this.font = node.getAttribute(ImageTextElementAttributes.FONT);\n\n                this.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n\n                this.addChild(this.bitmapText);\n            }\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_ALIGN)) {\n            this.textAlign = node.getAttribute(ImageTextElementAttributes.TEXT_ALIGN);\n\n            this.realign();\n        }\n\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_ALIGN)) {\n            this.textBaseline = node.getAttribute(ImageTextElementAttributes.TEXT_BASELINE);\n\n            this.realign();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REALIGN\n    //******************************************************************************************************************\n\n    public realign(): void {\n        switch (this.textAlign) {\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.RIGHT:\n                this.bitmapText.position.x = -this.bitmapText.width;\n                break;\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.CENTER:\n                this.bitmapText.position.x = -this.bitmapText.width * 0.5;\n                break;\n            default:\n                this.bitmapText.position.x = 0;\n                break;\n        }\n\n        switch (this.textBaseline) {\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\n                this.bitmapText.position.y = -this.bitmapText.height;\n                break;\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\n                this.bitmapText.position.y = -this.bitmapText.height * 0.5;\n                break;\n            default:\n                this.bitmapText.position.y = 0;\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextElement {\n        let element: ImageTextElement = new ImageTextElement();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.addChild(element.bitmapText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n}\n\nexport const ImageTextElementAttributes = {\n    /**\n     * The text to display.\n     * @property Text\n     * @type string\n     * @default null\n     */\n    TEXT: \"Text\",\n    /**\n     * Bitmap font for text.\n     * @property Font\n     * @type string\n     * @default null\n     */\n    FONT: \"Font\",\n    /**\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\n     * For detailed information view the whatwg spec. Default is \"left\".\n     * @property TextAlign\n     * @type string\n     * @default left\n     */\n    TEXT_ALIGN: \"TextAlign\",\n    TEXT_ALIGN_VALUE: {\n        LEFT: \"left\",\n        CENTER: \"center\",\n        RIGHT: \"right\",\n    },\n    /**\n     * The vertical alignment point on the text. Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\n     * @property TextBaseline\n     * @type string\n     * @default top\n     */\n    TEXT_BASELINE: \"TextBaseline\",\n    TEXT_BASELINE_VALUE: {\n        TOP: \"top\",\n        MIDDLE: \"middle\",\n        BOTTOM: \"bottom\",\n    },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { TimelineStyle } from \"../Styles/TimelineStyle\";\nimport { ImageTextCounterElement } from \"../Texts/ImageTextCounterElement\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { SoundManager } from \"../../Managers/SoundManager\";\nimport { PlayList } from \"../../Sounds/PlayList\";\nimport { SongAttributes } from \"../../Sounds/Song\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { ParticleElement } from \"./ParticleElement\";\nimport { ParticleGroupElement } from \"./ParticleGroupElement\";\n\n/**\n * TimelineElement is element which can create animation flow from object and setting up these elemenets based on frames.\n * TimelineElement need TimelineStyle as definition of animation.\n * Example:\n *   <TimelineElement Class=\"TimelineElement\" Style=\"TimelineStyle\" Loop=\"true\" />\n *\n * @class TimelineElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class TimelineElement extends BaseElement {\n    static AnimationComplete: string = \"animationComplete\";\n\n    private _style: TimelineStyle;\n    private _elements: ContainerElement;\n    private _timer: FrameTimerEventEmitter;\n    private _framesArray: Array<number>;\n    private _frameCounter: number;\n    private _loop: boolean;\n    private _winValue: number;\n\n    constructor() {\n        super();\n\n        this._frameCounter = 0;\n        this._loop = false;\n\n        this._timer = CreateFrameTimer(\"TimelineElement\");\n        this._timer.on(FrameTimerEvents.Complete, this.animate.bind(this));\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._timer.stop();\n\n        if (this._elements.childs != null) {\n            for (var key in this._elements.childs) {\n                if (this._elements.childs.hasOwnProperty(key)) {\n                    if (this._elements.childs[key] instanceof PIXI.DisplayObject) {\n                        this._elements.childs[key].destroy(options);\n                    }\n                    this._elements.childs[key] = null;\n                }\n            }\n\n            this._elements.childs = null;\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (node.hasAttribute(TimelineElementAttributes.LOOP)) {\n            this._loop = StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.LOOP));\n        }\n\n        if (node.hasAttribute(TimelineElementAttributes.STYLE)) {\n            this._style = <TimelineStyle>StyleManager.Styles[node.getAttribute(TimelineElementAttributes.STYLE)];\n            if (this._style != null) {\n                // get all elements and add them to this display list\n                if (this._style.container != null) {\n                    if (\n                        node.hasAttribute(TimelineElementAttributes.CLONE) &&\n                        StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.CLONE))\n                    ) {\n                        this._elements = this._style.container.clone();\n                    } else {\n                        this._elements = this._style.container;\n                    }\n                    this.addChild(this._elements);\n\n                    if (this._style.frames != null) {\n                        this._framesArray = [];\n\n                        for (let key in this._style.frames) {\n                            this._framesArray.push(parseInt(key));\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING no timeline\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no children\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(TimelineElementAttributes.STYLE));\n                }\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(TimelineElementAttributes.TINT)) {\n            if (this._elements != null && this._elements.children != null && this._elements.children.length > 0) {\n                for (let i: number = 0; i < this._elements.children.length; i++) {\n                    let child: any = this._elements.children[i];\n                    if (child instanceof PIXI.DisplayObject) {\n                        if (child.children != null && child.children.length > 0) {\n                            for (let j: number = 0; j < child.children.length; j++) {\n                                let childOfChild: any = child.children[j];\n                                if (\n                                    childOfChild instanceof PIXI.Sprite ||\n                                    childOfChild instanceof PIXI.extras.AnimatedSprite\n                                ) {\n                                    if (node.getAttribute(TimelineElementAttributes.TINT) === \"0\") {\n                                        childOfChild.tint = 0xffffff;\n                                    } else {\n                                        childOfChild.tint = parseInt(\n                                            node.getAttribute(TimelineElementAttributes.TINT),\n                                            16,\n                                        );\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        if (\n            node.hasAttribute(TimelineElementAttributes.PLAY) &&\n            StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.PLAY))\n        ) {\n            if (this._framesArray != null) {\n                this.startAnimate();\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING can't play because movieClip is null\");\n                }\n            }\n        }\n\n        if (node.hasAttribute(\"GoToOutro\") && StringUtils.parseBoolean(node.getAttribute(\"GoToOutro\"))) {\n            this.goToOutro();\n        }\n    }\n\n    /**\n     * Start playing animation.\n     * @method play\n     * @param winValue number - optional\n     * @return void\n     */\n    play(winValue?: number): void {\n        if (winValue != null) {\n            this._winValue = winValue;\n        }\n\n        if (this._framesArray != null) {\n            this.startAnimate();\n        }\n    }\n\n    /**\n     *\n     */\n    stop(): void {\n        if (this._elements.childs != null) {\n            for (let key in this._elements.childs) {\n                if (this._elements.childs.hasOwnProperty(key)) {\n                    Tweens.removeTweens(this._elements.childs[key], \"all\");\n                    this._elements.childs[key].visible = false;\n                    if (this._elements.childs[key] instanceof ImageTextCounterElement) {\n                        this._elements.childs[key].stop();\n                    }\n                    if (this._elements.childs[key] instanceof ParticleGroupElement) {\n                        this._elements.childs[key].stop();\n                    }\n                    if (this._elements.childs[key] instanceof ParticleElement) {\n                        this._elements.childs[key].stop();\n                    }\n                }\n            }\n        }\n\n        this.stopAnimate();\n    }\n\n    /**\n     * Stop animation and go to last outro state.\n     * @method goToOutro\n     * @return void\n     */\n    goToOutro(winValue?: number): void {\n        if (winValue != null) {\n            this._winValue = winValue;\n        }\n        this._timer.stop();\n        if (this._style != null && this._style.outro != null) {\n            let node: Element = this._style.outro;\n            if (node != null) {\n                let next: Element = node.firstElementChild;\n                if (next != null) {\n                    while (next != null) {\n                        let element: any = this._elements.childs[next.nodeName];\n                        if (element != null) {\n                            // send new node to element and set / change new attributes\n                            element.updateByNode(next);\n                            if (element instanceof ImageTextCounterElement) {\n                                if (this._winValue != null) {\n                                    element.start(0, this._winValue, 0);\n                                } else {\n                                    element.force();\n                                }\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n                }\n            }\n\n            if (this._style != null && this._style.outroSounds != null) {\n                let node2: Element = this._style.outroSounds;\n                if (node2 != null) {\n                    let next: Element = node2.firstElementChild;\n                    if (next != null) {\n                        while (next != null) {\n                            if (next.hasAttribute(SongAttributes.SONG)) {\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.play(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.play(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.loop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.STOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\n                                        PlayList.stop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\n                                        );\n                                    } else {\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                            }\n                            next = next.nextElementSibling;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Start animate on timeline.\n     * @method startAnimate\n     * @return void\n     */\n    private startAnimate(): void {\n        this._timer.stop();\n        this._frameCounter = 0;\n\n        if (this.children != null) {\n            if (this._framesArray[0] === 0) {\n                this.animate();\n            } else {\n                this._timer.start(this._framesArray[0]);\n            }\n        }\n    }\n\n    /**\n     * Reset timeline and start animation again.\n     * @method reset\n     * @return void\n     */\n    private reset(): void {\n        this.startAnimate();\n    }\n\n    /**\n     * Stop timeline.\n     * @method stopAnimate\n     * @return void\n     */\n    private stopAnimate(): void {\n        this._timer.stop();\n    }\n\n    /**\n     * Animate change elements when reach new frame.\n     * @method animate\n     * @return void\n     */\n    private animate(): void {\n        if (this._framesArray != null) {\n            if (this._framesArray[this._frameCounter] != null) {\n                this.goToFrame(this._framesArray[this._frameCounter]);\n            } else {\n                this._timer.stop();\n                if (this._loop) {\n                    this.reset();\n                }\n            }\n        }\n        this._frameCounter++;\n\n        if (this._framesArray[this._frameCounter] != null) {\n            this._timer.stop();\n            this._timer.start(this._framesArray[this._frameCounter] - this._framesArray[this._frameCounter - 1]);\n        } else {\n            this.emit(TimelineElement.AnimationComplete);\n            this._timer.stop();\n            if (this._loop) {\n                this.reset();\n            }\n        }\n    }\n\n    /**\n     * Go to frame get xml node from frames and set up children to state defined in frames xml node.\n     * @method goToFrame\n     * @param frame number\n     * @return void\n     */\n    private goToFrame(frame: number) {\n        if (this._style != null && this._style.frames != null) {\n            let node: Element = this._style.frames[frame.toString()];\n\n            if (node.hasAttribute(\"Emit\")) {\n                this.emit(node.getAttribute(\"Emit\"));\n            }\n\n            if (node != null && node.childElementCount > 0) {\n                let next: Element = node.firstElementChild;\n                if (next != null) {\n                    while (next != null) {\n                        let element: any = this._elements.childs[next.nodeName];\n                        if (element != null) {\n                            // send new node to element and set / change new attributes\n                            element.updateByNode(next);\n                            if (element instanceof ImageTextCounterElement && this._winValue != null) {\n                                if (element.visible) {\n                                    element.start(0, this._winValue);\n                                    this._winValue = null;\n                                }\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n                }\n            }\n\n            if (this._style != null && this._style.framesSounds != null) {\n                let node2: Element = this._style.framesSounds[frame.toString()];\n                if (node2 != null) {\n                    let next: Element = node2.firstElementChild;\n                    if (next != null) {\n                        while (next != null) {\n                            if (next.hasAttribute(SongAttributes.SONG)) {\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.play(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.play(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.loop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.STOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\n                                        PlayList.stop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\n                                        );\n                                    } else {\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                            }\n                            next = next.nextElementSibling;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._timer.stop();\n        super.destroy(options);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return TimelineElement\n     */\n    clone(): TimelineElement {\n        let element: TimelineElement = new TimelineElement();\n\n        element._elements = this._elements.clone();\n        element.addChild(element._elements);\n        element._style = this._style;\n        element._framesArray = this._framesArray;\n        element._loop = this._loop;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const TimelineElementAttributes = {\n    CLONE: \"Clone\",\n    DEBUG: \"Debug\",\n    EMIT: \"Emit\",\n    /*\n     * Indicates whenever this element should loop when it reaches the end of its timeline.\n     * @property Loop\n     * @type boolean\n     * @default false\n     */\n    LOOP: \"Loop\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n    /*\n     * Playlist id for machine.\n     * @property Sounds\n     * @type string\n     * @default null\n     */\n    SOUNDS: \"Sounds\",\n    /*\n     * Style holds elements as ContainerElement and also holds frames as xml nodes.\n     * Style for TimelineElement has to be instance of TimelineStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/TimelineElement.ts\n **/","import { engineComponent, NumberUtils, StringUtils } from \"neo-common\";\nimport { ImageTextElement } from \"./ImageTextElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { AppContext } from \"../../../../Common/AppContext\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextCounterElement extends ImageTextElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    static Round: boolean = false;\n\n    public from: number;\n\n    public to: number;\n\n    public duration: number;\n\n    public round: boolean;\n\n    protected currentValue: number;\n\n    protected finalValue: number;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.from = 0;\n        this.to = 0;\n        this.duration = 0;\n        this.round = false;\n        this.currentValue = 0;\n        this.finalValue = 0;\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.FROM)) {\n            this.from = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.FROM));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.TO)) {\n            this.to = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.TO));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.DURATION)) {\n            this.duration = parseInt(node.getAttribute(ImageTextCounterElementAttributes.DURATION));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ROUND)) {\n            this.round = StringUtils.parseBoolean(node.getAttribute(ImageTextCounterElementAttributes.ROUND));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ACTION)) {\n            switch (node.getAttribute(ImageTextCounterElementAttributes.ACTION)) {\n                case ImageTextCounterElementAttributes.ACTION_VALUE.START:\n                    this.start(this.from, this.to, this.duration);\n                    break;\n                case ImageTextCounterElementAttributes.ACTION_VALUE.STOP:\n                    this.stop();\n                    break;\n                case ImageTextCounterElementAttributes.ACTION_VALUE.FORCE:\n                    this.force();\n                    break;\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  START\n    //******************************************************************************************************************\n\n    public start(from: number, to: number, duration?: number): void {\n        const d = duration != null ? duration : this.duration;\n\n        if (d <= 0 || from === to) {\n            this.currentValue = to;\n            this.finalValue = to;\n\n            this.onCountTo();\n        } else {\n            this.currentValue = from;\n            this.finalValue = from;\n\n            this.onCountTo();\n\n            this.finalValue = to;\n\n            Tweens.customTween(this, {\n                tween: \"currentValue\",\n                tweenValues: [this.currentValue, this.finalValue],\n                tweenDuration: [d],\n                callbackType: \"onUpdate\",\n                callbackFunction: this.onCountTo,\n                callbackScope: this,\n            });\n        }\n    }\n\n    protected onCountTo(): void {\n        if (this.currentValue === this.finalValue) {\n            Tweens.removeTweens(this, \"currentValue\");\n        }\n\n        this.bitmapText.text = NumberUtils.valueToNumber(\n            this.currentValue,\n            this.round || ImageTextCounterElement.Round ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\n        );\n\n        this.realign();\n    }\n\n    //******************************************************************************************************************\n    //  STOP\n    //******************************************************************************************************************\n\n    public stop(): void {\n        Tweens.removeTweens(this, \"currentValue\");\n    }\n\n    //******************************************************************************************************************\n    //  FORCE\n    //******************************************************************************************************************\n\n    public force(): void {\n        this.currentValue = this.finalValue;\n\n        this.onCountTo();\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextCounterElement {\n        let element: ImageTextCounterElement = new ImageTextCounterElement();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.from = this.from;\n        element.to = this.to;\n        element.duration = this.duration;\n        element.round = this.round;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.addChild(element.bitmapText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n}\n\nexport const ImageTextCounterElementAttributes = {\n    /**\n     * Round will show numbers without decimal places.\n     * @property Round\n     * @type boolean\n     * @default false\n     */\n    ROUND: \"Round\",\n    /**\n     * Duration in frames. This property sets how long will counter run in frames.\n     * @property Duration\n     * @type number\n     * @default 0\n     */\n    DURATION: \"Duration\",\n    FROM: \"From\",\n    TO: \"To\",\n    ACTION: \"Action\",\n    ACTION_VALUE: {\n        START: \"Start\",\n        STOP: \"Stop\",\n        FORCE: \"Force\",\n    },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n@engineComponent(ComponentTypes.Song)\nexport class Song {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public id: string;\n\n    protected sound: PIXI.sound.Sound;\n\n    protected alias: string;\n\n    protected instance: PIXI.sound.IMediaInstance;\n\n    protected group: string;\n\n    protected volume: number;\n    protected restoredVolume: number;\n\n    protected pan: number;\n\n    protected fade: number;\n\n    protected fadeStartTime: number;\n\n    protected fadeEndTime: number;\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    public create(node: Element): void {\n        this.id = node.nodeName;\n        this.alias = node.hasAttribute(SongAttributes.ALIAS) ? node.getAttribute(SongAttributes.ALIAS) : null;\n        this.instance = null;\n        this.group = node.hasAttribute(SongAttributes.GROUP) ? node.getAttribute(SongAttributes.GROUP) : null;\n        this.volume = node.hasAttribute(SongAttributes.VOLUME)\n            ? parseFloat(node.getAttribute(SongAttributes.VOLUME))\n            : 1;\n        this.pan = node.hasAttribute(SongAttributes.PAN) ? parseFloat(node.getAttribute(SongAttributes.PAN)) : 0;\n        this.fade = 0;\n        this.fadeStartTime = 0;\n        this.fadeEndTime = 0;\n\n        if (node.hasAttribute(SongAttributes.SONG)) {\n            if (PIXI.sound.exists(node.getAttribute(SongAttributes.SONG))) {\n                this.sound = PIXI.sound.find(node.getAttribute(SongAttributes.SONG));\n            } else {\n                this.sound = null;\n\n                if (DEBUG) {\n                    this.log(`ERROR no sound with id: ${node.getAttribute(\"Song\")}`);\n                }\n            }\n        } else {\n            this.sound = null;\n\n            if (DEBUG) {\n                this.log(\"ERROR no attribute: Song\");\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  PLAY\n    //******************************************************************************************************************\n\n    public play(loop: boolean, fadeIn: number, reset: boolean): void {\n        if (this.group === \"BackgroundMusic\" && !AppContext.current.isBackgroundMusicEnabled) {\n            return;\n        }\n\n        if (this.sound !== null && (reset || this.instance === null)) {\n            this.sound.filters = this.pan === 0 ? null : [new PIXI.sound.filters.StereoFilter(this.pan)];\n\n            if (fadeIn > 0) {\n                this.fade = 1;\n                this.fadeStartTime = new Date().getTime();\n                this.fadeEndTime = this.fadeStartTime + fadeIn * 16.7;\n            } else {\n                this.fade = 0;\n                this.fadeStartTime = 0;\n                this.fadeEndTime = 0;\n            }\n\n            this.playInstance(loop);\n        }\n    }\n\n    protected playInstance(loop: boolean = true): void {\n        this.stopInstance();\n\n        let volume = this.volume;\n\n        if (this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\n            volume = 0;\n        } else if (this.fade > 0) {\n            volume = this.getFadeInVolume();\n        } else if (this.fade < 0) {\n            volume = this.getFadeOutVolume();\n        }\n\n        this.instance = <any>(\n            this.sound.play(this.alias !== null ? { sprite: this.alias, volume: volume } : { volume: volume })\n        );\n        this.instance.on(\"end\", loop ? this.playInstance : this.stopInstance, this);\n\n        if (this.fade !== 0) {\n            this.instance.on(\"progress\", this.fade === 1 ? this.onFadeIn : this.onFadeOut, this);\n        }\n    }\n\n    public isPlaying(): boolean {\n        return !!this.instance;\n    }\n\n    protected onFadeIn(): void {\n        const volume = this.getFadeInVolume();\n\n        try {\n            this.instance.volume =\n                this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame ? 0 : volume;\n        } catch (e) {}\n\n        if (volume === this.volume) {\n            this.instance.off(\"progress\", this.onFadeIn, this);\n        }\n    }\n\n    protected getFadeInVolume(): number {\n        const duration = this.fadeEndTime - this.fadeStartTime;\n        const progress = new Date().getTime() - this.fadeStartTime;\n\n        return this.volume * Math.min(progress / duration, 1);\n    }\n\n    //******************************************************************************************************************\n    //  STOP\n    //******************************************************************************************************************\n\n    public stop(fadeOut: number): void {\n        if (this.instance != null) {\n            if (fadeOut > 0) {\n                this.fade = -1;\n                this.fadeStartTime = new Date().getTime();\n                this.fadeEndTime = this.fadeStartTime + fadeOut * 16.7;\n\n                this.instance.off(\"progress\", this.onFadeIn, this);\n                this.instance.on(\"progress\", this.onFadeOut, this);\n            } else {\n                this.stopInstance();\n            }\n        }\n    }\n\n    protected stopInstance(): void {\n        if (this.instance != null) {\n            this.instance.off(\"progress\", this.onFadeIn, this);\n            this.instance.off(\"progress\", this.onFadeOut, this);\n            this.instance.off(\"end\", this.playInstance, this);\n            this.instance.off(\"end\", this.stopInstance, this);\n            this.instance.stop();\n            this.instance = null;\n        }\n    }\n\n    protected onFadeOut(): void {\n        const volume = this.getFadeOutVolume();\n\n        try {\n            this.instance.volume =\n                this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame ? 0 : volume;\n        } catch (e) {}\n\n        if (volume === 0) {\n            this.stopInstance();\n        }\n    }\n\n    protected getFadeOutVolume(): number {\n        const duration = this.fadeEndTime - this.fadeStartTime;\n        const progress = new Date().getTime() - this.fadeStartTime;\n\n        return this.volume - this.volume * Math.min(progress / duration, 1);\n    }\n\n    public setVolume(volume: number): void {\n        if (this.restoredVolume == null) {\n            this.restoredVolume = this.volume;\n        }\n        this.volume = volume;\n\n        if (this.instance != null) {\n            this.instance.volume = volume;\n        }\n    }\n\n    public restoreVolume(): void {\n        if (this.restoredVolume != null) {\n            this.volume = this.restoredVolume;\n\n            if (this.instance != null) {\n                this.instance.volume = this.restoredVolume;\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  TOGGLE\n    //******************************************************************************************************************\n\n    public toggleGroup(group: string, toggle: boolean = false): void {\n        if (this.group === group && this.instance != null) {\n            try {\n                this.instance.volume = toggle ? this.volume : 0;\n            } catch (e) {}\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LOG\n    //******************************************************************************************************************\n\n    protected log(s: string): void {\n        if (DEBUG) {\n            const compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nexport const SongAttributes = {\n    SONG: \"Song\",\n    ALIAS: \"Alias\",\n    GROUP: \"Group\",\n    VOLUME: \"Volume\",\n    PAN: \"Pan\",\n    PLAY: \"Play\",\n    LOOP: \"Loop\",\n    STOP: \"Stop\",\n    FADEIN: \"FadeIn\",\n    FADEOUT: \"FadeOut\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/Song.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { ParticleElement, ParticleElementAttributes } from \"./ParticleElement\";\nimport { ParticleAnimationElement } from \"./ParticleAnimationElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\n// TODO add comments\nexport class ParticleGroupElement extends ContainerElement {\n    static DynamicKey: string = \"\";\n\n    private _emitOnce: boolean;\n    private _startType: string;\n\n    constructor() {\n        super();\n\n        this._emitOnce = false;\n        this._startType = \"\";\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        this.visible = false;\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\n            this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\n        }\n\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.START) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\n        ) {\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\n                this.start(this._emitOnce);\n            } else {\n                this.startSelected(this._emitOnce, ParticleGroupElement.DynamicKey);\n            }\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\n        ) {\n            this.stopping();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\n        ) {\n            this.stop();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\n        ) {\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\n                this.reset();\n            } else {\n                this.resetSelected(ParticleGroupElement.DynamicKey);\n            }\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\n        ) {\n            this.clear();\n        }\n    }\n\n    start(emitOnce: boolean = false): void {\n        this._emitOnce = emitOnce;\n        this.visible = true;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                    this.childs[key].start(this._emitOnce, this._startType);\n                }\n            }\n        }\n    }\n\n    startSelected(emitOnce: boolean = false, particleKey: string): void {\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\n            this._emitOnce = emitOnce;\n            this.visible = true;\n\n            if (this.childs != null) {\n                for (let key in this.childs) {\n                    if (key.indexOf(particleKey) > -1) {\n                        if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                            this.childs[key].start(this._emitOnce, this._startType);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    stopping(): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                    this.childs[key].stopping();\n                }\n            }\n        }\n    }\n\n    stop(): void {\n        this.visible = false;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                    this.childs[key].stop();\n                }\n            }\n        }\n    }\n\n    reset(): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                    this.childs[key].reset();\n                }\n            }\n        }\n    }\n\n    resetSelected(particleKey: string): void {\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\n            if (this.childs != null) {\n                for (let key in this.childs) {\n                    if (key.indexOf(particleKey) > -1) {\n                        if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                            this.childs[key].reset();\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    clear(): void {\n        this.visible = false;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\n                    this.childs[key].clear();\n                }\n            }\n        }\n    }\n\n    /*clone(): ParticleGroupElement\n    {\n        let element: ParticleGroupElement = <ParticleGroupElement>super.clone();\n        element._emitOnce = this._emitOnce;\n        element._startType = this._startType;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }*/\n\n    clone(): ParticleGroupElement {\n        let element: ParticleGroupElement = new ParticleGroupElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.name = this.name;\n        element._emitOnce = this._emitOnce;\n        element._startType = this._startType;\n\n        element.childs = {};\n        element.removeChildren();\n        for (let key in this.childs) {\n            element.childs[key] = this.childs[key].clone();\n            element.addChild(element.childs[key]);\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts\n **/","import { ArrayUtils, StringUtils, Logger, engineComponent, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { BaseElement } from \"./BaseElement\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ParticleStyle, IPathOptions } from \"../Styles/ParticleStyle\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { AnimationElement } from \"./AnimationElement\";\nimport { ParticleElementAttributes } from \"./ParticleElement\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * @deprecated Use ParticleElement instead ParticleAnimationElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ParticleAnimationElement extends BaseElement {\n    // handle definition for particles\n    private _style: ParticleStyle;\n    private _styleName: string;\n    //  holds particles in pool and reused them\n    private _pool: Array<AnimationElement>;\n    // timer for add particles\n    private _timer: FrameTimerEventEmitter;\n\n    private _stopping: boolean;\n    private _stop: boolean;\n    private _emitOnce: boolean;\n    private _startType: string;\n\n    private _blendMode: number;\n    private _created: boolean;\n\n    constructor() {\n        super();\n\n        this._pool = [];\n\n        this._timer = CreateFrameTimer(\"particleTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.addParticles.bind(this));\n\n        this._created = false;\n        this._stopping = false;\n        this._stop = true;\n        this._emitOnce = false;\n        this._startType = \"\";\n        this.visible = false;\n    }\n\n    createByNode(node: Element): void {\n        if (!this._created) {\n            super.createByNode(node);\n\n            if (node.hasAttribute(ParticleElementAttributes.BLEND_MODE)) {\n                this._blendMode = parseInt(node.getAttribute(ParticleElementAttributes.BLEND_MODE));\n            }\n\n            if (\n                node.hasAttribute(ParticleElementAttributes.STYLE) ||\n                node.hasAttribute(ParticleElementAttributes.STYLE2)\n            ) {\n                if (node.hasAttribute(ParticleElementAttributes.STYLE)) {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE)]\n                    );\n                } else {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE2)]\n                    );\n                }\n\n                this._styleName = this._style.name;\n\n                this.createParticles();\n                this._created = true;\n            }\n\n            if (node.hasAttribute(\"Speed\")) {\n                this.setSpeed(parseFloat(node.getAttribute(\"Speed\")));\n            }\n        }\n    }\n\n    private setSpeed(speed: number): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this._pool[i].changeAnimationSpeed(speed);\n        }\n    }\n\n    updateByNode(node: Element): void {\n        if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\n            this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\n        }\n\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.START) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\n        ) {\n            this.start(this._emitOnce, this._startType);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\n        ) {\n            this.stopping();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\n        ) {\n            this.stop();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\n        ) {\n            this.reset();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\n        ) {\n            this.clear();\n        }\n    }\n\n    start(emitOnce: boolean = false, startType: string): void {\n        this.visible = true;\n        this._emitOnce = emitOnce;\n        this._startType = startType;\n        this._stopping = emitOnce;\n        this._stop = false;\n        if (!this._emitOnce) {\n            this._timer.start(this._style.time);\n            if (this._startType === \"now\") {\n                this.addParticles();\n            }\n        } else {\n            this.addParticles();\n        }\n    }\n\n    stopping(): void {\n        this._stopping = true;\n    }\n\n    stop(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n    }\n\n    reset(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setupPosition(this._pool[i]);\n            this._pool[i].visible = false;\n            this._pool[i].stop();\n        }\n    }\n\n    clear(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n        this.removeAllFromPool();\n    }\n\n    private createParticles(): void {\n        if (this._style != null) {\n            if (this._style.images != null && this._style.images.length > 0) {\n                let elementsCount: number = this._style.calculateElements();\n                let elementsResources: Array<string> = this.prepareResources(elementsCount);\n\n                for (let i: number = 0; i < elementsCount; i++) {\n                    var node: Element = document.createElement(\"particle\");\n                    node.setAttribute(\"Style2\", elementsResources[i]);\n                    node.setAttribute(\"RandomStartFrame\", \"true\");\n                    let imageElement: AnimationElement = new AnimationElement();\n                    imageElement.create(node);\n                    let particleLife: number =\n                        Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\n\n                    this.setupParticle(imageElement);\n                    this.setupPosition(imageElement);\n\n                    this.addPathBehaviour(imageElement, particleLife);\n                    this.addScaleBehaviour(imageElement, particleLife);\n                    this.addRotationBehaviour(imageElement, particleLife);\n                    this.addAlphaBehaviour(imageElement, particleLife);\n\n                    this.addChild(imageElement);\n                    this._pool.push(imageElement);\n                }\n            }\n        }\n    }\n\n    private prepareResources(count: number): Array<string> {\n        let resources: Array<string> = [];\n        for (let i: number = 0; i < count; i++) {\n            resources.push(this._style.images[Math.floor(Math.random() * this._style.images.length)]);\n        }\n        return resources;\n    }\n\n    private setupParticle(imageElement: AnimationElement): void {\n        imageElement.visible = false;\n        imageElement.usedInPool = false;\n\n        if (this._blendMode != null) {\n            imageElement.blendMode = CustomUtils.getBlendMode(this._blendMode);\n        }\n    }\n\n    private setupPosition(imageElement: AnimationElement): void {\n        imageElement.pivot.x = imageElement.width / 2;\n        imageElement.pivot.y = imageElement.height / 2;\n\n        switch (this._style.positionZone.type) {\n            case ParticleStyle.ZoneRectangle:\n                imageElement.x = parseInt(\n                    (this._style.positionZone.x + Math.random() * this._style.positionZone.width).toFixed(0),\n                );\n                imageElement.y = parseInt(\n                    (this._style.positionZone.y + Math.random() * this._style.positionZone.height).toFixed(0),\n                );\n                break;\n            case ParticleStyle.ZoneLine:\n                // TODO\n                break;\n            /*case ParticleStyle.ZoneCircle:\n                // TODO\n                break;*/\n            case ParticleStyle.ZoneEllipse:\n                // TODO\n                break;\n        }\n    }\n\n    private addPathBehaviour(imageElement: AnimationElement, life: number): void {\n        if (this._style.pathValues != null) {\n            let points: Array<Object> = [];\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\n                if (\n                    this._style.pathValues[i] != null &&\n                    this._style.pathValues[i].x != null &&\n                    this._style.pathValues[i].y != null\n                ) {\n                    let valueX: number = this._style.pathValues[i].x;\n                    let valueY: number = this._style.pathValues[i].y;\n                    if (this._style.pathValues[i].randomX != null) {\n                        valueX =\n                            Math.floor(\n                                Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x),\n                            ) + this._style.pathValues[i].x;\n                    }\n                    if (this._style.pathValues[i].randomY != null) {\n                        valueY =\n                            Math.floor(\n                                Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y),\n                            ) + this._style.pathValues[i].y;\n                    }\n                    points.push({ x: imageElement.x + valueX, y: imageElement.y + valueY });\n                }\n            }\n            if (points.length > 2) {\n                Tweens.positionTween(imageElement, {\n                    bezier: {\n                        values: points,\n                    },\n                    tweenX: [imageElement.x, imageElement.x],\n                    tweenY: [imageElement.y, imageElement.y],\n                    tweenDuration: life,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [imageElement],\n                    callbackScope: null,\n                });\n            } else if (points.length === 2) {\n                Tweens.positionTween(imageElement, {\n                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\n                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\n                    tweenDuration: life,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [imageElement],\n                    callbackScope: null,\n                });\n            }\n        }\n    }\n\n    private addScaleBehaviour(imageElement: AnimationElement, life: number): void {\n        if (this._style.scaleValues != null) {\n            let scalePoints: Array<PIXI.Point> = [];\n            for (let i: number = 0; i < this._style.scaleValues.length; i++) {\n                let scaleValue: number;\n                if (this._style.scaleValues[i].length > 1) {\n                    scaleValue = parseFloat(\n                        (\n                            Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\n                            this._style.scaleValues[i][0]\n                        ).toFixed(1),\n                    );\n                } else {\n                    scaleValue = this._style.scaleValues[i][0];\n                }\n                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\n            }\n\n            if (scalePoints.length === 1) {\n                imageElement.scale.x = scalePoints[0].x;\n                imageElement.scale.y = scalePoints[0].y;\n            } else {\n                Tweens.scaleTween(imageElement, {\n                    tweenValues: scalePoints,\n                    tweenDuration: life,\n                    paused: false,\n                });\n            }\n        }\n    }\n\n    private addRotationBehaviour(imageElement: AnimationElement, life: number): void {\n        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\n            Tweens.rotationTween(imageElement, {\n                degrees: [this._style.rotationValues[0], this._style.rotationValues[1]],\n                tweenDuration: life,\n                paused: false,\n            });\n        }\n    }\n\n    private addAlphaBehaviour(imageElement: AnimationElement, life: number): void {\n        if (this._style.alphaValues != null) {\n            let alphas: Array<number> = [];\n            for (let i: number = 0; i < this._style.alphaValues.length; i++) {\n                alphas.push(this._style.alphaValues[i]);\n            }\n            Tweens.alphaTween(imageElement, {\n                alphas: alphas,\n                tweenDuration: life,\n                paused: false,\n            });\n        }\n    }\n\n    private addParticles(): void {\n        if (!this._stop) {\n            this.getFromPool();\n\n            if (!this._stopping && this._style.time > 0) {\n                this._timer.start(this._style.time);\n            }\n        }\n    }\n\n    private getFromPool(): void {\n        this._pool.sort(function () {\n            return 0.5 - Math.random();\n        });\n\n        let counter: number = 0;\n        for (let i: number = 0; i < this._pool.length; i++) {\n            if (counter === this._style.count) {\n                return;\n            }\n            if (!this._pool[i].usedInPool) {\n                this._pool[i].usedInPool = true;\n                this._pool[i].visible = true;\n                this._pool[i].playMe();\n                counter++;\n                Tweens.restartTweens(this._pool[i].uid);\n            }\n        }\n    }\n\n    private removeFromPool(imageElement: AnimationElement): void {\n        imageElement.visible = false;\n        imageElement.usedInPool = false;\n        imageElement.stop();\n    }\n\n    private removeAllFromPool(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this._pool[i].visible = false;\n            this._pool[i].usedInPool = false;\n            // TODO stop all tweens\n        }\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ParticleAnimationElement\n     */\n    clone(): ParticleAnimationElement {\n        var element: ParticleAnimationElement = new ParticleAnimationElement();\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element._blendMode = this._blendMode;\n        var node: Element = document.createElement(\"particle\");\n        node.setAttribute(\"Style2\", this._styleName);\n        element.create(node);\n        element._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleAnimationElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ILayoutElement } from \"./ILayoutElement\";\nimport { LayoutManager } from \"../Managers/LayoutManager\";\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { ContainerStyle } from \"../Components/Elements/Styles/ContainerStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class LayoutContainerElement extends ContainerElement implements ILayoutElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private portraitStyle: ContainerStyle;\n\n    private styleNodeList: Array<Element>;\n\n    private portraitStyleNodeList: Array<Element>;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        LayoutManager.addLayoutElement(this);\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC HANDLERS\n    //******************************************************************************************************************\n\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (node.hasAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)) {\n            this.portraitStyle = <ContainerStyle>(\n                StyleManager.Styles[node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)]\n            );\n            if (this.portraitStyle != null) {\n                this.portraitStyleNodeList = this.getNodesList(this.portraitStyle.node.firstElementChild);\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR no style with name \" +\n                            node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE),\n                    );\n                }\n            }\n        }\n\n        if (this.style != null) {\n            this.styleNodeList = this.getNodesList(this.style.node.firstElementChild);\n        }\n    }\n\n    onLayoutChange(isPortrait: boolean): void {\n        if (isPortrait) {\n            this.updateChildElements(this.portraitStyleNodeList, this.styleNodeList);\n        } else {\n            this.updateChildElements(this.styleNodeList, this.portraitStyleNodeList);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  FUNCTIONS\n    //******************************************************************************************************************\n\n    private updateChildElements(styleNodeList: Array<Element>, previousStyleNodeList: Array<Element>): void {\n        if (styleNodeList != null && previousStyleNodeList != null) {\n            if (styleNodeList.length === previousStyleNodeList.length) {\n                for (let i = 0; i < styleNodeList.length; i++) {\n                    let elementStyle = styleNodeList[i];\n                    let previousElementStyle = previousStyleNodeList[i];\n\n                    if (this.childs[elementStyle.nodeName] != null) {\n                        this.childs[elementStyle.nodeName].updateByNode(\n                            this.updateDefaultValues(elementStyle, previousElementStyle),\n                        );\n                    }\n                }\n            }\n        }\n    }\n\n    private getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = this.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    private updateDefaultValues(node: Element, previousNode: Element): Element {\n        if (!node.hasAttribute(\"X\") && previousNode.hasAttribute(\"X\")) {\n            node.setAttribute(\"X\", \"0\");\n        }\n\n        if (!node.hasAttribute(\"Y\") && previousNode.hasAttribute(\"Y\")) {\n            node.setAttribute(\"Y\", \"0\");\n        }\n\n        if (!node.hasAttribute(\"PivotX\") && previousNode.hasAttribute(\"PivotX\")) {\n            node.setAttribute(\"PivotX\", \"0\");\n        }\n\n        if (!node.hasAttribute(\"PivotY\") && previousNode.hasAttribute(\"PivotY\")) {\n            node.setAttribute(\"PivotY\", \"0\");\n        }\n\n        if (\n            !node.hasAttribute(\"Scale\") &&\n            !(node.hasAttribute(\"ScaleX\") || node.hasAttribute(\"ScaleY\")) &&\n            previousNode.hasAttribute(\"Scale\")\n        ) {\n            node.setAttribute(\"Scale\", \"1\");\n        }\n\n        if (!node.hasAttribute(\"Visible\") && previousNode.hasAttribute(\"Visible\")) {\n            node.setAttribute(\"Visible\", \"true\");\n        }\n\n        if (!node.hasAttribute(\"RemoveTweens\")) {\n            node.setAttribute(\"RemoveTweens\", \"false\");\n        }\n\n        //not inclde CASE attribute due to initial case state\n        if (node.hasAttribute(\"Case\")) {\n            node.removeAttribute(\"Case\");\n        }\n\n        return node;\n    }\n\n    clone(): LayoutContainerElement {\n        const element: LayoutContainerElement = new LayoutContainerElement();\n\n        element.style = this.style;\n        element.portraitStyle = this.portraitStyle;\n        element.styleNodeList = this.styleNodeList;\n        element.portraitStyleNodeList = this.portraitStyleNodeList;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element.name = this.name;\n\n        element.childs = {};\n        element.removeChildren();\n        for (let key in this.childs) {\n            element.childs[key] = this.childs[key].clone();\n            element.addChild(element.childs[key]);\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        } else if (this.maskGraphics != null) {\n            let elementMask = <ShapeElement>this.maskGraphics.clone();\n            elementMask.position.x = this.maskGraphics.position.x;\n            elementMask.position.y = this.maskGraphics.position.y;\n\n            element.maskGraphics = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nconst LayoutContainerElementAttributes = {\n    PORTRAIT_STYLE: \"PortraitStyle\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutContainerElement.ts\n **/","import { ArrayUtils, StringUtils, NumberUtils } from \"neo-common\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { StageController } from \"../Components/StageController\";\nimport { ILayoutElement } from \"../CustomComponents/ILayoutElement\";\n\nexport class LayoutManager {\n    private static readonly ExtraPortraitClass: string = \"extendPortrait\";\n\n    private static SwitchPrefix = \"\";\n\n    private static PreviousSwitchPrefix = \"\";\n\n    private static LayoutElements: Array<ILayoutElement> = [];\n\n    private platform: string;\n\n    private usePlatform: boolean;\n\n    private width: Array<number>;\n\n    private height: Array<number>;\n\n    private ratioIntervals: Array<Array<number>>;\n\n    private configured: boolean;\n\n    constructor() {\n        this.usePlatform = false;\n        this.configured = false;\n        this.ratioIntervals = [];\n\n        let config: Element = Configuration.Configurations[\"LayoutManagerConfiguration\"];\n        if (config != null) {\n            this.configurate(config);\n            this.configured = true;\n        }\n\n        if (Scaling.Emitter != null) {\n            Scaling.Emitter.on(Scaling.EventResize, this.onLayoutChange.bind(this));\n        }\n    }\n\n    public static addLayoutElement(layoutElement: ILayoutElement): void {\n        LayoutManager.LayoutElements.push(layoutElement);\n    }\n\n    public static getSwitchPrefix(): string {\n        return LayoutManager.SwitchPrefix;\n    }\n\n    public static getPreviousSwitchPrefix(): string {\n        return LayoutManager.PreviousSwitchPrefix;\n    }\n\n    private configurate(node: Element): void {\n        this.platform =\n            window[\"CHANNEL\"] == \"mobile\" ? LayoutManagerAttributes.MOBILE : LayoutManagerAttributes.DESKTOP;\n\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.USE_PLATFORM)) {\n            this.usePlatform = StringUtils.parseBoolean(\n                node.getAttribute(LayoutManagerConfigurationAttributes.USE_PLATFORM),\n            );\n        }\n\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.WIDTH)) {\n            this.width = ArrayUtils.numberArray(node.getAttribute(LayoutManagerConfigurationAttributes.WIDTH));\n        }\n\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.HEIGHT)) {\n            this.height = ArrayUtils.numberArray(node.getAttribute(LayoutManagerConfigurationAttributes.HEIGHT));\n        }\n\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.RATIO_INTERVALS)) {\n            let intervals = ArrayUtils.stringArray(\n                node.getAttribute(LayoutManagerConfigurationAttributes.RATIO_INTERVALS),\n                \"|\",\n            );\n\n            for (let i = 0; i < intervals.length; i++) {\n                this.ratioIntervals.push(ArrayUtils.numberArray(intervals[i]));\n            }\n        }\n    }\n\n    private onLayoutChange(\n        isPortrait: boolean,\n        ratio: number,\n        screenWidth: number,\n        screenHeight: number,\n        ratioWidth: number,\n        ratioHeight: number,\n    ): void {\n        if (!this.configured) {\n            return;\n        }\n\n        isPortrait = this.allowedPortraitLayout(isPortrait, ratio); //check screen size\n        isPortrait = this.allowedCanvasPortraitLayout(isPortrait, screenHeight, ratioWidth); //check canvas size due to SPB for example\n\n        LayoutManager.SwitchPrefix = \"\";\n        if (this.usePlatform) {\n            LayoutManager.SwitchPrefix = this.platform + \"_\";\n        }\n\n        if (isPortrait) {\n            document.body.classList.add(LayoutManager.ExtraPortraitClass);\n        } else {\n            document.body.classList.remove(LayoutManager.ExtraPortraitClass);\n        }\n\n        this.changeCanvasSize(isPortrait, screenWidth, screenHeight, ratioWidth, ratioHeight);\n        this.updateLayoutElements(isPortrait);\n\n        LayoutManager.PreviousSwitchPrefix = LayoutManager.SwitchPrefix;\n    }\n\n    private allowedPortraitLayout(isPortrait: boolean, ratio: number): boolean {\n        if (isPortrait) {\n            for (let i = 0; i < this.ratioIntervals.length; i++) {\n                if (ratio > this.ratioIntervals[i][0] && ratio < this.ratioIntervals[i][1]) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        return false;\n    }\n\n    private allowedCanvasPortraitLayout(isPortrait: boolean, screenHeight: number, ratioWidth: number): boolean {\n        if (isPortrait) {\n            let screen = document.getElementById(\"screen\");\n            let offset = parseInt(window.getComputedStyle(screen).top);\n            if (!document.body.classList.contains(\"jpt-on\")) {\n                offset *= -1; //if we dont have jackpot, game has small gap, so we can calculated without this gap\n            }\n\n            const height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\n            const canvasRatio = this.width[1] / height;\n\n            return this.allowedPortraitLayout(isPortrait, canvasRatio);\n        }\n\n        return isPortrait;\n    }\n\n    private changeCanvasSize(\n        isPortrait: boolean,\n        screenWidth: number,\n        screenHeight: number,\n        ratioWidth: number,\n        ratioHeight: number,\n    ): void {\n        let screen = document.getElementById(\"screen\");\n        if (isPortrait) {\n            const offset = parseInt(window.getComputedStyle(screen).top);\n            const height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\n            StageController.Renderer.resize(this.width[1], height); //portrait\n        } else {\n            StageController.Renderer.resize(this.width[0], this.height[0]); //landscape\n        }\n\n        //ToDo render only if renderer is paused\n        StageController.Renderer.render(StageController.Stage);\n    }\n\n    private updateLayoutElements(isPortrait: boolean): void {\n        for (let i = 0; i < LayoutManager.LayoutElements.length; i++) {\n            LayoutManager.LayoutElements[i].onLayoutChange(isPortrait);\n        }\n    }\n}\n\nexport const LayoutManagerConfigurationAttributes = {\n    USE_ORIENTATION: \"UseOrientation\",\n    USE_PLATFORM: \"UsePlatform\",\n    HEIGHT: \"Height\",\n    WIDTH: \"Width\",\n    RATIO_INTERVALS: \"RatioIntervals\",\n};\n\nexport const LayoutManagerAttributes = {\n    PORTRAIT: \"PORTRAIT\",\n    LANDSCAPE: \"LANDSCAPE\",\n    DESKTOP: \"DESKTOP\",\n    MOBILE: \"MOBILE\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/LayoutManager.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { Symbols } from \"./Symbols\";\nimport { Reel } from \"./Reel\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Reel2 } from \"../CustomComponents/Reel2\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { WinAnimator2 } from \"../CustomComponents/WinAnimator2\";\nimport { Symbol } from \"./Symbol\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { FreeRoundBonusExtended } from \"../Channels/Common/Bonuses/FreeRoundBonusExtended\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\n\ntype IReel = Communication.Game.IReel;\nvar WinType = Communication.Game.WinType;\n\n/**\n * Machine handle reels and symbols for reels rotation.\n * Machine define behaviour for complete flow of reel rotation.\n * @class Machine\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Machine extends BaseElement {\n    // events for view when reel or machine stopped\n    static MachineStopped: string = \"machineStopped\";\n    static ReelStopped: string = \"onReelStopped\";\n\n    private backupMask: PIXI.Graphics | PIXI.Sprite;\n\n    // symbols from view\n    private _symbols: Symbols;\n    // array of reel indexes\n    private _reels: Array<Reel2>;\n    // array of stopped symbols for finish reel rotation\n    private _stoppedSymbolsArray: Array<IReel>;\n\n    // count of reel\n    private _reelCount: number;\n    // reels x positions\n    private _reelX: Array<number>;\n    // reels y positions\n    private _reelY: Array<number>;\n    // symbol width without offsetX\n    private _symbolWidth: number;\n    // symbol height without offsetY\n    private _symbolHeight: number;\n    // number of symbols which will be visible on screen during the rotation\n    private _visibleSymbolCount: number;\n    // min spin rotation in frames\n    private _minSpinRotation: number;\n    // min spin rotation in frames for high wins\n    private _minSpinRotationLong: number;\n\n    // delay to start rotation in frames\n    private _startDelay: number;\n    // delay to stop rotation in frames\n    private _stopDelay: number;\n    // configuration ID for reels\n    private _reelConfiguration: string;\n\n    // timer for minimal time to stop reels\n    private _stopTimer: FrameTimerEventEmitter;\n    // timer for defined time in configuration.json to stop reels\n    private _legalStopTimer: number;\n\n    // boolean which indicates that machine can stop and rotate min defined time\n    private _stoppedFromMachine: boolean;\n    // boolean which indicates that machine can stop and response has arrived\n    private _stoppedFromServer: boolean;\n    // boolean which indicates that machine can stop and rotate min legal time\n    private _stoppedFromLegal: boolean;\n\n    protected _startSpinTime: number;\n\n    // container as a parent for reels\n    private _reelsContainer: PIXI.Container;\n\n    // helper to count stopped reels\n    private _stoppedReelIndexes: number;\n\n    // information for view which reel was stopped actualy\n    actualReelStopped: number;\n\n    private _background: SwitchElement;\n    private _teasing: SwitchElement;\n    private _teasingTop: SwitchElement;\n    private _canTease1: boolean;\n    private _canTease2: boolean;\n    private _canTease3: boolean;\n    private _canTease4: boolean;\n    private _longTeasing: boolean = false;\n\n    private isFreespins: boolean = false;\n\n    constructor() {\n        super();\n\n        // default values\n        this._reels = [];\n        this._stoppedSymbolsArray = [];\n        this._stoppedFromServer = false;\n        this._stoppedFromMachine = false;\n        this._stoppedFromLegal = false;\n        this._stoppedReelIndexes = 0;\n\n        this._stopTimer = CreateFrameTimer(\"Machine\");\n        this._stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\n\n        this.actualReelStopped = -1;\n\n        this._reelsContainer = new PIXI.Container();\n        this.addChild(this._reelsContainer);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public create(node: Element): void {\n        super.create(node);\n\n        if (this.maskSprite != null && this._reelsContainer != null) {\n            this._reelsContainer.addChild(this.maskSprite);\n            this._reelsContainer.mask = this.maskSprite;\n        }\n\n        if (this.maskGraphics != null && this._reelsContainer != null) {\n            this._reelsContainer.addChild(this.maskGraphics);\n            this._reelsContainer.mask = this.maskGraphics;\n        }\n\n        if (node.hasAttribute(MachineAttributes.CONFIGS)) {\n            let configs: Array<string> = node.getAttribute(MachineAttributes.CONFIGS).split(\";\");\n            for (let i: number = 0; i < configs.length; i++) {\n                let config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    private configurate(node: Element): void {\n        /*\n         * ReelCount is count of reels on screen for game.\n         * @property ReelCount\n         * @type Number\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelCount\")) {\n            this._reelCount = parseInt(node.getAttribute(\"ReelCount\"));\n        }\n\n        /*\n         * ReelX is array of x position for reels.\n         * @property ReelX\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelX\")) {\n            this._reelX = ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\n        }\n\n        /*\n         * ReelY is array of y position for reels.\n         * @property ReelY\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelY\")) {\n            this._reelY = ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\n        }\n\n        /*\n         * Standard symbol width without offsets.\n         * @property SymbolWidth\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolWidth\")) {\n            this._symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\n        }\n\n        /*\n         * Standard symbol height without offsets.\n         * @property SymbolHeight\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolHeight\")) {\n            this._symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\n        }\n\n        /*\n         * Number of symbols visible on reel.\n         * @property VisibleSymbolCount\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"VisibleSymbolCount\")) {\n            this._visibleSymbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\n        }\n\n        /*\n         * Min spin rotation in frames.\n         * @property MinSpinRotation\n         * @type number\n         * @default 40\n         */\n        if (node.hasAttribute(\"MinSpinRotation\")) {\n            this._minSpinRotation = parseInt(node.getAttribute(\"MinSpinRotation\"));\n        } else {\n            this._minSpinRotation = 40;\n        }\n\n        /*\n         * Min spin rotation in frames for outro high wins.\n         * @property MinSpinRotationLong\n         * @type number\n         * @default 100\n         */\n        if (node.hasAttribute(\"MinSpinRotationLong\")) {\n            this._minSpinRotationLong = parseInt(node.getAttribute(\"MinSpinRotationLong\"));\n        } else {\n            this._minSpinRotationLong = 100;\n        }\n\n        /*\n         * Delay to start rotation in frames.\n         * @property StartDelay\n         * @type number\n         * @default 3\n         */\n        if (node.hasAttribute(\"StartDelay\")) {\n            this._startDelay = parseInt(node.getAttribute(\"StartDelay\"));\n        } else {\n            this._startDelay = 3;\n        }\n\n        /*\n         * Delay to stop rotation in frames.\n         * @property StopDelay\n         * @type number\n         * @default 10\n         */\n        if (node.hasAttribute(\"StopDelay\")) {\n            this._stopDelay = parseInt(node.getAttribute(\"StopDelay\"));\n        } else {\n            this._stopDelay = 10;\n        }\n\n        /*\n         * Configuration ID for reels.\n         * @property StopDelay\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelConfiguration\")) {\n            this._reelConfiguration = node.getAttribute(\"ReelConfiguration\");\n        }\n\n        if (this.mask) {\n            this.disabledMask();\n        }\n    }\n\n    /**\n     * Create reels based on response and xml configuration.\n     * @method createReels\n     * @param reels Array<Array<number>> from initialization and based on response\n     * @return void\n     */\n    private createReels(reels: Array<Array<number>>): void {\n        for (let i: number = 0; i < this._reelCount; i++) {\n            let reel: Reel2 = new Reel2();\n            if (this._reelConfiguration != null) {\n                let configs: Array<string> = this._reelConfiguration.split(\";\");\n                for (let j: number = 0; j < configs.length; j++) {\n                    reel.configure(Configuration.Configurations[configs[j]]);\n                }\n            }\n            reel.visible = false;\n            reel.initialize(\n                i > 0 ? this._reels[i - 1] : null,\n                i < this._reelCount - 1 ? this._reels[i + 1] : null,\n                i,\n                this._symbols,\n                reels[i],\n                this._reelX[i],\n                this._reelY[i],\n                this._visibleSymbolCount,\n                1,\n                3,\n                this._symbolWidth,\n                this._symbolHeight,\n                this._startDelay * i,\n                this._stopDelay * i,\n            );\n\n            if (this.isFreespins) {\n                if (\n                    GameManager.freespinsResponse != null &&\n                    GameManager.freespinsResponse.initData != null &&\n                    GameManager.freespinsResponse.initData.customData != null &&\n                    GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"] != null &&\n                    GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"][i] != null\n                ) {\n                    reel.valuesStrip = GameManager.freespinsResponse.initData.customData[\"diamondzSymbolValue\"][i];\n                }\n            } else {\n                if (\n                    GameManager.baseResponse != null &&\n                    GameManager.baseResponse.initData != null &&\n                    GameManager.baseResponse.initData.customData != null &&\n                    GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"] != null &&\n                    GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"][i] != null\n                ) {\n                    reel.valuesStrip = GameManager.baseResponse.initData.customData[\"diamondzSymbolValue\"][i];\n                }\n            }\n\n            reel.on(Reel.ReelStopped, this.onReelStopped.bind(this));\n            this._reelsContainer.addChild(reel);\n            this._reels.push(reel);\n        }\n        this._reelsContainer.visible = false;\n    }\n\n    /**\n     * Initialize reference correct symbols and create reels.\n     * @method initialize\n     * @param symbols Symbols\n     * @param reels Array<Array<number>>\n     * @return void\n     */\n    public initialize(\n        symbols: Symbols,\n        reels: Array<Array<number>>,\n        teasing?: SwitchElement,\n        teasingTop?: SwitchElement,\n        freespins?: boolean,\n        background?: SwitchElement,\n        sunContainer?: ContainerElement,\n    ): void {\n        this._background = background;\n        this._teasing = teasing;\n        this._teasingTop = teasingTop;\n\n        this._symbols = symbols;\n        this.isFreespins = freespins;\n        this.createReels(reels);\n    }\n\n    /**\n     * Set symbols which stopped after reels will be stopped.\n     * @method setStoppedSymbolsArray\n     * @param value Array<number>\n     * @return void\n     */\n    public setStoppedSymbolsArray(value: Array<IReel>): void {\n        this._stoppedSymbolsArray = value;\n    }\n\n    /**\n     * Show static symbols on reels.\n     * @method showSymbols\n     * @param reelsData Array<IReel>\n     * @return void\n     */\n    public showSymbols(reelsData: Array<IReel>): void {\n        if (DEBUG) {\n            this.log(\"showSymbols\");\n        }\n\n        this.actualReelStopped = -1;\n\n        if (this._reels != null) {\n            for (let i: number = 0; i < this._reelCount; i++) {\n                if (reelsData[i] != null) {\n                    if (this._reels[i] != null) {\n                        this._reels[i].visible = true;\n                        this._reels[i].setData(reelsData[i]);\n                        this._reels[i].showSymbols();\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reel with index: \" + i);\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no reelsData with index: \" + i);\n                    }\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no reels\");\n            }\n        }\n    }\n\n    /**\n     * Start spinning reels.\n     * @method spinStart\n     * @param longRotation boolean\n     * @return void\n     */\n    public spinStart(\n        longRotation?: boolean,\n        useTransform: boolean = false,\n        currentSymbols?: Array<Array<Symbol>>,\n    ): void {\n        if (DEBUG) {\n            this.log(\"spinStart\");\n        }\n\n        this.enabledMask();\n        this._longTeasing = false;\n\n        if (this._teasing != null) {\n            this._teasing.goToCase(\"EMPTY\");\n        }\n        if (this._teasingTop != null) {\n            this._teasingTop.goToCase(\"EMPTY\");\n        }\n\n        Symbol.Teas = false;\n        Reel2.Tease = false;\n        WinAnimator2.Force = false;\n\n        this._stoppedFromServer = false;\n        this._stoppedFromMachine = false;\n        this._stoppedFromLegal = false;\n\n        this._startSpinTime = Date.now();\n\n        this.visible = true;\n        this._reelsContainer.visible = true;\n\n        this.actualReelStopped = -1;\n        this._stoppedReelIndexes = 0;\n\n        if (this._reels != null) {\n            for (let i: number = 0; i < this._reelCount; i++) {\n                if (this._reels[i] != null) {\n                    if (this._stoppedSymbolsArray.length > 0) {\n                        this._reels[i].visible = true;\n                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\n\n                        //move current symbols from WinAnimator to Reel, not array reference\n                        this._reels[i].currentSymbols = [];\n                        for (let j = 0; j < this._visibleSymbolCount; j++) {\n                            this._reels[i].currentSymbols.push(currentSymbols[i][j]);\n                            currentSymbols[i][j] = null;\n                        }\n\n                        this._reels[i].showSymbols(useTransform);\n                        this._reels[i].spinStart();\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no stopped symbols\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no reel with index: \" + i);\n                    }\n                }\n            }\n\n            if (longRotation != null && longRotation) {\n                this._stopTimer.start(this._minSpinRotationLong);\n            } else {\n                this._stopTimer.start(this._minSpinRotation);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no reels\");\n            }\n        }\n\n        if (this.isFreespins) {\n            PlayList.play(\"SND_FSRotationStart\");\n        } else {\n            PlayList.play(\"SND_BaseRotationStart\");\n        }\n\n        PlayList.loop(\"SND_BaseRotation\", 0, true);\n    }\n\n    protected verifyMinGameRoundDurationConditions(): boolean {\n        return (\n            (AppContext.gameConfiguration.MinGameRoundDuration > 0 ||\n                AppContext.gameConfiguration.GameRoundMinSpan > 0 ||\n\t\t\t\t(FreeRoundBonusExtended.inFrb && AppContext.gameConfiguration.FRBGameRoundMinSpan > 0)) &&\n            !ModuleManager.freespinsActive()\n        );\n    }\n\n    /**\n     * Stop reels rotation.\n     * @method spinStop\n     * @param event any - from timer\n     * @param force boolean - default false used when spin_stop was dispatch\n     * @param fromServer boolean - default false used when spin_stop was dispatch from server\n     * @param legal\n     * @return void\n     */\n    public spinStop(event: any, force: boolean = false, fromServer: boolean = false, legal: boolean = false): void {\n        if (fromServer) {\n            this._stoppedFromServer = true;\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            if (this.verifyMinGameRoundDurationConditions()) {\n                this._legalStopTimer = setTimeout(\n                    () => this.spinStop(null, false, false, true),\n                    this.getLegalRemainingSpinDuration(),\n                );\n            } else {\n                this._stoppedFromLegal = true;\n            }\n        } else if (legal) {\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n        } else {\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (force) {\n            WinAnimator2.Force = true;\n            PlayList.stop(\"SND_BaseFSTeaser\");\n\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (DEBUG) {\n            this.log(\"spinStop: \" + force);\n        }\n\n        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\n            this._longTeasing = this.calcLongTeasing();\n\n            if (\n                !ModuleManager.freespinsActive() &&\n                !(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n            ) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n                DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            }\n            if (force && this._teasing != null) {\n                this._teasing.goToCase(\"EMPTY\");\n            }\n            if (force && this._teasingTop != null) {\n                this._teasingTop.goToCase(\"EMPTY\");\n            }\n\n            this._canTease1 = false;\n            this._canTease2 = false;\n            this._canTease3 = false;\n            this._canTease4 = force ? false : this.checkTeasing(4);\n\n            if (this._reels != null) {\n                for (let i: number = 0; i < this._reelCount; i++) {\n                    if (this._reels[i] != null) {\n                        if (this._stoppedSymbolsArray.length !== 0) {\n                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\n\n                            if (\n                                force ||\n                                (!this._canTease1 && !this._canTease2 && !this._canTease3 && !this._canTease4)\n                            ) {\n                                this._reels[i].spinStop(force);\n                            } else {\n                                if (this._canTease1 && this._canTease2 && this._canTease3 && this._canTease4) {\n                                    if (i === 0) {\n                                        this._reels[i].spinStop(force);\n                                    }\n                                } else if (this._canTease2 && this._canTease3 && this._canTease4) {\n                                    if (i === 0 || i === 1) {\n                                        this._reels[i].spinStop(force);\n                                    }\n                                } else if (this._canTease3 && this._canTease4) {\n                                    if (i === 0 || i === 1 || i === 2) {\n                                        this._reels[i].spinStop(force);\n                                    }\n                                } else if (this._canTease4) {\n                                    if (i === 0 || i === 1 || i === 2 || i === 3) {\n                                        this._reels[i].spinStop(force);\n                                    }\n                                }\n                            }\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"ERROR no stopped symbols\");\n                            }\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reel with index: \" + i);\n                        }\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no reels\");\n                }\n            }\n        }\n    }\n\n    /**\n     * Get remaining time for legal spin duration\n     * @method getLegalRemainingSpinDuration\n     * @return number\n     */\n    protected getLegalRemainingSpinDuration(): number {\n        let duration = 0;\n\n        if (AppContext.gameConfiguration.GameRoundMinSpan > 0) {\n            duration = this.calculateRemainingSpinDuration(AppContext.gameConfiguration.GameRoundMinSpan);\n        }\n\n        if (AppContext.gameConfiguration.MinGameRoundDuration > 0) {\n            duration = AppContext.gameConfiguration.MinGameRoundDuration;\n        }\n\n        if (AppContext.gameConfiguration.FRBGameRoundMinSpan > 0 && FreeRoundBonusExtended.inFrb) {\n            duration = this.calculateRemainingSpinDuration(\n                Math.max(\n                    AppContext.gameConfiguration.GameRoundMinSpan,\n                    AppContext.gameConfiguration.FRBGameRoundMinSpan,\n                ),\n            );\n        }\n\n        return duration;\n    }\n\n    /**\n     * Calculate remaining time for legal spin duration\n     * @method calculateRemainingSpinDuration\n     * @param minTime: number - minimal spin duration in seconds\n     * @return number\n     */\n    protected calculateRemainingSpinDuration(minTime: number): number {\n        const now = Date.now();\n        const diff = now - this._startSpinTime;\n        const reelStopDuration = this.getReelStopDuration();\n        return Math.max(minTime - diff - reelStopDuration, 0);\n    }\n\n    protected getReelStopDuration(): number {\n        return (this._reels[this._reelCount - 1].getStopDuration() / 60) * 1000;\n    }\n\n    private checkTeasing(reelIndex: number): boolean {\n        if (this._teasing == null) {\n            return false;\n        }\n\n        let count = 0;\n\n        for (let i = 0; i < reelIndex; i++) {\n            for (let j = 0; j < this._stoppedSymbolsArray[i].symbols.length; j++) {\n                if (this._stoppedSymbolsArray[i].symbols[j] === 11) {\n                    count++;\n                }\n            }\n        }\n\n        return count >= 2;\n    }\n\n    /**\n     * Dispatched onMachineStopped when all reels are stopped.\n     * @method onReelStopped\n     * @param reelIndex number - reel index\n     * @return void\n     */\n    public onReelStopped(reelIndex: number): void {\n        if (this._teasing != null) {\n            this.tease(reelIndex);\n        }\n\n        PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\n\n        this._stoppedReelIndexes++;\n        this.actualReelStopped = reelIndex;\n        this._reels[reelIndex].visible = false;\n        this.emit(Machine.ReelStopped);\n\n        if (this._stoppedReelIndexes === this._reelCount) {\n            this.disabledMask();\n            PlayList.stop(\"SND_BaseRotation\", 10);\n            PlayList.stop(\"SND_BaseFSTeaser\");\n            if (Symbol.Teas) {\n                WinAnimator2.Teas = true;\n                if (this._teasing != null && this._teasing.getCurrentCase() !== \"EMPTY\") {\n                    this._teasing.goToCase(\"TEAS_4_1\");\n                }\n                if (this._teasingTop != null && this._teasingTop.getCurrentCase() !== \"EMPTY\") {\n                    this._teasingTop.goToCase(\"TEAS_4_1\");\n                }\n                if (!this.isFreespins && !ModuleManager.freespinsEnabled()) {\n                    PlayList.play(\"SND_BaseFSTeaserFail\");\n                }\n                if (this.isFreespins && !this.retrigger()) {\n                    PlayList.play(\"SND_BaseFSTeaserFail\");\n                }\n            }\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stopTimer.stop();\n            if (DEBUG) {\n                const old = AppContext.gameConfiguration.MinGameRoundDuration;\n                const current = AppContext.gameConfiguration.GameRoundMinSpan;\n                const minDuration = current > 0 ? current : old > 0 ? old : 0;\n                const spinDuration = Date.now() - this._startSpinTime;\n\n                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\n                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\n                } else {\n                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\n                }\n            }\n            Symbol.Teas = false;\n            this.emit(Machine.MachineStopped);\n            this._reelsContainer.visible = false;\n        }\n    }\n\n    private retrigger(): boolean {\n        let wasRetrigger: boolean = false;\n\n        if (GameManager.freespinsResponse.wins != null && GameManager.freespinsResponse.wins.length > 0) {\n            for (let i: number = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\n                    wasRetrigger = true;\n                }\n            }\n        }\n\n        return wasRetrigger;\n    }\n\n    private calcLongTeasing(): boolean {\n        return false;\n    }\n\n    private tease(reelIndex: number): void {\n        switch (reelIndex) {\n            case 3:\n                if (this._canTease4) {\n                    Symbol.Teas = true;\n                    Reel2.Tease = true;\n                    this._reels[4].spinTease([10], 180);\n                    if (this._teasing != null && this._teasing.getCurrentCase() === \"EMPTY\") {\n                        PlayList.play(\"SND_BaseFSTeaser\");\n                        this._teasing.goToCase(\"TEAS_4\");\n                        if (this._background != null) {\n                            this._background.goToCase(\"TEASING\");\n                        }\n                    }\n                    if (this._teasingTop != null && this._teasingTop.getCurrentCase() === \"EMPTY\") {\n                        this._teasingTop.goToCase(\"TEAS_4\");\n                    }\n                }\n                break;\n        }\n    }\n\n    private disabledMask(): void {\n        if (this.mask) {\n            this.backupMask = this.mask;\n            this.mask.visible = false;\n            this.mask = null;\n        }\n    }\n\n    private enabledMask(): void {\n        if (this.backupMask && this.mask === null) {\n            this.mask = this.backupMask;\n            this.mask.visible = true;\n        }\n    }\n}\n\n/**\n * Inherits attributes from BaseElement.\n */\nexport const MachineAttributes = {\n    /**\n     * Name of config for machine.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Machine.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Symbol } from \"./Symbol\";\nimport { Symbols } from \"./Symbols\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { ReelConfigurationAttributes } from \"../Components/Configuration\";\n\n/**\n * Class reel represent reel symbols rotation.\n * @class Reel\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Reel extends BaseElement {\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    public static readonly ReelStopped: string = \"reelStopped\";\n\n    //******************************************************************************************************************\n    //  VARIABLES (CONFIGURE)\n    //******************************************************************************************************************\n\n    protected preRoll: number;\n\n    protected preRollSpeed: number;\n\n    protected postRoll: number;\n\n    protected postRollSpeed: number;\n\n    protected speed: number;\n\n    protected forceSpeed: number;\n\n    //******************************************************************************************************************\n    //  VARIABLES (INITIALIZE)\n    //******************************************************************************************************************\n\n    protected previousReel: Reel;\n\n    protected nextReel: Reel;\n\n    protected index: number;\n\n    protected symbols: Symbols;\n\n    protected strip: Array<number>;\n\n    protected positionX: number;\n\n    protected positionY: number;\n\n    protected symbolCount: number;\n\n    protected symbolTopCount: number;\n\n    protected symbolBottomCount: number;\n\n    protected symbolWidth: number;\n\n    protected symbolHeight: number;\n\n    protected startDelay: number;\n\n    protected stopDelay: number;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected stopTimer: FrameTimerEventEmitter;\n\n    public currentSymbols: Array<Symbol>;\n\n    protected data: Communication.Game.IReel;\n\n    protected shouldBeStopping: boolean;\n\n    public isStopping: boolean;\n\n    protected stoppingCounter: number;\n\n    protected isTeasing: boolean;\n\n    protected teasingSymbols: Array<number>;\n\n    protected rollSpeed: number;\n\n    protected stripIndex: number;\n\n    //******************************************************************************************************************\n    //  CONFIGURE\n    //******************************************************************************************************************\n\n    public configure(node: Element): void {\n        this.preRoll = node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL))\n            : 180;\n        this.preRollSpeed = node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED))\n            : 10;\n        this.postRoll = node.hasAttribute(ReelConfigurationAttributes.POST_ROLL)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.POST_ROLL))\n            : 180;\n        this.postRollSpeed = node.hasAttribute(ReelConfigurationAttributes.POST_ROLL_SPEED)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.POST_ROLL_SPEED))\n            : 5;\n        this.speed = node.hasAttribute(ReelConfigurationAttributes.SPEED)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.SPEED))\n            : 3;\n        this.forceSpeed = node.hasAttribute(ReelConfigurationAttributes.FORCE_SPEED)\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.FORCE_SPEED))\n            : 2;\n    }\n\n    //******************************************************************************************************************\n    //  INITIALIZE\n    //******************************************************************************************************************\n\n    public initialize(\n        previousReel: Reel,\n        nextReel: Reel,\n        index: number,\n        symbols: Symbols,\n        strip: Array<number>,\n        positionX: number,\n        positionY: number,\n        symbolCount: number,\n        symbolTopCount: number,\n        symbolBottomCount: number,\n        symbolWidth: number,\n        symbolHeight: number,\n        startDelay: number,\n        stopDelay: number,\n    ): void {\n        this.previousReel = previousReel;\n        this.nextReel = nextReel;\n        this.index = index;\n        this.symbols = symbols;\n        this.strip = strip;\n        this.positionX = positionX;\n        this.positionY = positionY;\n        this.symbolCount = symbolCount;\n        this.symbolTopCount = symbolTopCount;\n        this.symbolBottomCount = symbolBottomCount;\n        this.symbolWidth = symbolWidth;\n        this.symbolHeight = symbolHeight;\n        this.startDelay = startDelay;\n        this.stopDelay = stopDelay;\n\n        this.stopTimer = CreateFrameTimer(\"reel\");\n        this.stopTimer.on(FrameTimerEvents.Complete, this.onStopTimerComplete.bind(this));\n\n        this.currentSymbols = [];\n    }\n\n    //******************************************************************************************************************\n    //  SET DATA\n    //******************************************************************************************************************\n\n    public setData(data: Communication.Game.IReel) {\n        this.data = data;\n    }\n\n    //******************************************************************************************************************\n    //  SHOW SYMBOLS\n    //******************************************************************************************************************\n\n    public showSymbols(): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n\n        this.x = this.positionX;\n        this.y = this.positionY;\n\n        while (this.currentSymbols.length > 0) {\n            this.returnSymbol(this.currentSymbols.pop());\n        }\n\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\n            let symbolId: number;\n            let symbolCase: string;\n\n            if (i < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\n            }\n\n            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n            this.addChild(this.currentSymbols[0]);\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN START\n    //******************************************************************************************************************\n\n    public spinStart(): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n        this.rollSpeed = this.speed;\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\n\n        this.spinPreRoll();\n    }\n\n    //******************************************************************************************************************\n    //  SPIN STOP\n    //******************************************************************************************************************\n\n    public spinStop(force: boolean = false, customDelay: number = 0): void {\n        this.stopTimer.stop();\n\n        if (force) {\n            this.shouldBeStopping = true;\n            this.rollSpeed = this.forceSpeed;\n        } else {\n            this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\n        }\n    }\n\n    protected onStopTimerComplete(): void {\n        this.shouldBeStopping = true;\n        this.isStopping = true;\n    }\n\n    public getStopDuration(): number {\n        const stoppingSymbols = this.symbolTopCount + this.symbolCount + this.symbolBottomCount - 1;\n        return this.stopDelay + stoppingSymbols * this.speed + this.postRollSpeed * 2;\n    }\n\n    //******************************************************************************************************************\n    //  SPIN TEASE\n    //******************************************************************************************************************\n\n    public spinTease(symbols: Array<number>, customDelay: number = 0): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = true;\n        this.teasingSymbols = symbols;\n\n        this.stopTimer.stop();\n        this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\n    }\n\n    //******************************************************************************************************************\n    //  SPIN PRE ROLL\n    //******************************************************************************************************************\n\n    protected spinPreRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY - this.preRoll, this.positionY],\n            tweenDuration: this.preRollSpeed * 2,\n            tweenDelay: this.startDelay,\n            callbackFunction: this.spinRoll,\n            callbackScope: this,\n        });\n    }\n\n    //******************************************************************************************************************\n    //  SPIN ROLL\n    //******************************************************************************************************************\n\n    protected spinRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY + this.symbolHeight],\n            tweenDuration: this.rollSpeed,\n            callbackFunction: this.updateReel,\n            callbackScope: this,\n        });\n    }\n\n    protected updateReel(): void {\n        this.returnSymbol(this.currentSymbols.pop());\n\n        if (this.shouldBeStopping && !this.isStopping) {\n            if (this.previousReel === null) {\n                this.isStopping = true;\n            } else if (this.previousReel.isStopping) {\n                this.isStopping = true;\n            }\n        }\n\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\n\n        let symbolId = this.strip[this.stripIndex];\n        let symbolCase = Symbol.CaseBlur;\n\n        if (this.isStopping) {\n            if (this.stoppingCounter < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\n                        ? Symbol.CaseRotation\n                        : Symbol.CaseBlur;\n            }\n\n            this.stoppingCounter++;\n        }\n\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n        this.addChild(this.currentSymbols[0]);\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n\n        if (\n            this.isStopping &&\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\n        ) {\n            this.spinPostRoll();\n        } else {\n            this.spinRoll();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN POST ROLL\n    //******************************************************************************************************************\n\n    protected spinPostRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY + this.postRoll, this.positionY],\n            tweenDuration: this.postRollSpeed * 2,\n            callbackFunction: this.spinComplete,\n            callbackScope: this,\n        });\n    }\n\n    //******************************************************************************************************************\n    //  SPIN COMPLETE\n    //******************************************************************************************************************\n\n    protected spinComplete(): void {\n        Tweens.removeTweens(this, \"position\");\n\n        while (this.currentSymbols.length > 0) {\n            this.returnSymbol(this.currentSymbols.pop());\n        }\n\n        this.emit(Reel.ReelStopped, this.index);\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected getSymbol(symbolId: number, symbolCase: string): Symbol {\n        return this.symbols.getSymbol(symbolId, symbolCase);\n    }\n\n    protected returnSymbol(symbol: Symbol): void {\n        this.symbols.returnSymbol(symbol);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Reel.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Reel } from \"../GameComponents/Reel\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { Symbols } from \"../GameComponents/Symbols\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\n\n/**\n * Reel2 handles:\n * - z-order\n * - usage of Normal instead of Rotation\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Reel2 extends Reel {\n    public static Tease: boolean = false;\n\n    public valuesStrip: Array<number> = [];\n\n    private _baseSoundFlyByDelay: FrameTimerEventEmitter;\n\n    //******************************************************************************************************************\n    //  SHOW SYMBOLS, SPIN ROLL\n    //******************************************************************************************************************\n\n    public initialize(\n        previousReel: Reel,\n        nextReel: Reel,\n        index: number,\n        symbols: Symbols,\n        strip: Array<number>,\n        positionX: number,\n        positionY: number,\n        symbolCount: number,\n        symbolTopCount: number,\n        symbolBottomCount: number,\n        symbolWidth: number,\n        symbolHeight: number,\n        startDelay: number,\n        stopDelay: number,\n    ): void {\n        super.initialize(\n            previousReel,\n            nextReel,\n            index,\n            symbols,\n            strip,\n            positionX,\n            positionY,\n            symbolCount,\n            symbolTopCount,\n            symbolBottomCount,\n            symbolWidth,\n            symbolHeight,\n            startDelay,\n            stopDelay,\n        );\n\n        this._baseSoundFlyByDelay = CreateFrameTimer(\"baseSoundFlyByDelay\");\n        this._baseSoundFlyByDelay.on(FrameTimerEvents.Complete, this.baseSoundFlyByDelay.bind(this));\n    }\n\n    public showSymbols(useTransform: boolean = false): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n\n        this.x = this.positionX;\n        this.y = this.positionY;\n\n        if (!useTransform) {\n            while (this.currentSymbols.length > 0) {\n                this.returnSymbol(this.currentSymbols.pop());\n            }\n        }\n\n        let bottomSymbols: Array<Symbol> = [];\n        let topSymbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\n            let symbolId: number;\n            let symbolCase: string;\n            let symbolValue: number = 0;\n            let useMultiplier: boolean = true;\n\n            if (i < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolValue =\n                    this.valuesStrip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = Symbol.CaseRotation;\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\n                if (this.data.customData) {\n                    symbolValue = this.data.customData[this.symbolBottomCount + this.symbolCount - i - 1];\n                }\n                symbolCase = Symbol.CaseRotation;\n                useMultiplier = false;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolValue =\n                    this.valuesStrip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\n            }\n\n            if (!useTransform) {\n                // when we don't want use symbols from WinAnimator\n                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\n            } else {\n                // currentSymbols are used from WinAnimator. We only need to add new top and bottom symbols\n                if (i < this.symbolBottomCount) {\n                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\n                } else if (i > this.symbolBottomCount + this.symbolCount - 1) {\n                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\n                }\n            }\n        }\n\n        if (useTransform) {\n            while (bottomSymbols.length > 0) {\n                const symbol = bottomSymbols.shift();\n                if (symbol.id === 10) {\n                    symbol.goToCase(\"ROTATION_BOTTOM\");\n                }\n                this.currentSymbols.push(symbol);\n            }\n\n            while (topSymbols.length > 0) {\n                this.currentSymbols.unshift(topSymbols.shift());\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            this.addChild(this.currentSymbols[i]);\n\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n\n        this.moveToTop();\n    }\n\n    protected updateReel(): void {\n        this.returnSymbol(this.currentSymbols.pop());\n\n        if (this.shouldBeStopping && !this.isStopping) {\n            if (this.previousReel === null) {\n                this.isStopping = true;\n            } else if (this.previousReel.isStopping) {\n                this.isStopping = true;\n            }\n        }\n\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\n\n        let symbolId = this.strip[this.stripIndex];\n        let symbolCase = Symbol.CaseBlur;\n        let symbolValue: number = this.valuesStrip[this.stripIndex];\n        let useMultiplier: boolean = true;\n\n        if (this.isStopping) {\n            if (this.stoppingCounter < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolValue =\n                    this.valuesStrip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\n                if (this.data.customData) {\n                    symbolValue =\n                        this.data.customData[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\n                }\n                symbolCase = Symbol.CaseRotation;\n                useMultiplier = false;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolValue =\n                    this.valuesStrip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\n                        ? Symbol.CaseRotation\n                        : Symbol.CaseBlur;\n            }\n\n            this.stoppingCounter++;\n        }\n\n        if (!(this.isStopping && this.stoppingCounter > this.symbolBottomCount + this.symbolCount)) {\n            if (symbolId === 11) {\n                this._baseSoundFlyByDelay.start(5);\n            }\n        }\n\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase, symbolValue, useMultiplier));\n\n        this.addChild(this.currentSymbols[0]);\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n\n        if (\n            this.isStopping &&\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\n        ) {\n            this.spinPostRoll();\n            for (let i = 0; i < this.currentSymbols.length; i++) {\n                const symbol = this.currentSymbols[i];\n                if (symbol.id == 10) {\n                    symbol.goToCase(\"POST_ROLL\");\n                }\n            }\n        } else {\n            this.spinRoll();\n        }\n\n        this.moveToTop();\n    }\n\n    private baseSoundFlyByDelay() {\n        this._baseSoundFlyByDelay.stop();\n        PlayList.play(\"SND_BaseScatterFlyby_\" + this.index);\n    }\n\n    private moveToTop(): void {\n        // TODO ugly solution\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            if (symbol !== null && symbol.id === 6) {\n                symbol.parent.addChild(symbol);\n            }\n            if (symbol !== null && symbol.id === 7) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            if (symbol !== null && symbol.id === 8) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            if (symbol !== null && symbol.id === 9) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n\n            if (symbol !== null && symbol.id === 10) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected getSymbol(\n        symbolId: number,\n        symbolCase: string,\n        amount: number = 0,\n        useMultiplier: boolean = true,\n    ): Symbol {\n        if (symbolCase === Symbol.CaseRotation && symbolId !== 10) {\n            symbolCase = Symbol.CaseNormal;\n        }\n\n        const symbol = super.getSymbol(symbolId, symbolCase);\n        if (amount > 0) {\n            if (useMultiplier) {\n                symbol.setAmount(parseFloat(NumberUtils.multiply(amount, BetManager.Bet)));\n            } else {\n                symbol.setAmount(amount);\n            }\n        }\n\n        if (Reel2.Tease) {\n            if (symbol.id !== 10) {\n                symbol.goToCase(Symbol.CaseNowin);\n                symbol.alpha = 0.9;\n            }\n        }\n\n        return symbol;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/Reel2.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { WinAnimator } from \"../GameComponents/WinAnimator\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { Payline } from \"../GameComponents/Payline\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { PaylinesDefinitions } from \"../GameComponents/PaylinesDefinitions\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { Symbols } from \"../GameComponents/Symbols\";\nimport { Paylines } from \"../GameComponents/Paylines\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { WinTrigger } from \"neo-games/Engine/Communication/Game/Types/WinTrigger\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\nimport { BaseView } from \"../GameComponents/Base/BaseView\";\nimport { FreespinsView } from \"../GameComponents/Freespins/FreespinsView\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class WinAnimator2 extends WinAnimator {\n    static Force: boolean = false;\n    static Teas: boolean = false;\n\n    protected static readonly AlLWinsFinishedTimer: string = \"alLWinsFinishedTimer\";\n\n    protected static readonly ShowScatterWinDuration: number = 90; //in frames\n\n    private _currentPaylineId: number = 0;\n    private _currentPaylineCount: number = 0;\n    private _paylineTimer: FrameTimerEventEmitter;\n    private _paylinesTimer: FrameTimerEventEmitter;\n\n    protected _paylineNumbersRight: SwitchElement;\n    protected _multiplierNumber: SwitchElement;\n    protected _paylineNumbersMiddle: SwitchElement;\n\n    private _paylinesContainerBottom: ContainerElement;\n    private _paylinesContainerTop: ContainerElement;\n\n    private _bonusTeasingContainer: ContainerElement;\n\n    private topSuns: Array<Symbol>;\n    private _winLineIndex: number = 1;\n    private _multiplierSoundCounter: number = 0;\n\n    public setupPaylinesContainer(\n        bottom: ContainerElement,\n        top: ContainerElement,\n        right: SwitchElement,\n        middle: SwitchElement,\n        multiplier: SwitchElement,\n    ): void {\n        this._paylinesContainerBottom = bottom;\n        this._paylinesContainerTop = top;\n        this._paylineNumbersRight = right;\n        this._multiplierNumber = multiplier;\n        this._paylineNumbersMiddle = middle;\n    }\n\n    initialize(\n        symbols: Symbols,\n        paylines?: Paylines,\n        noWinSymbolsContainer?: ContainerElement,\n        symbolsContainer?: ContainerElement,\n        winFrameContainer?: ContainerElement,\n        cycleContainer?: ContainerElement,\n        paylineNumbers?: SwitchElement,\n        sunContainer?: ContainerElement,\n        bonusTeasingContainer?: ContainerElement,\n        hwContainer?: ContainerElement,\n    ): void {\n        super.initialize(\n            symbols,\n            paylines,\n            noWinSymbolsContainer,\n            symbolsContainer,\n            winFrameContainer,\n            cycleContainer,\n            paylineNumbers,\n            sunContainer,\n            hwContainer,\n        );\n\n        if (bonusTeasingContainer) {\n            this._bonusTeasingContainer = bonusTeasingContainer;\n        }\n\n        this.topSuns = [null, null, null, null, null];\n    }\n\n    protected createTimer(): void {\n        super.createTimer();\n        this._paylineTimer = CreateFrameTimer(\"_paylineTimer\");\n        this._paylineTimer.on(FrameTimerEvents.Complete, this.onPaylineTimer.bind(this));\n        this._paylinesTimer = CreateFrameTimer(\"_paylinesTimer\");\n        this._paylinesTimer.on(FrameTimerEvents.Complete, this.onPaylinesTimer.bind(this));\n    }\n\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number): void {\n        super.onReelStopped(reelsData, reelIndex);\n\n        let transofrmMOESound = false;\n        for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n            const symbol = this.currentSymbols[reelIndex][i];\n            if (symbol.id === 10 && this.currentSuns[reelIndex][i] != null) {\n                this.currentSuns[reelIndex][i].alpha = 0.5;\n            }\n            if (symbol.id === 8 && this.currentSuns[reelIndex][i] != null) {\n                transofrmMOESound = true;\n                symbol.goToCase(\"HIDE_TITLE\");\n                if (ModuleManager.freespinsActive()) {\n                    this.currentSuns[reelIndex][i].goToCase(\"ADD_MOE_FS\");\n                } else {\n                    this.currentSuns[reelIndex][i].goToCase(\"ADD_MOE\");\n                }\n            }\n        }\n\n        if (transofrmMOESound) {\n            PlayList.play(\"SND_BaseWildMOE\");\n        }\n\n        this.reorderSymbols(reelIndex);\n\n        if (Symbol.Teas) {\n            for (let i: number = 0; i < this.currentSymbols.length; i++) {\n                for (let j: number = 0; j < this.currentSymbols[i].length; j++) {\n                    if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id < 10) {\n                        this.currentSymbols[i][j].goToCase(Symbol.CaseNowin);\n                    }\n                }\n            }\n        }\n\n        let calcScatters: number = 0;\n        for (let i: number = 0; i <= reelIndex; i++) {\n            for (let j: number = 0; j < this.currentSymbols[i].length; j++) {\n                if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id === 10) {\n                    calcScatters++;\n                }\n            }\n        }\n\n        switch (reelIndex) {\n            case 0:\n                for (let i: number = 0; i < this.currentSymbols[reelIndex].length; i++) {\n                    if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\n                        this.currentSymbols[reelIndex][i].goToCase(Symbol.CaseImpact);\n                    }\n                }\n\n                if (calcScatters === 1) {\n                    PlayList.play(\"SND_BaseScatter_0\");\n                }\n\n                break;\n            case 2:\n                if (calcScatters > 1) {\n                    for (let i: number = 0; i < this.currentSymbols[0].length; i++) {\n                        if (this.currentSymbols[0][i] != null && this.currentSymbols[0][i].id === 10) {\n                            this.currentSymbols[0][i].goToCase(Symbol.CaseTease);\n                        }\n                    }\n                    for (let i: number = 0; i < this.currentSymbols[reelIndex].length; i++) {\n                        if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\n                            this.currentSymbols[reelIndex][i].goToCase(Symbol.CaseImpactWithTease);\n                        }\n                    }\n\n                    PlayList.play(\"SND_BaseScatter_2\");\n                }\n                break;\n            case 3:\n                if (calcScatters > 1) {\n                    for (let i: number = 0; i < this.currentSymbols[0].length; i++) {\n                        if (this.currentSymbols[0][i] != null && this.currentSymbols[0][i].id === 10) {\n                            this._bonusTeasingContainer.addChild(this.currentSymbols[0][i]);\n                        }\n                    }\n\n                    for (let i: number = 0; i < this.currentSymbols[2].length; i++) {\n                        if (this.currentSymbols[2][i] != null && this.currentSymbols[2][i].id === 10) {\n                            this._bonusTeasingContainer.addChild(this.currentSymbols[2][i]);\n                        }\n                    }\n\n                    this.allSunsToCase(\"TEASING\");\n                }\n                break;\n            case 4:\n                if (calcScatters > 2) {\n                    for (let i: number = 0; i < this.currentSymbols[reelIndex].length; i++) {\n                        if (this.currentSymbols[reelIndex][i] != null && this.currentSymbols[reelIndex][i].id === 10) {\n                            this.currentSymbols[reelIndex][i].goToCase(Symbol.CaseImpactWithTease);\n                        }\n                    }\n                    PlayList.play(\"SND_BaseScatter_4\");\n                }\n                break;\n        }\n    }\n\n    private allSunsToCase(symbolCase: string): void {\n        for (let i = 0; i < this.sunContainer.children.length; i++) {\n            (<SwitchElement>this.sunContainer.children[i]).goToCase(symbolCase);\n        }\n    }\n\n    public showSymbols(reelsData: Array<Communication.Game.IReel>): void {\n        //empty scatter symbols array (there could be also wilds)\n        if (this._currentWinScatterSymbols != null) {\n            for (let i = 0; i < this._currentWinScatterSymbols.length; i++) {\n                this.symbols.returnSymbol(this._currentWinScatterSymbols[i]);\n            }\n        }\n        this._currentWinScatterSymbols = [];\n\n        super.showSymbols(reelsData);\n\n        for (let i = 0; i < this.reelCount; i++) {\n            this.reorderSymbols(i);\n        }\n    }\n\n    protected finishFirstWins(): void {\n        if (this.hasScatterWin()) {\n            this.showScatterWin();\n            return;\n        }\n\n        this.emit(WinAnimator.FinishWinAnimator);\n\n        if (this.currentWins && this.currentWins.length > 0) {\n            this.stopTimer();\n            this.currentCycle = 0;\n            this.cycleWins(true);\n        }\n    }\n\n    private hasScatterWin(): boolean {\n        if (this.currentWins != null) {\n            for (let i = 0; i < this.currentWins.length; i++) {\n                let win = this.currentWins[i];\n                if (\n                    win.type === Communication.Game.WinType.freeSpins &&\n                    win.trigger === Communication.Game.WinTrigger.Scatter\n                ) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private showScatterWin(): void {\n        if (this.currentWins != null) {\n            PlayList.play(\"SND_BaseBonusWin\");\n            for (let i = 0; i < this.currentWins.length; i++) {\n                let win = this.currentWins[i];\n                if (\n                    win.type === Communication.Game.WinType.freeSpins &&\n                    win.trigger === Communication.Game.WinTrigger.Scatter\n                ) {\n                    this.winSymbolsGoToCaseAsScatter(i, Symbol.CaseWin, true);\n\n                    this.stopTimer();\n                    this.startTimer(WinAnimator2.AlLWinsFinishedTimer, WinAnimator2.ShowScatterWinDuration);\n                }\n            }\n        }\n    }\n\n    public showInitWins(wins: Array<Communication.Game.IWin>, win: number): void {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this.resetAnimations();\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            this.reorderSymbols(i);\n        }\n\n        if (wins != null && wins.length > 0) {\n            this.showFirstInitWins();\n            this.finishFirstInitWins();\n        } else {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n        }\n    }\n\n    public showWins(wins: Array<Communication.Game.IWin>, win: number): boolean {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this._currentPaylineId = 0;\n        this._currentPaylineCount = 0;\n        if (this._paylineTimer != null) this._paylineTimer.stop();\n        if (this._paylinesTimer != null) this._paylinesTimer.stop();\n\n        this.resetAnimations();\n\n        if (wins != null && wins.length > 0) {\n            this.currentMultiplierIndex = 6;\n\n            for (let i = 0; i < this.multipliers.length; i++) {\n                if (this.currentWin / BetManager.Bet > this.multipliers[i]) {\n                    this.currentMultiplierIndex = i;\n                }\n            }\n\n            this.showFirstWins();\n\n            return this.currentMultiplierIndex >= 3;\n        } else {\n            this.allSymbolsGoToCase(Symbol.CaseNormal, false, true);\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n            return false;\n        }\n    }\n\n    protected showFirstWins(): void {\n        this.currentAnimationIndex = this.getAnimationIndex();\n        this.currentAnimationFinished = false;\n\n        this._paylinesContainerTop.addChild(this.paylines);\n\n        for (let i = 0; i < this.topSuns.length; i++) {\n            if (this.topSuns[i] != null) {\n                this.topSuns[i].goToCase(Symbol.CaseNowin);\n            }\n        }\n        this.allSunsToCase(Symbol.CaseNowin);\n\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseNormal, false, Symbol.CaseNowin);\n            this.winPaylineGoToCase(i, Payline.CaseNormal);\n        }\n\n        this.showPaylinesOnFirst();\n    }\n\n    protected showFirstWinsDelayed(): void {\n        let symbolId = 0;\n        for (let i = 0; i < this.currentWins.length; i++) {\n            if (this.currentWins[i].payoutId > symbolId) {\n                symbolId = this.currentWins[i].payoutId;\n            }\n\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false, Symbol.CaseNowin);\n            this.winPaylineGoToCase(i, \"END\");\n        }\n\n        if (symbolId >= 4) {\n            PlayList.play(\"SND_BaseSymbol_\" + symbolId);\n        }\n\n        this.startAnimation();\n    }\n\n    protected startAnimation(): void {\n        super.startAnimation();\n\n        if (this.currentMultiplierIndex >= 3) {\n            PlayList.stop(\"SND_BaseLoop\");\n            PlayList.stop(\"SND_FSLoop\");\n            if (BaseView.Logo != null) BaseView.Logo.goToCase(\"ONLY_LOGO\");\n            if (FreespinsView.Logo != null) FreespinsView.Logo.goToCase(\"ONLY_LOGO\");\n        }\n    }\n\n    protected showFirstInitWins(): void {\n        this.allSunsToCase(Symbol.CaseNowin);\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            if (this.currentWins[i].trigger == Communication.Game.WinTrigger.Scatter) {\n                this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            } else {\n                this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            }\n\n            this.winPaylineGoToCase(i, Payline.CaseFirstWin);\n        }\n    }\n\n    protected finishFirstInitWins(): void {\n        if (this.currentWins.length > 0) {\n            if (this.currentWins.length > 1) {\n                //if scatter win, we get 2 wins (cash, fs) - still single win\n                if (\n                    this.currentWins[0].trigger == Communication.Game.WinTrigger.Scatter &&\n                    this.currentWins.length == 2\n                ) {\n                    this.winSymbolsGoToCase(0, Symbol.CaseWin, true);\n                    PlayList.play(\"SND_BaseRecapWinline\");\n\n                    if (!ModuleManager.freespinsEnabled() && !ModuleManager.freespinsActive()) {\n                        PlayList.loop(\"SND_BaseRecapLoop\");\n                    }\n\n                    return;\n                }\n\n                this.stopTimer();\n                this.currentCycle = 0;\n                this.cycleWins(true);\n            } else {\n                this.winSymbolsGoToCase(0, Symbol.CaseWin, true);\n                PlayList.play(\"SND_BaseRecapWinline\");\n\n                if (!ModuleManager.freespinsEnabled() && !ModuleManager.freespinsActive()) {\n                    PlayList.loop(\"SND_BaseRecapLoop\");\n                }\n            }\n        }\n    }\n\n    protected cycleWins(isFirst: boolean = false): void {\n        if (this.currentWins == null) {\n            return;\n        }\n\n        //skip freespin cycle win\n        if (this.currentWins[this.currentCycle].type === Communication.Game.WinType.freeSpins) {\n            if (this.currentWins.length === 1) {\n                return;\n            }\n\n            this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\n            this.cycleWins(isFirst);\n\n            return;\n        }\n\n        if (this.paylineNumbers != null) {\n            if (this.currentWins[this.currentCycle].paylineId != null) {\n                this.paylineNumbers.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\n            } else {\n                this.paylineNumbers.goToCase(\"NORMAL\");\n            }\n        }\n\n        if (this._paylineNumbersRight != null) {\n            if (this.currentWins[this.currentCycle].paylineId != null) {\n                if (ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\n                    let multiplier: string = this.currentWins[this.currentCycle].symbolMultiplier.toString();\n                    this._paylineNumbersRight.goToCase(\"MULTIPLIER_\" + multiplier);\n                } else {\n                    this._paylineNumbersRight.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\n                }\n            } else {\n                this._paylineNumbersRight.goToCase(\"NORMAL\");\n            }\n        }\n\n        if (this._multiplierNumber != null) {\n            if (this.currentWins[this.currentCycle].paylineId != null) {\n                if (ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\n                    let multiplier: string = this.currentWins[this.currentCycle].symbolMultiplier.toString();\n                    this._multiplierNumber.goToCase(\"MULTIPLIER_\" + multiplier);\n                } else {\n                    this._multiplierNumber.goToCase(\"NORMAL\");\n                }\n            } else {\n                this._multiplierNumber.goToCase(\"NORMAL\");\n            }\n        }\n\n        if (this._paylineNumbersMiddle != null) {\n            if (this.currentWins[this.currentCycle].paylineId != null) {\n                if (ModuleManager.freespinsActive() && this.currentWins[this.currentCycle].symbolMultiplier) {\n                    this._paylineNumbersMiddle.goToCase(\"CYCLE_FS_\" + this.currentWins[this.currentCycle].paylineId);\n                } else {\n                    this._paylineNumbersMiddle.goToCase(\"CYCLE_\" + this.currentWins[this.currentCycle].paylineId);\n                }\n            } else {\n                this._paylineNumbersMiddle.goToCase(\"NORMAL\");\n            }\n        }\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseNormal, false);\n        }\n\n        PlayList.play(\"SND_BaseCycleLine\");\n        for (let i = 0; i < this.currentWins.length; i++) {\n            if (i == this.currentCycle) {\n                this.winSymbolsGoToCase(i, Symbol.CaseNormal, false);\n            } else {\n                this.winSymbolsGoToCase(i, Symbol.CaseNormal, true);\n            }\n        }\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            if (this.currentWins[i].type !== Communication.Game.WinType.freeSpins) {\n                if (this.paylines != null) {\n                    const definition = PaylinesDefinitions.getPaylineDefinitionsById(\n                        this.currentWins[i].paylineId,\n                        this.paylines.paylineDefinition,\n                    );\n\n                    for (let i = 0; i < definition.length; i++) {\n                        const symbol = this.currentSymbols[i][definition[i]];\n                        this.cycleContainer.addChild(symbol);\n                    }\n                }\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            this.reorderSymbols(i);\n        }\n        super.cycleWins(isFirst);\n    }\n\n    protected winSymbolsGoToCase(\n        winIndex: number,\n        caseType: string,\n        useValue: boolean,\n        caseTypeScatter?: string,\n    ): void {\n        if (\n            this.currentWins[winIndex].trigger === Communication.Game.WinTrigger.Scatter &&\n            this.currentWins.length > 1\n        ) {\n            if (caseTypeScatter) {\n                super.winSymbolsGoToCase(winIndex, caseTypeScatter, false);\n            } else {\n                super.winSymbolsGoToCase(winIndex, caseType, false);\n            }\n        } else {\n            super.winSymbolsGoToCase(winIndex, caseType, useValue);\n        }\n\n        if (!useValue) {\n            for (let i = 0; i < this.currentSymbols.length; i++) {\n                this.reorderSymbols(i);\n            }\n        }\n    }\n\n    protected winSymbolsGoToCaseAsPayline(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        if (this.paylines != null) {\n            const definition = PaylinesDefinitions.getPaylineDefinitionsById(\n                win.paylineId,\n                this.paylines.paylineDefinition,\n            );\n\n            for (let i = 0; i < definition.length; i++) {\n                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\n                    const symbol = this.currentSymbols[i][definition[i]];\n\n                    let caseTypeCustom: string = Symbol.CaseWin + \"_\" + i;\n\n                    if (this.currentMultiplierIndex === 0) {\n                        caseTypeCustom = Symbol.CaseWin;\n                    }\n\n                    if (caseType === Symbol.CaseCycle) {\n                        caseTypeCustom = Symbol.CaseCycle + \"_\" + i;\n                    }\n\n                    if (caseType === Symbol.CaseWin || caseType === Symbol.CaseCycle) {\n                        if (symbol.hasCase(caseTypeCustom)) {\n                            symbol.goToCase(caseTypeCustom);\n                            if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\n                                this.winFrames[i][definition[i]].goToCase(caseTypeCustom);\n                        } else {\n                            symbol.goToCase(caseType);\n                            if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\n                                this.winFrames[i][definition[i]].goToCase(caseType);\n                        }\n                    } else {\n                        symbol.goToCase(caseType);\n                        if (this.winFrames != null && this.winFrames[i][definition[i]] != null)\n                            this.winFrames[i][definition[i]].goToCase(caseType);\n                    }\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected allSymbolsGoToCase(caseType: string, noWin: boolean, noAddChild: boolean = false): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\n                    if (this.winFrames != null && this.winFrames[i][j] != null) this.winFrames[i][j].goToCase(caseType);\n                    if (caseType === Symbol.CaseNormal && symbol.getCurrentCase() === Symbol.CaseIdle) {\n                    } else {\n                        symbol.goToCase(caseType);\n                        if (!noAddChild) {\n                            if (noWin) {\n                                this.noWinSymbolsContainer.addChild(symbol);\n                            } else {\n                                this.symbolsContainer.addChild(symbol);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    protected addCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\n            const id = this.currentReels[reelIndex].symbols[symbolIndex];\n            let value = 0;\n            if (this.currentReels[reelIndex].customData != null) {\n                value = this.currentReels[reelIndex].customData[symbolIndex];\n            }\n\n            const symbol = this.symbols.getSymbol(id - 1, Symbol.CaseNormal);\n            if (Symbol.Teas && symbol.id < 8) {\n                symbol.goToCase(Symbol.CaseNowin);\n            }\n            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\n            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\n\n            this.symbolsContainer.addChild(symbol);\n            this.currentSymbols[reelIndex][symbolIndex] = symbol;\n        }\n    }\n\n    protected winSymbolsGoToCaseAsScatter(\n        winIndex: number,\n        caseType: string,\n        replaceWildWithScatter?: boolean,\n    ): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\n                    let symbol = this.currentSymbols[i][j];\n\n                    if (symbol.id == 9 && replaceWildWithScatter) {\n                        //switch scatter symbols with wild symbols in currentSymbol array\n                        //wild symbols over scatter go to alpha state\n                        if (this._currentWinScatterSymbols.length > 0) {\n                            let wildSymbol = symbol;\n                            symbol = this._currentWinScatterSymbols.shift();\n                            this._currentWinScatterSymbols.push(wildSymbol);\n                            this.currentSymbols[i][j] = symbol;\n                            wildSymbol.goToCase(\"BELOW_SCATTER\");\n                        }\n                    }\n\n                    if (symbol.id !== 9) {\n                        symbol.goToCase(caseType);\n                        if (caseType === Symbol.CaseNowin) {\n                            this.noWinSymbolsContainer.addChild(symbol);\n                        } else {\n                            this.symbolsContainer.addChild(symbol);\n                        }\n                        symbols.push(symbol);\n                    }\n                }\n            }\n        }\n\n        this._currentWinScatterSymbols.forEach((symbol: Symbol) => {\n            if (caseType === Symbol.CaseNowin) {\n                symbol.goToCase(Symbol.CaseNowin);\n                this.noWinSymbolsContainer.addChild(symbol);\n            }\n        });\n\n        return symbols;\n    }\n\n    public cleanUpSymbols(): void {}\n\n    protected onTimerComplete(): void {\n        this.timer.stop();\n\n        switch (this.timerStatus) {\n            case WinAnimator2.AlLWinsFinishedTimer:\n                this.emit(WinAnimator.FinishWinAnimator);\n                break;\n            default:\n                super.onTimerComplete();\n        }\n    }\n\n    public reset(showLastSymbols: boolean): boolean {\n        WinAnimator2.Teas = false;\n        this._currentPaylineId = 0;\n        this._currentPaylineCount = 0;\n        if (this._paylineTimer != null) this._paylineTimer.stop();\n        if (this._paylinesTimer != null) this._paylinesTimer.stop();\n\n        if (this.paylineNumbers != null) {\n            this.paylineNumbers.goToCase(\"NORMAL\");\n        }\n        if (this._paylineNumbersRight != null) {\n            this._paylineNumbersRight.goToCase(\"NORMAL\");\n        }\n        if (this._multiplierNumber != null) {\n            this._multiplierNumber.goToCase(\"NORMAL\");\n        }\n        if (this._paylineNumbersMiddle != null) {\n            this._paylineNumbersMiddle.goToCase(\"NORMAL\");\n        }\n\n        let rtn: boolean = super.reset(showLastSymbols);\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            this.reorderSymbols(i);\n            this.reorderWildSymbols(i);\n        }\n        return rtn;\n    }\n\n    protected beforeWinPaylineGoToCase(winIndex: number, caseType: string): void {\n        if (this.paylines != null) {\n            const win = this.currentWins[winIndex];\n\n            if (win.trigger === Communication.Game.WinTrigger.Payline) {\n                this._currentPaylineCount++;\n                if (this.paylineNumbers != null) {\n                    this.paylineNumbers.goToCase(\"WIN_\" + this._currentPaylineCount);\n                }\n                if (this._paylineNumbersRight != null) {\n                    this._paylineNumbersRight.goToCase(\"WIN_\" + this._currentPaylineCount);\n                }\n                if (this._paylineNumbersMiddle != null) {\n                    this._paylineNumbersMiddle.goToCase(\"WIN_\" + this._currentPaylineCount);\n                }\n\n                if (caseType === Payline.CaseWin && this.currentWins.length === 1) {\n                    this.paylines.goToCase(Payline.CaseSingleWin, win.paylineId);\n                } else {\n                    this.paylines.goToCase(caseType, win.paylineId);\n                }\n            }\n        }\n    }\n\n    private showPaylinesOnFirst(): void {\n        this.beforeWinPaylineGoToCase(this._currentPaylineId, Payline.CaseFirstWin);\n\n        if (this.currentWins.length > 1 || this.currentWins[0].trigger !== Communication.Game.WinTrigger.Scatter) {\n            PlayList.play(\"SND_BaseWinline_\" + this._winLineIndex + \"_\" + Math.floor(Math.random() * 3));\n        }\n        this._winLineIndex++;\n        if (this._winLineIndex > 3) {\n            this._winLineIndex = 1;\n        }\n        this._paylineTimer.start(5);\n    }\n\n    private onPaylineTimer(): void {\n        if (this._currentPaylineId < this.currentWins.length - 1) {\n            this._currentPaylineId++;\n            this.showPaylinesOnFirst();\n        } else {\n            if (\n                this.currentWins.length === 1 &&\n                this.currentWins[0].trigger === Communication.Game.WinTrigger.Scatter\n            ) {\n                this.onPaylinesTimer();\n            } else {\n                this._paylinesTimer.start(15);\n            }\n        }\n    }\n\n    private onPaylinesTimer(): void {\n        this._paylinesContainerBottom.addChild(this.paylines);\n        if (this.currentWins.length === 1 && this.currentWins[0].trigger === Communication.Game.WinTrigger.Scatter) {\n            this.startAnimation();\n        } else {\n            this.showFirstWinsDelayed();\n        }\n    }\n\n    public machineStopped(reels: Array<Communication.Game.IReel>): boolean {\n        this.allSunsToCase(\"AFTER_TEASING\");\n\n        for (let i: number = 0; i < this.reelCount; i++) {\n            for (let j: number = 0; j < this.currentSymbols[i].length; j++) {\n                if (this.currentSymbols[i][j] != null && this.currentSymbols[i][j].id === 10) {\n                    this.symbolsContainer.addChild(this.currentSymbols[i][j]);\n                }\n            }\n        }\n\n        for (let i = 0; i < this.topSuns.length; i++) {\n            if (this.topSuns[i] != null) {\n                this.noWinSymbolsContainer.addChild(this.topSuns[i]);\n            }\n        }\n\n        let transofrmSound = false;\n        let transofrmMOESound = false;\n        for (let i: number = 0; i < this.currentSuns.length; i++) {\n            for (let j: number = 0; j < this.currentSuns[i].length - 1; j++) {\n                if (this.currentSuns[i][j] !== null) {\n                    if (this.currentSymbols[i][j] !== null && this.currentSymbols[i][j].id === 8) {\n                        this.currentSuns[i][j].goToCase(\"TRANSFORM_MOE\");\n                        transofrmMOESound = true;\n                    } else {\n                        this.currentSuns[i][j].goToCase(\"TRANSFORM\");\n                        transofrmSound = true;\n                    }\n                    this.currentSuns[i][j].alpha = 1;\n                }\n            }\n        }\n\n        this._currentWinScatterSymbols = [];\n        let transform: boolean = false;\n        for (let i: number = 0; i < reels.length; i++) {\n            if (reels[i].transform != null) {\n                for (let j: number = 0; j < reels[i].transform.length; j++) {\n                    const id = reels[i].transform[j];\n                    if (id > 0) {\n                        const symbol1 = this.currentSymbols[i][j];\n                        symbol1.bindSymbols(this.symbols);\n\n                        if (symbol1.id == 10 && ModuleManager.freespinsEnabled()) {\n                            this._currentWinScatterSymbols.push(symbol1);\n                        } else {\n                            symbol1.goToCase(\"HIDE\");\n                        }\n\n                        transofrmSound = true;\n\n                        this.currentSymbols[i][j] = null;\n\n                        const symbol2 = this.symbols.getSymbol(9, \"TRANSFORM\");\n                        symbol2.position.x = this.reelX[i] - symbol2.offsetX;\n                        symbol2.position.y = this.reelY[i] + this.symbolHeight * j - symbol2.offsetY;\n                        symbol2.bindSymbols(this.symbols);\n                        if (ModuleManager.freespinsActive()) {\n                            if (\n                                reels[i].customData != null &&\n                                reels[i].customData[\"wildMultiplier\"] != null &&\n                                reels[i].customData[\"wildMultiplier\"][j] != null\n                            ) {\n                                symbol2.addWildMultiplier(reels[i].customData[\"wildMultiplier\"][j]);\n                            }\n                        } else {\n                            symbol2.removeWildMultiplier();\n                        }\n                        this.currentSymbols[i][j] = symbol2;\n                        this.symbolsContainer.addChild(symbol2);\n                        transform = true;\n                    }\n                }\n                this.reorderSymbols(i);\n                this.reorderWildSymbols(i);\n            }\n        }\n\n        if (transofrmSound) {\n            PlayList.play(\"SND_BaseWildExplode\");\n        }\n\n        if (transofrmMOESound) {\n            PlayList.play(\"SND_BaseWildMOEExplode\");\n        }\n\n        return transform;\n    }\n\n    public isMoESymbol(reels: Array<Communication.Game.IReel>): boolean {\n        this.allSymbolsGoToCase(Symbol.CaseNormal, true);\n        this.allPaylinesGoToCase(Payline.CaseNormal);\n\n        let isMoESymbol = false;\n        for (let i: number = 0; i < this.currentSuns.length; i++) {\n            for (let j: number = 0; j < this.currentSuns[i].length - 1; j++) {\n                if (this.currentSuns[i][j] !== null) {\n                    if (this.currentSymbols[i][j] !== null && this.currentSymbols[i][j].id === 8) {\n                        isMoESymbol = true;\n                        if (ModuleManager.freespinsActive()) {\n                            this.currentSuns[i][j].goToCase(\"MOE_BEFORE_WIN_FS\");\n                        } else {\n                            this.currentSuns[i][j].goToCase(\"MOE_BEFORE_WIN\");\n                        }\n                    }\n                }\n            }\n        }\n\n        if (isMoESymbol) {\n            PlayList.play(\"SND_BaseWildMOE2\");\n        }\n\n        return isMoESymbol;\n    }\n\n    public spin(reels: Array<Communication.Game.IReel>): void {\n        for (let i = 0; i < this.topSuns.length; i++) {\n            if (this.topSuns[i] != null) {\n                this.sunContainer.addChild(this.topSuns[i]);\n                this.topSuns[i].x = this.reelX[i] - this.topSuns[i].offsetX;\n                this.topSuns[i].y = this.reelY[i] - this.symbolHeight - this.topSuns[i].offsetY;\n                this.topSuns[i].goToCase(\"CREATE_TOP\");\n                this.topSuns[i] = null;\n            }\n        }\n\n        let sunMoveSound = false;\n        for (let i: number = 0; i < this.currentSuns.length; i++) {\n            for (let j: number = 0; j < this.currentSuns[i].length; j++) {\n                if (this.currentSuns[i][j] !== null) {\n                    const sun = this.currentSuns[i][j];\n                    sun.position.x = this.reelX[i] - this.currentSuns[i][j].offsetX;\n                    sun.position.y = this.reelY[i] + this.symbolHeight * j - this.currentSuns[i][j].offsetY;\n                    sunMoveSound = true;\n                    if (j === 0) {\n                        // this.currentSuns[i][j].goToCase('CREATE_TOP');\n                        sun.goToCase(\"CREATE\");\n                        this.currentSuns[i][j] = null;\n                        this.topSuns[i] = sun;\n                    } else if (j === 4) {\n                        sun.goToCase(\"MOVE_FROM_BOTTOM\");\n                    } else {\n                        sun.goToCase(\"CREATE\");\n                    }\n                    sun.alpha = 1;\n                    sun.removeSunMultiplier();\n                }\n            }\n        }\n\n        if (sunMoveSound) {\n            PlayList.play(\"SND_BaseWildMoves\");\n        }\n\n        //reorder temporary wild symbol over scatter\n        if (this._currentWinScatterSymbols != null) {\n            for (let i = 0; i < this._currentWinScatterSymbols.length; i++) {\n                const symbol = this._currentWinScatterSymbols[i];\n\n                if (symbol !== null && symbol.id === 9) {\n                    symbol.goToCase(\"HIDE\");\n                }\n            }\n\n            this._currentWinScatterSymbols = [];\n        }\n    }\n\n    public spinReceived(reels: Array<Communication.Game.IReel>): void {\n        let newSunSound = false;\n        for (let i: number = 0; i < reels.length; i++) {\n            if (reels[i].overlay != null) {\n                this.currentSuns[i].shift();\n                for (let j: number = 0; j < reels[i].overlay.length; j++) {\n                    const id = reels[i].overlay[j];\n                    if (j === reels[i].overlay.length - 1) {\n                        if (id > 0) {\n                            const symbol = this.symbols.getSymbol(12, \"CREATE_WITHOUT_MOVE\");\n                            newSunSound = true;\n                            symbol.position.x = this.reelX[i] - symbol.offsetX;\n                            symbol.position.y = this.reelY[i] + this.symbolHeight * 4 - symbol.offsetY;\n                            symbol.bindSymbols(this.symbols);\n                            symbol.removeSunMultiplier();\n                            this.currentSuns[i].push(symbol);\n                            this.sunContainer.addChild(symbol);\n                        } else {\n                            this.currentSuns[i].push(null);\n                        }\n                    } else {\n                        // TODO pridaj validaciu\n                        // if(!(id > 0 && this.currentSuns[i] !== null)) {\n                        //     // TODO divny case\n                        // }\n                    }\n                }\n            }\n\n            if (newSunSound) {\n                PlayList.play(\"SND_BaseWildCreate\");\n            }\n        }\n\n        let isAddMlp = false;\n        for (let i: number = 0; i < reels.length; i++) {\n            if (reels[i].overlay != null) {\n                for (let j: number = 0; j < reels[i].overlay.length; j++) {\n                    if (this.currentSuns[i][j] !== null) {\n                        if (ModuleManager.freespinsActive()) {\n                            if (\n                                reels[i].customData != null &&\n                                reels[i].customData[\"baseWildMultiplier\"] != null &&\n                                reels[i].customData[\"baseWildMultiplier\"][j] != null\n                            ) {\n                                this.currentSuns[i][j].addSunMultiplier(reels[i].customData[\"baseWildMultiplier\"][j]);\n                                this.currentSuns[i][j].goToCase(\"ADD_MLP\");\n                                isAddMlp = true;\n                            }\n                        } else {\n                            this.currentSuns[i][j].removeSunMultiplier();\n                        }\n                    }\n                }\n            }\n        }\n\n        if (isAddMlp) {\n            PlayList.play(\"SND_FSMultiplier\" + this._multiplierSoundCounter);\n            this._multiplierSoundCounter++;\n            if (this._multiplierSoundCounter > 2) {\n                this._multiplierSoundCounter = 0;\n            }\n        }\n    }\n\n    public createSuns(reels: Array<Communication.Game.IReel>): void {\n        for (let i: number = 0; i < this.currentSuns.length; i++) {\n            for (let j: number = 0; j < this.currentSuns[i].length; j++) {\n                if (this.currentSuns[i][j] !== null) {\n                    this.currentSuns[i][j].goToCase(\"RESET\");\n                    this.currentSuns[i][j].removeSunMultiplier();\n                    this.currentSuns[i][j] = null;\n                }\n            }\n        }\n\n        for (let i: number = 0; i < reels.length; i++) {\n            if (reels[i].overlay != null) {\n                for (let j: number = 0; j < reels[i].overlay.length; j++) {\n                    const id = reels[i].overlay[j];\n                    if (id > 0) {\n                        const symbol = this.symbols.getSymbol(12, j === 4 ? \"QUICK_CREATE\" : \"EMPTY\");\n                        symbol.position.x = this.reelX[i] - symbol.offsetX;\n                        symbol.position.y = this.reelY[i] + this.symbolHeight * j - symbol.offsetY;\n                        symbol.bindSymbols(this.symbols);\n                        symbol.removeSunMultiplier();\n                        this.currentSuns[i][j] = symbol;\n                        this.currentSuns[i][j].alpha = 1;\n                        this.sunContainer.addChild(symbol);\n                    } else {\n                        this.currentSuns[i][j] = null;\n                    }\n                }\n            }\n        }\n    }\n\n    public clearTopSuns(): void {\n        for (let i = 0; i < this.topSuns.length; i++) {\n            if (this.topSuns[i] != null) {\n                this.topSuns[i].goToCase(\"RESET\");\n                this.topSuns[i].removeSunMultiplier();\n                this.topSuns[i] = null;\n            }\n        }\n    }\n\n    private reorderSymbols(reelIndex: number): void {\n        for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n            const symbol = this.currentSymbols[reelIndex][i];\n            if (symbol !== null && symbol.id === 6) {\n                symbol.parent.addChild(symbol);\n            }\n            if (symbol !== null && symbol.id === 7) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n            const symbol = this.currentSymbols[reelIndex][i];\n            if (symbol !== null && symbol.id === 8) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n            const symbol = this.currentSymbols[reelIndex][i];\n\n            if (symbol !== null && symbol.id === 9) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n            const symbol = this.currentSymbols[reelIndex][i];\n\n            if (symbol !== null && symbol.id === 10) {\n                symbol.parent.addChild(symbol);\n            }\n        }\n\n        //reorder temporary wild symbol over scatter\n        // if (this._currentWinScatterSymbols != null && !ModuleManager.freespinsEnabled()) {\n        //     for (let i = 0; i < this._currentWinScatterSymbols.length; i++) {\n        //         const symbol = this._currentWinScatterSymbols[i];\n        //\n        //         if (symbol !== null && symbol.id === 9) {\n        //             symbol.parent.addChild(symbol);\n        //         }\n        //     }\n        // }\n    }\n\n    private reorderWildSymbols(reelIndex: number): void {\n        if (!ModuleManager.freespinsEnabled()) {\n            for (let i = 0; i < this.currentSymbols[reelIndex].length; i++) {\n                const symbol = this.currentSymbols[reelIndex][i];\n\n                if (symbol !== null && symbol.id === 9) {\n                    symbol.parent.addChild(symbol);\n                }\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/WinAnimator2.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { Paylines } from \"../Paylines\";\nimport { Symbols } from \"../Symbols\";\nimport { Machine } from \"../Machine\";\nimport { WinAnimator } from \"../WinAnimator\";\nimport { FreespinsController } from \"./FreespinsController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\nimport { WinAnimator2 } from \"../../CustomComponents/WinAnimator2\";\nimport { BaseView } from \"../Base/BaseView\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\nimport { FreespinsModel } from \"./FreespinsModel\";\nimport { LayoutContainerElement } from \"../../CustomComponents/LayoutContainerElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class FreespinsView extends LayoutContainerElement {\n    public static FsMessageBox: SwitchElement;\n    public static Logo: SwitchElement;\n\n    private _controller: FreespinsController;\n    private _introDelay: FrameTimerEventEmitter;\n    private _outroDelay: FrameTimerEventEmitter;\n    private _paylines: Paylines;\n    private _symbols: Symbols;\n    private _machine: Machine;\n    private _winAnimator: WinAnimator2;\n    private _fsMessageStart: HTMLElement;\n    private _fsMessageEnd: HTMLElement;\n    private _fsMessageEndNoWin: HTMLElement;\n\n    private _wildDelay: FrameTimerEventEmitter;\n    private _symbolMoEDelay: FrameTimerEventEmitter;\n    private _showMessageEndFsDelay: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n        this._introDelay = CreateFrameTimer(\"introDelay\");\n        this._introDelay.on(FrameTimerEvents.Complete, this.introFinished.bind(this));\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\n        this._wildDelay = CreateFrameTimer(\"wildDelay\");\n        this._wildDelay.on(FrameTimerEvents.Complete, this.machineStoppedDelayed.bind(this));\n        this._symbolMoEDelay = CreateFrameTimer(\"symbolMoEDelay\");\n        this._symbolMoEDelay.on(FrameTimerEvents.Complete, this.symbolMoEDelay.bind(this));\n        this._showMessageEndFsDelay = CreateFrameTimer(\"showMessageEndFsDelay\");\n        this._showMessageEndFsDelay.on(FrameTimerEvents.Complete, this.showMessageEndFsDelay.bind(this));\n    }\n\n    public create(node: Element): void {\n        super.create(node);\n        if (this.childs[\"Symbols\"] != null) {\n            this._symbols = this.childs[\"Symbols\"];\n            this.removeChild(this._symbols);\n        }\n        if (this.childs[\"Paylines\"] != null) this._paylines = this.childs[\"Paylines\"];\n        if (this.childs[\"Machine\"] != null) this._machine = this.childs[\"Machine\"];\n        if (this.childs[\"WinAnimator\"] != null) this._winAnimator = this.childs[\"WinAnimator\"];\n\n        if (this.childs[\"FsMessageBox\"] != null) FreespinsView.FsMessageBox = this.childs[\"FsMessageBox\"];\n        if (this.childs[\"Logo\"] != null) FreespinsView.Logo = this.childs[\"Logo\"];\n\n        this._fsMessageStart = document.getElementById(\"fsMessageStart\");\n        this._fsMessageEnd = document.getElementById(\"fsMessageEnd\");\n        this._fsMessageEndNoWin = document.getElementById(\"fsMessageEndNoWin\");\n\n        //prevent first animation on page load\n        this._fsMessageStart.classList.add(\"_noAnim\");\n        this._fsMessageEnd.classList.add(\"_noAnim\");\n        this._fsMessageEndNoWin.classList.add(\"_noAnim\");\n\n        this.visible = false;\n    }\n\n    public initReceived(controller: FreespinsController): void {\n        this._controller = controller;\n\n        if (this._symbols != null) {\n            if (this._machine != null) {\n                if (GameManager.freespinsResponse != null) {\n                    if (\n                        GameManager.freespinsResponse.initData != null &&\n                        GameManager.freespinsResponse.initData.reels !== null\n                    ) {\n                        this._machine.on(Machine.ReelStopped, this.onReelStopped.bind(this));\n                        this._machine.on(Machine.MachineStopped, this.machineStopped.bind(this));\n                        this._machine.initialize(\n                            this._symbols,\n                            GameManager.freespinsResponse.initData.reels,\n                            null,\n                            null,\n                            true,\n                        );\n                    }\n\n                    if (this._winAnimator != null) {\n                        this._winAnimator.on(WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\n                        this._winAnimator.on(WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\n                        this._winAnimator.initialize(\n                            this._symbols,\n                            this._paylines,\n                            this.childs[\"NoWinContainer\"],\n                            this.childs[\"WinContainer\"],\n                            this.childs[\"WinFrameContainer\"],\n                            this.childs[\"CycleContainer\"],\n                            this.childs[\"PaylineNumbers\"],\n                            this.childs[\"SunContainer\"],\n                            this.childs[\"BonusTeasingContainer\"],\n                            this.childs[\"HWContainer\"],\n                        );\n                        // this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n                        // if(FreespinsModel.LastScreen != null && FreespinsModel.LastScreen['reels'] !== null) this._winAnimator.createSuns(FreespinsModel.LastScreen['reels']);\n                        this._winAnimator.setupPaylinesContainer(\n                            this.childs[\"PaylinesContainerBottom\"],\n                            this.childs[\"PaylinesContainerTop\"],\n                            this.childs[\"PaylineNumbersRight\"],\n                            this.childs[\"PaylineNumbersMiddle\"],\n                            this.childs[\"MultiplierNumberMiddle\"],\n                        );\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no freespin reponse\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no machine\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n        this.visible = false;\n    }\n\n    public startReceived(): void {\n        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageStart.classList.add(HtmlController.DisabledClass);\n            BaseView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\n        }\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n        if (FreespinsModel.LastScreen != null && FreespinsModel.LastScreen[\"reels\"] !== null)\n            this._winAnimator.createSuns(FreespinsModel.LastScreen[\"reels\"]);\n        this._winAnimator.reset(true);\n    }\n\n    public spinReceived(): void {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.screen !== null) {\n            this._winAnimator.spinReceived(GameManager.freespinsResponse.screen.reels);\n        }\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._machine.spinStop(null, false, true);\n    }\n\n    public endReceived(): void {}\n\n    public spin(): void {\n        if (FreespinsModel.LastScreen != null && FreespinsModel.LastScreen[\"reels\"] != null) {\n            this._winAnimator.spin(FreespinsModel.LastScreen[\"reels\"]);\n        } else {\n            this._winAnimator.spin(null);\n        }\n        PlayList.loop(\"SND_FSLoop\");\n        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageStart.classList.add(HtmlController.DisabledClass);\n            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\n        }\n        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\n    }\n\n    public stop(): void {\n        this._machine.spinStop(null, true);\n    }\n\n    public initIntro(): void {\n        AmbientBackground.changeAmbientBackground(\"fs\", 0);\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n        if (FreespinsModel.LastScreen != null && FreespinsModel.LastScreen[\"reels\"] !== null)\n            this._winAnimator.createSuns(FreespinsModel.LastScreen[\"reels\"]);\n        this._winAnimator.showInitWins(GameManager.freespinsResponse.wins, GameManager.freespinsResponse.currentWin);\n        this.visible = true;\n        this.retrigger();\n\n        if (this.isLastFreespin()) {\n            PlayList.stop(\"SND_FSLoop\");\n            PlayList.loop(\"SND_FSEndWait\");\n            PlayList.play(\"SND_FSEnd\");\n\n            if (GameManager.freespinsResponse.totalWin > 0) {\n                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n                    this._fsMessageEnd.classList.remove(HtmlController.DisabledClass);\n                    this._fsMessageEnd.classList.remove(\"_noAnim\");\n                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                    if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n                }\n            } else {\n                if (\n                    this._fsMessageEndNoWin != null &&\n                    this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n                ) {\n                    this._fsMessageEndNoWin.classList.remove(HtmlController.DisabledClass);\n                    this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\n                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                    if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n                }\n            }\n        } else {\n            PlayList.loop(\"SND_FSLoop\");\n        }\n    }\n\n    public intro(long: boolean = false): void {\n        this.visible = true;\n\n        if (BaseView.Transition != null) {\n            this.addChild(BaseView.Transition);\n            BaseView.Transition.goToCase(\"END\");\n        }\n\n        setTimeout(() => {\n            // TODO\n        }, 800);\n        this._introDelay.start(60);\n    }\n\n    public outro(): void {\n        AmbientBackground.changeAmbientBackground(\"base\", 90);\n        if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n        this.visible = true;\n        if (BaseView.Transition != null) {\n            this.addChild(BaseView.Transition);\n            BaseView.Transition.goToCase(\"START\");\n        }\n        if (FreespinsView.FsMessageBox.getCurrentCase() === \"MESSAGE_SHOW\") {\n            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_HIDE\");\n        }\n        PlayList.stop(\"SND_FSLoop\");\n        PlayList.stop(\"SND_FSWait\");\n        PlayList.play(\"SND_FSTrans\");\n        if (this._fsMessageEnd != null && !this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageEnd.classList.add(HtmlController.DisabledClass);\n        }\n        if (\n            this._fsMessageEndNoWin != null &&\n            !this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._fsMessageEndNoWin.classList.add(HtmlController.DisabledClass);\n        }\n        this._outroDelay.start(30);\n    }\n\n    public disableLogo(): void {\n        if (this.childs[\"Logo\"] != null) {\n            this.removeChild(this.childs[\"Logo\"]);\n        }\n    }\n\n    public enable(): void {\n        PlayList.play(\"SND_FSWin\");\n\n        if (this._fsMessageStart != null && this._fsMessageStart.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageStart.classList.remove(HtmlController.DisabledClass);\n            this._fsMessageStart.classList.remove(\"_noAnim\");\n            BaseView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n            if (BaseView.Logo != null) BaseView.Logo.goToCase(\"ONLY_LOGO\");\n        }\n    }\n\n    private onReelStopped(): void {\n        this._winAnimator.onReelStopped(GameManager.freespinsResponse.screen.reels, this._machine.actualReelStopped);\n    }\n\n    private machineStopped(): void {\n        if (this._winAnimator.isMoESymbol(GameManager.freespinsResponse.screen.reels)) {\n            this._controller.beforeMachineStopped();\n            this._symbolMoEDelay.start(35);\n        } else {\n            this.symbolMoEDelay();\n        }\n    }\n\n    private symbolMoEDelay(): void {\n        this._symbolMoEDelay.stop();\n        if (this._winAnimator.machineStopped(GameManager.freespinsResponse.screen.reels)) {\n            this._controller.beforeMachineStopped();\n            this._wildDelay.start(40);\n        } else {\n            this.machineStoppedDelayed();\n        }\n    }\n\n    private machineStoppedDelayed(): void {\n        if (GameManager.freespinsResponse.currentWin !== 0 || !this.isLastFreespin()) {\n            this._controller.machineStopped();\n        }\n\n        if (this._winAnimator.showWins(GameManager.freespinsResponse.wins, GameManager.freespinsResponse.currentWin)) {\n            // PlayList.stop('SND_FSLoop');\n        }\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            if (this.isLastFreespin()) {\n                this._showMessageEndFsDelay.start(50);\n            }\n        }\n    }\n\n    private showMessageEndFsDelay(): void {\n        this._showMessageEndFsDelay.stop();\n        this._controller.machineStopped();\n\n        PlayList.stop(\"SND_FSLoop\");\n        PlayList.loop(\"SND_FSWait\");\n        PlayList.play(\"SND_FSEnd\");\n\n        if (GameManager.freespinsResponse.totalWin > 0) {\n            if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n                this._fsMessageEnd.classList.remove(HtmlController.DisabledClass);\n                this._fsMessageEnd.classList.remove(\"_noAnim\");\n                FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n            }\n        } else {\n            if (\n                this._fsMessageEndNoWin != null &&\n                this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._fsMessageEndNoWin.classList.remove(HtmlController.DisabledClass);\n                this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\n                FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n            }\n        }\n    }\n\n    private finishWinCalculation(): void {\n        this._controller.winCalculationFinished();\n    }\n\n    private finishWinAnimator(): void {\n        this._controller.allWinsFinished();\n\n        if (this.isLastFreespin()) {\n            PlayList.stop(\"SND_FSLoop\");\n            PlayList.loop(\"SND_FSWait\");\n            PlayList.play(\"SND_FSEnd\");\n\n            if (GameManager.freespinsResponse.totalWin > 0) {\n                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n                    this._fsMessageEnd.classList.remove(HtmlController.DisabledClass);\n                    this._fsMessageEnd.classList.remove(\"_noAnim\");\n                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                    if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n                }\n            } else {\n                if (\n                    this._fsMessageEndNoWin != null &&\n                    this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n                ) {\n                    this._fsMessageEndNoWin.classList.remove(HtmlController.DisabledClass);\n                    this._fsMessageEndNoWin.classList.remove(\"_noAnim\");\n                    FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                    if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n                }\n            }\n        } else {\n            PlayList.loop(\"SND_FSLoop\");\n        }\n\n        this.retrigger();\n    }\n\n    private introFinished(): void {\n        AmbientBackground.changeAmbientBackground(\"color-1\", 0);\n        PlayList.loop(\"SND_FSLoop\");\n        FreespinsView.FsMessageBox.goToCase(\"EMPTY\");\n        if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"LOGO\");\n        this._controller.introFinished();\n    }\n\n    private outroFinished(): void {\n        this.visible = false;\n        this._winAnimator.resetTimer();\n        this._controller.outroFinished();\n    }\n\n    private retrigger(): void {\n        if (!this.isLastFreespin()) {\n            if (GameManager.freespinsResponse.wins != null && GameManager.freespinsResponse.wins.length > 0) {\n                for (let i: number = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                    if (\n                        GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Scatter &&\n                        GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.freeSpins &&\n                        GameManager.freespinsResponse.wins[i].symbols[0] === 9\n                    ) {\n                        if (\n                            this._fsMessageStart != null &&\n                            this._fsMessageStart.classList.contains(HtmlController.DisabledClass)\n                        ) {\n                            PlayList.play(\"SND_FSWin\");\n                            this._fsMessageStart.classList.remove(HtmlController.DisabledClass);\n                            this._fsMessageStart.classList.remove(\"_noAnim\");\n                            FreespinsView.FsMessageBox.goToCase(\"MESSAGE_SHOW\");\n                            if (this.childs[\"Logo\"] != null) this.childs[\"Logo\"].goToCase(\"ONLY_LOGO\");\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            return true;\n        }\n        return (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        );\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsView.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { Paytable } from \"../Common/Paytable/Paytable\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\nimport { FreeRoundBonusExtended } from \"../Common/Bonuses/FreeRoundBonusExtended\";\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobileBaseUserControls extends UserControls {\n    protected _controller: BaseController;\n\n    private _betSettings: HTMLElement;\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _paytable: Paytable;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n\n    private _wasCalclulated: boolean = true;\n    private _unColectedWin: number = 0;\n    private _unColectedWinDelay: FrameTimerEventEmitter;\n    private _machineStopped: boolean = true;\n    private longIntro: boolean = false;\n\n    constructor() {\n        super(\"base\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\n\n        this._userControls = document.getElementById(\"userControls\");\n\n        this._betSettings = document.getElementById(\"betSettings\");\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    addController(controller: BaseController): void {\n        this._controller = controller;\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\n\n        this._controller.on(BaseController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [BaseActions.ActionAutoplay]: false,\n            [BaseActions.ActionAutoplayStop]: false,\n            [BaseActions.ActionBaseCollect]: false,\n            [BaseActions.ActionBetCycle]: false,\n            [BaseActions.ActionBetPlus]: false,\n            [BaseActions.ActionBetMinus]: false,\n            [BaseActions.ActionSpin]: false,\n            [BaseActions.ActionSpinStop]: false,\n        });\n\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        this._paytable = new Paytable();\n        this._paytable.initialize();\n\n        if (GameManager.gameResponse != null) {\n            if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWin,\n                    GameManager.gameResponse.totalWin.toString(),\n                );\n            }\n        }\n\n        if (this._userControls != null && !ModuleManager.gambleActive()) {\n            this._userControls.style.display = \"none\";\n        }\n\n        if (this._userControls_supreme != null && !ModuleManager.gambleActive()) {\n            this._userControls_supreme.style.display = \"none\";\n        }\n\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        } else if (ModuleManager.gambleActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n        }\n\n        DataManager.updateDataElements();\n    }\n\n    collectReceived(): void {\n        FreeRoundBonusExtended.enableUi();\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._unColectedWin,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        super.collectReceived();\n\n        this._wasCalclulated = true;\n        DataManager.Collectable = true;\n        DataManager.updateDataElements();\n\n        this.prepareNewGameRound();\n\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n            this.changeWinBox(true);\n        } else {\n            if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            }\n            this.changeWinBox();\n        }\n        this._unColectedWinDelay.stop();\n        //this._unColectedWinDelay.start(75);\n        this._unColectedWin = 0;\n\n        if (FreeRoundBonusExtended.isLastFrb) {\n            FreeRoundBonusExtended.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n    }\n\n    restoreGameRound(collect: boolean = false): void {\n        super.collectReceived();\n        this.changeWinBox(collect);\n\n        FreeRoundBonusExtended.enableUi();\n\n        DataManager.Collectable = true;\n\n        //this.prepareNewGameRound();\n        this._afterWinDelay.start(35);\n    }\n\n    spinReceived(): void {\n        FreeRoundBonusExtended.frbSpin();\n\t\tconst hasFRBRestriction = FreeRoundBonusExtended.inFrb && AppContext.gameConfiguration.FRBGameRoundMinSpan > 0;\n\n        if (DataManager.quickspinEnabled() && !hasFRBRestriction) {\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            DataManager.updateDataElement(GameData.DataRoundId);\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                BaseActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop && !hasFRBRestriction,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            DataManager.updateDataElement(GameData.DataRoundId);\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.gambleActive() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            if (action === BaseActions.ActionBaseCollect) {\n                this.changeWinBox(true);\n            } else {\n                this.changeWinBox();\n            }\n\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case BaseActions.ActionSpin:\n                    this.spin();\n                    break;\n                case BaseActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case BaseActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case BaseActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n                case BaseActions.ActionBetCycle:\n                    this.changeBet(false, false, true);\n                    break;\n                case BaseActions.ActionBetPlus:\n                    this.changeBet(false, false, false);\n                    break;\n                case BaseActions.ActionBetMinus:\n                    this.changeBet(true, false, false);\n                    break;\n                case BaseActions.ActionBaseCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n            }\n        }\n\n        super.collect();\n\n        ModuleManager.disableGamble();\n        this.disable();\n        this.playCollectSound();\n\n        this._controller.collect();\n\n        LimitDialog.closeDialog();\n        GameManager.collect(GameModules.Base);\n\n        if (!(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWin,\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\n            );\n        }\n        //this._unColectedWinDelay.start(75);\n    }\n\n    unColectedWinDelay(): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n    }\n\n    spin(): void {\n        this._machineStopped = false;\n\n        FreeRoundBonusExtended.disableUi();\n        if (FreeRoundBonusExtended.hasNewActiveOffer()) {\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                FreeRoundBonusExtended.enableUi();\n            }\n            return;\n        }\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            !(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                GameManager.canExit();\n                this.changeWinBox();\n            }\n\n            return;\n        }\n\n        if (BetHigherThanMinDialog.canOpenDialog()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            }\n            BetHigherThanMinDialog.openDialog();\n            return;\n        }\n\n        if (Paytable.shouldOpen(true, true)) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                Paytable.show();\n            }\n            return;\n        }\n\n        if (\n            !DataManager.Autoplay &&\n            !this._wasCalclulated &&\n            !DataManager.GameRoundClosed &&\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\n        ) {\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        } else {\n            this.changeWinBox();\n            if (!this._wasCalclulated) {\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n                }\n            }\n        }\n\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: balanceAfter,\n                inSpin: true,\n            });\n        }\n\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            this.autoplayStop();\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        }\n\n        if (!BalanceManager.hasCredit(false, true)) {\n            DataManager.Autoplay = false;\n            ModuleManager.disableGamble();\n            this.prepareNewGameRound();\n            return;\n        }\n\n        DataManager.Collectable = false;\n        ModuleManager.disableGamble();\n        this.actions.disableAllActions();\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n        if (DataManager.Autoplay) {\n            if (\n                !DataManager.AutoplayStarted &&\n                GameManager.baseResponse != null &&\n                GameManager.baseResponse.totalWin != null &&\n                GameManager.baseResponse.totalWin > 0\n            ) {\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\n            }\n            DataManager.updateLossLimit();\n            this.actions.changeActionState(\n                BaseActions.ActionAutoplayStop,\n                AppContext.gameConfiguration.AutoplayModeEnabled,\n            );\n        }\n        HtmlController.dispatchUiAction(\"\");\n        HtmlController.updateActionElements(this.getAllActions());\n        this.playCollectSound();\n\n        DataManager.updateTotalGain(true);\n        BalanceManager.fixBalance();\n        if (\n            !DataManager.GameRoundClosed ||\n            (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n        }\n        this._controller.spin();\n\n        LimitDialog.closeDialog();\n\n        this._wasCalclulated = false;\n\n        Platforms.Platforms.roundStarted({\n            totalBet: BetManager.Bet,\n            freeRound: FreeRoundBonusExtended.inFrb,\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n        });\n        Platforms.Platforms.spinStarted();\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\n    }\n\n    stop(): void {\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n\n        Platforms.Platforms.autoplayStop();\n\n        if (this._machineStopped) {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusExtended.enableUi();\n                Platforms.Platforms.roundEnded();\n                if (FreeRoundBonusExtended.isLastFrb) {\n                    FreeRoundBonusExtended.endFreeRounds();\n                    ModuleManager.disableBase();\n                }\n            }\n        }\n\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\n    }\n\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        if (!DataManager.GameRoundClosed) {\n            this._unColectedWin = 0;\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            this.changeWinBox();\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBet(decrease, max, cycle);\n        this._paytable.updateDataValues();\n\n        if (BetManager.minBet) {\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n        } else if (BetManager.maxBet) {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        } else {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        }\n        this.updateReelsByBetChange();\n    }\n\n    updateReelsByBetChange(): void {\n        this._controller.updateReelsByBetChange();\n    }\n\n    beforeMachineStopped(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            this.autoplayStop();\n        }\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionSpinStop, false);\n    }\n\n    machineStopped(): void {\n        this._machineStopped = true;\n        Platforms.Platforms.spinEnded();\n\n        DataManager.stopAutoplayIfLossLimit();\n        DataManager.stopAutoplayIfWinLimit();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\n            FreeRoundBonusExtended.enableUi();\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n            if (FreeRoundBonusExtended.isLastFrb) {\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        this._unColectedWinDelay.stop();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            FreeRoundBonusExtended.disableUi();\n            this.disable();\n            return;\n        }\n\n        if (DataManager.Autoplay) {\n            if (DataManager.AutoplayCount === 0 + \"\") {\n                DataManager.Autoplay = false;\n            }\n        }\n\n        if (GameManager.baseResponse.totalWin === 0) {\n            this._wasCalclulated = true;\n            DataManager.Collectable = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        ModuleManager.enableGamble();\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        if (GameManager.baseResponse.totalWin > 0) {\n            this._afterWinDelay.start(30);\n        } else {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonusExtended.isLastFrb) {\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (\n                !DataManager.GameRoundClosed &&\n                GameManager.baseResponse.totalWin > 0 &&\n                GameManager.baseResponse.currentWin === 0\n            ) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\n        if (FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                GameManager.canExit();\n            }\n        }\n    }\n\n    winCalculationFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n        }\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (\n            DataManager.GameRoundClosed &&\n            !(FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\")\n        ) {\n            DataManager.updateDataElements();\n        }\n        ModuleManager.enableGamble();\n        DataManager.Collectable = true;\n        this.prepareNewGameRound();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (!ModuleManager.gambleEnabled()) {\n                FreeRoundBonusExtended.enableUi();\n            }\n            if (FreeRoundBonusExtended.isLastFrb) {\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n    }\n\n    allWinsFinished(): void {\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            return;\n        }\n\n        this._afterWinDelay.stop();\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\n            this.autoplay();\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonusExtended.isLastFrb) {\n                this._controller.resetWinAnimator();\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            return;\n        }\n\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusExtended.endFreeRounds();\n                ModuleManager.disableBase();\n            }\n            return;\n        }\n    }\n\n    intro(long: boolean = false): void {\n        this._wasCalclulated = true;\n\n        //if(long) {\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n        //}\n\n        this.longIntro = long;\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n\n            DataManager.Collectable = true;\n        }\n\n        this._controller.intro(long);\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        let timer: number = 2500;\n        if (!long) {\n            timer = 16;\n        }\n\n        setTimeout(() => {\n            if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.remove(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n            }\n        }, timer);\n    }\n\n    introFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded();\n        }\n        if (!ResponsibleDialog1.opened) {\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\n        }\n\n        ModuleManager.enableGamble();\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n\n        if (\n            this.longIntro &&\n            DataManager.GameRoundClosed &&\n            (FreeRoundBonusExtended.id != null || FreeRoundBonusExtended.otherOfferes.length > 0)\n        ) {\n            FreeRoundBonusExtended.enableUi();\n            this.longIntro = false;\n        }\n\n        if (FreeRoundBonusExtended.isLastFrb && DataManager.GameRoundClosed) {\n            FreeRoundBonusExtended.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonusExtended.isLastFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                ModuleManager.collect(GameModules.Base);\n            }\n        }\n    }\n\n    outro(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n            }\n        }\n\n        this._afterWinDelay.stop();\n        this._autoplayDelay.stop();\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\n        DataManager.Autoplay = false;\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (ModuleManager.freespinsActive()) {\n            DataManager.AutoplayAfterGamble = false;\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        }\n\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null) {\n                this._userControls.style.display = \"none\";\n            }\n\n            if (this._userControls_supreme != null) {\n                this._userControls_supreme.style.display = \"none\";\n            }\n\n            ModuleManager.introModule(GameModules.Freespins);\n        } else {\n            ModuleManager.introModule(GameModules.Gamble);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (this.prepareJackpotMiniGame()) {\n            return;\n        }\n\n        if (ResponsibleDialog1.opened) {\n            return;\n        }\n\n        BetHigherThanMinDialog.openDialog();\n        Paytable.openAtStart(true);\n\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\n            return;\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [BaseActions.ActionAutoplay]:\n                        (DataManager.GameRoundClosed ||\n                            (FreeRoundBonusExtended.inFrb &&\n                                FreeRoundBonusExtended.winPayMethod === \"cumulative\" &&\n                                !FreeRoundBonusExtended.isLastFrb)) &&\n                        AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [BaseActions.ActionAutoplayStop]: false,\n                    [BaseActions.ActionBaseCollect]:\n                        FreeRoundBonusExtended.inFrb && FreeRoundBonusExtended.winPayMethod === \"cumulative\"\n                            ? false\n                            : !DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetCycle]: !ModuleManager.gambleEnabled(),\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                    [BaseActions.ActionSpin]: !FreeRoundBonusExtended.isLastFrb,\n                    [BaseActions.ActionSpinStop]: false,\n                });\n                if (this._betSettings != null) {\n                    if (!ModuleManager.gambleEnabled()) {\n                        if (this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.remove(HtmlController.DisabledClass);\n                        }\n                    } else {\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n\n                    if (FreeRoundBonusExtended.inFrb) {\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n                }\n\n                if (DataManager.GameRoundClosed) {\n                    Platforms.Platforms.roundInit();\n                }\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private prepareJackpotMiniGame(): boolean {\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonusExtended.inFrb) {\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\n                DataManager.Autoplay = false;\n                this.resetWinAnimator();\n                this.disable();\n                FreeRoundBonusExtended.disableUi();\n                Jackpot.startMiniGame();\n\n                return true;\n            } else {\n                const self = this;\n\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\n                if (this._wasCalclulated) {\n                    Jackpot.initMiniGame(true, () => {\n                        self.resetWinAnimator();\n                        self.disable();\n                        DataManager.Autoplay = false;\n                        FreeRoundBonusExtended.disableUi();\n                    });\n                }\n\n                //in case we have nogamble and pb within or after gr, check limit\n                if (DataManager.GameLimit) {\n                    DataManager.Autoplay = false;\n                    this.limit();\n                }\n\n                if (Jackpot.waitForMiniGameInitialization()) {\n                    //in case we have limit, disable all actions during animation and wait for minigame\n                    this.actions.disableAllActions();\n                    HtmlController.updateActionElements(this.getAllActions());\n                    if (\n                        this._betSettings != null &&\n                        !this._betSettings.classList.contains(HtmlController.DisabledClass)\n                    ) {\n                        this._betSettings.classList.add(HtmlController.DisabledClass);\n                    }\n\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private checkJackpotMiniGame(): boolean {\n        if (!Jackpot.hasMiniGame() || FreeRoundBonusExtended.inFrb) {\n            return false;\n        }\n\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox();\n                this._wasCalclulated = true;\n\n                if (!DataManager.GameRoundClosed) {\n                    this.collect(); //collect will call prepareNewGameRound\n                } else {\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\n                    this.playCollectSound();\n                    DataManager.updateDataElements();\n                    this.prepareNewGameRound();\n                }\n            } else {\n                this.prepareNewGameRound();\n            }\n\n            return true;\n        } else {\n            Jackpot.initMiniGame(false, null);\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\n\n            return false;\n        }\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        if (DataManager.GameRoundClosed) {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: AppContext.gameConfiguration.AutoplayModeEnabled,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: false,\n                [BaseActions.ActionBetCycle]: true,\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                [BaseActions.ActionSpin]: true,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            if (this._betSettings != null && this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                this._betSettings.classList.remove(HtmlController.DisabledClass);\n            }\n        } else {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: false,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: true,\n                [BaseActions.ActionBetCycle]: false,\n                [BaseActions.ActionBetPlus]: false,\n                [BaseActions.ActionBetMinus]: false,\n                [BaseActions.ActionSpin]: false,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                this._betSettings.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    disable(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        FreeRoundBonusIcon.disableActiveIcon();\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (!ModuleManager.freespinsEnabled()) {\n            this._controller.disableBase();\n        }\n\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    resetWinAnimator(): void {\n        this._controller.resetWinAnimator();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { FreeRoundBonusExtended } from \"../Common/Bonuses/FreeRoundBonusExtended\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\n\nvar GameModules = Communication.Game.GameModules;\nvar WinType = Communication.Game.WinType;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopFreespinsUserControls extends UserControls {\n    protected _controller: FreespinsController;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _retriggerDelay: FrameTimerEventEmitter;\n\n    private _wasCalclulated: boolean = true;\n\n    private _featureAutoEndTimer: FrameTimerEventEmitter;\n    private _featureAutoEnded: boolean = false;\n    private _featureAutoPlayTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super(\"freespins\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._retriggerDelay = CreateFrameTimer(\"retriggerDelay\");\n        this._retriggerDelay.on(FrameTimerEvents.Complete, this.retriggerDelayed.bind(this));\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n\n        this._featureAutoEndTimer = CreateFrameTimer(\"featureAutoEndTimer\");\n        this._featureAutoEndTimer.on(FrameTimerEvents.Complete, this.featureAutoEndDelayed.bind(this));\n\n        this._featureAutoPlayTimer = CreateFrameTimer(\"featureAutoPlayTimer\");\n        this._featureAutoPlayTimer.on(FrameTimerEvents.Complete, this.featureAutoPlayDelayed.bind(this));\n    }\n\n    addController(controller: FreespinsController): void {\n        this._controller = controller;\n        this._controller.on(FreespinsController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(FreespinsController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(FreespinsController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(FreespinsController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(FreespinsController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(FreespinsController.OutroFinished, this.outroFinished.bind(this));\n\n        this._controller.on(FreespinsController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n    }\n\n    spinReceived(): void {\n        if (DataManager.quickspinEnabled()) {\n            // auto quick stop\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                FreespinsActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n    }\n\n    endReceived(): void {\n        ModuleManager.outroModule(GameModules.Freespins);\n    }\n\n    dispatchAction(action: string): void {\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(FreespinsActions.ActionStart)) {\n                action = FreespinsActions.ActionStart;\n            } else if (this.actions.getActionState(FreespinsActions.ActionBack)) {\n                action = FreespinsActions.ActionBack;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpin)) {\n                action = FreespinsActions.ActionSpin;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpinStop)) {\n                action = FreespinsActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case FreespinsActions.ActionStart:\n                    this.start();\n                    break;\n                case FreespinsActions.ActionBack:\n                    this.back();\n                    break;\n                case FreespinsActions.ActionSpin:\n                    this.spin();\n                    break;\n                case FreespinsActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case FreespinsActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case FreespinsActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n            }\n        }\n    }\n\n    start(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start();\n    }\n\n    spin(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n            }\n        }\n\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            (GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString(),\n        );\n\n        this.actions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(\n                FreespinsActions.ActionAutoplayStop,\n                AppContext.gameConfiguration.AutoplayModeEnabled,\n            );\n        }\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.spin();\n\n        Platforms.Platforms.spinStarted();\n    }\n\n    back(): void {\n        this._featureAutoEndTimer.stop();\n        this._featureAutoPlayTimer.stop();\n\n        if (!this._featureAutoEnded) {\n            ModuleManager.setAutoplayAfterFeature(false);\n        }\n\n        this.disable();\n        ModuleManager.endFreespins();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    end(): void {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.totalWin, true);\n        }\n\n        this._controller.end();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n            this.startFeatureAutoPlay();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionAutoplayStop, false);\n    }\n\n    beforeMachineStopped(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            this.autoplayStop();\n        }\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionSpinStop, false);\n    }\n\n    machineStopped(): void {\n        Platforms.Platforms.spinEnded();\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this._wasCalclulated = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        if (this.retrigger()) {\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElement(FreespinsActions.ActionSpinStop, false);\n            return;\n        }\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            if (GameManager.freespinsResponse.currentWin === 0) {\n                if (GameManager.freespinsResponse.totalWin != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataFreeSpinTotalWin,\n                        GameManager.freespinsResponse.totalWin.toString(),\n                    );\n                }\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n                this.actions.changeActionState(FreespinsActions.ActionBack, true);\n\n                this.startFeatureAutoEnd();\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n\n        if (GameManager.freespinsResponse.currentWin > 0) {\n            this._afterWinDelay.start(30);\n        } else {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            if (DataManager.Autoplay) {\n                this._autoplayDelay.start(15);\n            } else {\n                this.startFeatureAutoPlay();\n            }\n        }\n    }\n\n    showExpandWilds(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    winCalculationFinished(): void {\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this.retrigger()) {\n            return;\n        }\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    allWinsFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (this.retrigger(true)) {\n            this._retriggerDelay.start(60);\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n\n            this.startFeatureAutoEnd();\n\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.startFeatureAutoPlay();\n        }\n    }\n\n    retriggerDelayed(): void {\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this._autoplayDelay.start(30);\n        }\n    }\n\n    initIntro(): void {\n        FreeRoundBonusExtended.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"freespins\")) {\n            this._userControls_supreme.classList.add(\"freespins\");\n        }\n\n        this.retrigger(true);\n\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Freespins });\n\n        if (this.isLastFreespin()) {\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n\n            this.startFeatureAutoEnd();\n            return;\n        }\n\n        this.prepareNewGameRound();\n\n        this.startFeatureAutoPlay();\n    }\n\n    intro(long: boolean = false): void {\n        FreeRoundBonusExtended.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n\n        this._controller.intro(long);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        setTimeout(() => {\n            if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.remove(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n            }\n        }, 800);\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n        this.startFeatureAutoPlay();\n    }\n\n    outro(): void {\n        DataManager.Autoplay = false;\n        this._featureAutoEnded = false;\n\n        this._controller.outro();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    outroFinished(): void {\n        ModuleManager.introModule(GameModules.Base, true);\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"freespins\")) {\n            this._userControls_supreme.classList.remove(\"freespins\");\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [FreespinsActions.ActionStart]: false,\n                    [FreespinsActions.ActionBack]: false,\n                    [FreespinsActions.ActionAutoplay]:\n                        !DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [FreespinsActions.ActionAutoplayStop]:\n                        DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [FreespinsActions.ActionSpin]: true,\n                    [FreespinsActions.ActionSpinStop]: false,\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    enable(): void {\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n        this._controller.enable();\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private retrigger(updateCount: boolean = false): boolean {\n        let wasRetrigger: boolean = false;\n\n        if (GameManager.freespinsResponse.wins != null && GameManager.freespinsResponse.wins.length > 0) {\n            for (let i: number = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\n                    if (updateCount) {\n                        DataManager.updateDataElement(\n                            GameData.DataFreeSpinsRemainingCount,\n                            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n                        );\n                    }\n                    let count: number = GameManager.freespinsResponse.wins[i].customData[\"count\"];\n                    if (count != null) {\n                        DataManager.updateDataElement(GameData.DataFreeSpinsCount, count.toString());\n                        DataManager.updateDataElement(GameData.DataFreeSpinsWonCount, count.toString());\n                    }\n                    wasRetrigger = true;\n                }\n            }\n        }\n\n        return wasRetrigger && !this.isLastFreespin();\n    }\n\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            this.limit();\n            return true;\n        }\n\n        return (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        );\n    }\n\n    /**\n     * Dispatch action Back by timer.\n     */\n    private featureAutoEndDelayed(): void {\n        this._featureAutoEndTimer.stop();\n        this._featureAutoEnded = true;\n        this.dispatchAction(FreespinsActions.ActionBack);\n\n        if (DEBUG) {\n            this.log(\"INFO featureAutoEndDelayed ActionBack\");\n        }\n    }\n\n    /**\n     * Dispatch action Autoplay by timer.\n     */\n    private featureAutoPlayDelayed(): void {\n        this._featureAutoPlayTimer.stop();\n        this.dispatchAction(FreespinsActions.ActionAutoplay);\n\n        if (DEBUG) {\n            this.log(\"INFO featureAutoPlayDelayed ActionAutoplay\");\n        }\n    }\n\n    /**\n     * Auto end feature.\n     * Duration is set to preDuration + duration from configuration.\n     * @param {number} preDuration\n     */\n    protected startFeatureAutoEnd(preDuration: number = 0): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoEndTimer.start(preDuration + AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n\n    /**\n     * Auto start autoplay in feature.\n     * Duration is set from configuration.\n     */\n    protected startFeatureAutoPlay(): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoPlayTimer.start(AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopFreespinsUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Controller } from \"../Controller\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { FreespinsView } from \"./FreespinsView\";\nimport { FreespinsModel } from \"./FreespinsModel\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class FreespinsController extends Controller {\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\n    public static readonly EndReceived: string = \"eventEndReceived\";\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n\n    public static readonly BeforeMachineStopped: string = \"eventBeforeMachineStopped\";\n\n    protected _view: FreespinsView;\n    protected _model: FreespinsModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof FreespinsView) {\n            this._view = view;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR view is not instance of BaseView\");\n            }\n        }\n\n        this._model = new FreespinsModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    disableLogo(): void {\n        this._view.disableLogo();\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    start(): void {\n        this._model.start();\n    }\n\n    spin(): void {\n        this._model.spin();\n        this._view.spin();\n    }\n\n    end(): void {\n        this._model.end();\n    }\n\n    stop(): void {\n        this._view.stop();\n    }\n\n    startReceived(): void {\n        this._view.startReceived();\n        this.emit(FreespinsController.StartReceived);\n    }\n\n    spinReceived(): void {\n        this._view.spinReceived();\n        this.emit(FreespinsController.SpinReceived);\n    }\n\n    endReceived(): void {\n        this._view.endReceived();\n        this.emit(FreespinsController.EndReceived);\n    }\n\n    beforeMachineStopped(): void {\n        this.emit(FreespinsController.BeforeMachineStopped);\n    }\n\n    machineStopped(): void {\n        this.emit(FreespinsController.MachineStopped);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(FreespinsController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(FreespinsController.AllWinsFinished);\n    }\n\n    intro(long: boolean = false): void {\n        this._view.intro(long);\n    }\n\n    introFinished(): void {\n        this.emit(FreespinsController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(FreespinsController.OutroFinished);\n    }\n\n    enable(): void {\n        this._view.enable();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsController.ts\n **/","export class FreespinsActions {\n    static ActionStart: string = \"FREESPIN_START\";\n    static ActionBack: string = \"FREESPIN_BACK_TO_GAME\";\n    static ActionSpin: string = \"FREESPIN_SPIN\";\n    static ActionSpinStop: string = \"FREESPIN_SPIN_STOP\";\n    static ActionAutoplay: string = \"FREESPIN_AUTOPLAY\";\n    static ActionAutoplayStop: string = \"FREESPIN_AUTOPLAY_STOP\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/FreespinsActions.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { FreeRoundBonusExtended } from \"../Common/Bonuses/FreeRoundBonusExtended\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\n\nvar GameModules = Communication.Game.GameModules;\nvar WinType = Communication.Game.WinType;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobileFreespinsUserControls extends UserControls {\n    protected _controller: FreespinsController;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _retriggerDelay: FrameTimerEventEmitter;\n\n    private _wasCalclulated: boolean = true;\n\n    constructor() {\n        super(\"freespins\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._retriggerDelay = CreateFrameTimer(\"retriggerDelay\");\n        this._retriggerDelay.on(FrameTimerEvents.Complete, this.retriggerDelayed.bind(this));\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n    }\n\n    addController(controller: FreespinsController): void {\n        this._controller = controller;\n        this._controller.on(FreespinsController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(FreespinsController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(FreespinsController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(FreespinsController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(FreespinsController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(FreespinsController.OutroFinished, this.outroFinished.bind(this));\n\n        this._controller.on(FreespinsController.BeforeMachineStopped, this.beforeMachineStopped.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n    }\n\n    spinReceived(): void {\n        if (DataManager.quickspinEnabled()) {\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                FreespinsActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n    }\n\n    endReceived(): void {\n        ModuleManager.outroModule(GameModules.Freespins);\n    }\n\n    dispatchAction(action: string): void {\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case FreespinsActions.ActionStart:\n                    this.start();\n                    break;\n                case FreespinsActions.ActionBack:\n                    this.back();\n                    break;\n                case FreespinsActions.ActionSpin:\n                    this.spin();\n                    break;\n                case FreespinsActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case FreespinsActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case FreespinsActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n            }\n        }\n    }\n\n    start(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start();\n    }\n\n    spin(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n            }\n        }\n\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            (GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString(),\n        );\n\n        this.actions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(\n                FreespinsActions.ActionAutoplayStop,\n                AppContext.gameConfiguration.AutoplayModeEnabled,\n            );\n        }\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.spin();\n\n        Platforms.Platforms.spinStarted();\n    }\n\n    back(): void {\n        this.disable();\n        ModuleManager.endFreespins();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    end(): void {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.totalWin, true);\n        }\n\n        this._controller.end();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionAutoplayStop, false);\n    }\n\n    beforeMachineStopped(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            this.autoplayStop();\n        }\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionSpinStop, false);\n    }\n\n    machineStopped(): void {\n        Platforms.Platforms.spinEnded();\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this._wasCalclulated = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        if (this.retrigger()) {\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElement(FreespinsActions.ActionSpinStop, false);\n            return;\n        }\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            if (GameManager.freespinsResponse.currentWin === 0) {\n                if (GameManager.freespinsResponse.totalWin != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataFreeSpinTotalWin,\n                        GameManager.freespinsResponse.totalWin.toString(),\n                    );\n                }\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n                this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n\n        if (GameManager.freespinsResponse.currentWin > 0) {\n            this._afterWinDelay.start(30);\n        } else {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.freespinsResponse.currentWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n    }\n\n    showExpandWilds(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    winCalculationFinished(): void {\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this.retrigger()) {\n            return;\n        }\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    allWinsFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (this.retrigger(true)) {\n            this._retriggerDelay.start(60);\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n    }\n\n    retriggerDelayed(): void {\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n    }\n\n    initIntro(): void {\n        FreeRoundBonusExtended.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"freespins\")) {\n            this._userControls_supreme.classList.add(\"freespins\");\n        }\n\n        this.retrigger(true);\n\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Freespins });\n\n        if (this.isLastFreespin()) {\n            this.actions.disableAllActions();\n            this.actions.changeActionState(FreespinsActions.ActionBack, true);\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    intro(long: boolean = false): void {\n        FreeRoundBonusExtended.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n\n        this._controller.intro(long);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        setTimeout(() => {\n            if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.remove(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n            }\n        }, 2500);\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    outro(): void {\n        DataManager.Autoplay = false;\n\n        this._controller.outro();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    outroFinished(): void {\n        ModuleManager.introModule(GameModules.Base, true);\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"freespins\")) {\n            this._userControls_supreme.classList.remove(\"freespins\");\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [FreespinsActions.ActionStart]: false,\n                    [FreespinsActions.ActionBack]: false,\n                    [FreespinsActions.ActionAutoplay]:\n                        !DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [FreespinsActions.ActionAutoplayStop]:\n                        DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\n                    [FreespinsActions.ActionSpin]: true,\n                    [FreespinsActions.ActionSpinStop]: false,\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    enable(): void {\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n        this._controller.enable();\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private retrigger(updateCount: boolean = false): boolean {\n        let wasRetrigger: boolean = false;\n\n        if (GameManager.freespinsResponse.wins != null && GameManager.freespinsResponse.wins.length > 0) {\n            for (let i: number = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].type === WinType.freeSpins) {\n                    if (updateCount) {\n                        DataManager.updateDataElement(\n                            GameData.DataFreeSpinsRemainingCount,\n                            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n                        );\n                    }\n                    let count: number = GameManager.freespinsResponse.wins[i].customData[\"count\"];\n                    if (count != null) {\n                        DataManager.updateDataElement(GameData.DataFreeSpinsCount, count.toString());\n                        DataManager.updateDataElement(GameData.DataFreeSpinsWonCount, count.toString());\n                    }\n                    wasRetrigger = true;\n                }\n            }\n        }\n\n        return wasRetrigger && !this.isLastFreespin();\n    }\n\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            this.limit();\n            return true;\n        }\n\n        return (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        );\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileFreespinsUserControls.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ActionSet } from \"../ActionSet\";\nimport { ComponentTypes } from \"../ComponentTypes\";\n\n/**\n * The ActionManager class is used for parsing elements which are extending display objects and render them to canvas.\n * @class ActionManager\n * @author Marek Turkovic\n *\n *  <Actions123 Class=\"ActionSet\">\n *      <Elements>\n *          <Hocico LinkedToId=\"123\" Class=\"LinkedElement\"/>\n *      </Elements>\n *      <Actions>\n *          <Action Case=\"PackOfActions1\">\n *              <Hocico RotationTween=\"50\" />\n *          </Action>\n *          <Action Case=\"PackOfActions2\">\n *              <Hocico Scale=\"0.5\" Tint=\"ff0000\" Rotation=\"45\"/>\n *          </Action>\n *      </Actions>\n *  </Actions123>\n */\nexport class ActionManager {\n    /**\n     * Parse ActionSet object elements from xml and add them to ActionSet.ActionSets object.\n     *\n     * @method parseActionSets\n     * @param startNode\n     * @return void\n     */\n    static parseActionSets(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        ActionManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    node.getAttribute(\"Class\") === \"ActionSet\" &&\n                    EngineComponentFactory.isTypeOf(\"ActionSet\", ComponentTypes.ActionSet),\n            )\n            .forEach((node: Element) => (EngineComponentFactory.get(\"ActionSet\") as ActionSet).RegisterActionSet(node));\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ActionManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ActionManager\", data);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ActionManager.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { ClientHost, GameEngine, Communication } from \"neo-games\";\n\nimport { Dialog, DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { BalanceManager } from \"../Managers/BalanceManager\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { Languages } from \"../Utils/Languages\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { SplashScreen } from \"../CustomComponents/SplashScreen\";\n\ntype IBalance = Communication.Game.IBalance;\n\nexport class GameClientHostConsumer extends GameEngine.GameClientHostConsumerBase {\n    private _dialog: Dialog;\n\n    constructor(app: GameEngine.IApp) {\n        super(app);\n    }\n\n    private get dialog(): Dialog {\n        if (Utils.isNullOrUndefined(this._dialog)) {\n            this._dialog = new Dialog(this._app);\n        }\n\n        return this._dialog;\n    }\n\n    /**\n     * Handle dispatched action from client host\n     * @param actionGroup - group name where action belongs to\n     * @param action - name of action to handle\n     */\n    handleAction(actionGroup: string, action: string): void {\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        if (actionGroup === ClientHost.Types.ClientHostActionGroup.Default.toString()) {\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"GameClientHostConsumer\",\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchAction() ...`,\n                );\n            }\n\n            DataManager.addTrustedUserAction(action);\n            ModuleManager.dispatchAction(action);\n        } else if (actionGroup === ClientHost.Types.ClientHostActionGroup.Terminal.toString()) {\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"GameClientHostConsumer\",\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchTerminalAction() ...`,\n                );\n            }\n\n            DataManager.addTrustedUserAction(action);\n            ModuleManager.dispatchAction(action);\n        }\n    }\n\n    /**\n     * handle request to show dialog with message (optionally error)\n     * @param request - show dialog request data\n     */\n    handleShowDialog(request: ClientHost.Types.ClientHostDialogRequest): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside handleShowDialog(), request: `, request);\n        }\n\n        if (request.type === ClientHost.Types.ClientHostDialogType.Responsible1) {\n            this.showResponsibleDialog1(request.data as ClientHost.Types.ClientHostResponsibleDialogData);\n        } else {\n            let dialogData = Utils.isNullOrUndefined(request.data) ? null : (request.data as DialogOpenData);\n            let special = false;\n            let gameRoundId = \"0\";\n            let errorId = \"\";\n            if (!Utils.isNullOrUndefined(dialogData)) {\n                special = dialogData.special;\n                gameRoundId = dialogData.gameRoundId;\n                errorId = dialogData.errorId;\n            }\n            let isError = request.type === ClientHost.Types.ClientHostDialogType.Error;\n            let code = request.error ? request.error.errorCode : \"\";\n\n            SplashScreen.hideSplashScreen();\n            this.dialog.openDialog(request.text, code, errorId, isError, special, gameRoundId, request);\n        }\n    }\n\n    /**\n     * handle request to show dialog with message\n     */\n    handleShowEndGameDialog(): void {\n        //dialog without buttons\n        let customData = {\n            data: {\n                actions: [null] as Array<Object>,\n            },\n        };\n\n        this.dialog.openDialog(Languages.getRid(\"DLG_ENDGAME\"), \"\", \"\", false, true, \"\", customData);\n        PIXI.sound.removeAll();\n\n        //remove game and keep only dialog\n        let dialog = document.getElementById(\"dialog\");\n        let root = document.getElementById(\"root\");\n        if (root != null && dialog != null) {\n            root.innerHTML = dialog.outerHTML;\n            document.body.innerHTML = \"\";\n            document.body.appendChild(root);\n        }\n    }\n\n    /**\n     * handle request to close currently visible dialog (if any)\n     */\n    handleCloseDialog(): void {\n        this.dialog.closeDialog();\n    }\n\n    /**\n     * @method handleRefreshAccount - handle 'refresh account' request from client host\n     */\n    handleRefreshAccount(): void {\n        BalanceManager.refreshBalance();\n    }\n\n    /**\n     * @method handleError - handle error from client host.\n     * @param error - error message\n     * @param data - structure with information about error\n     */\n    handleError(error: string, data?: any): void {\n        this.dialog.openDialog(error, null, \"\", true);\n    }\n\n    handleBlockRequest(blocked: boolean): void {\n        if (blocked) {\n            if (DataManager.Autoplay) {\n                DataManager.gameState(\"AutoPlayEnded\");\n            }\n            DataManager.Autoplay = false;\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n        }\n    }\n\n    /**\n     * @method handlePaytableAction - handle paytable action (load, show, ...)\n     * @param request - request to do with paytable\n     */\n    handlePaytableRequest(request: ClientHost.Types.ClientHostPaytableRequest): void {}\n\n    handleAccountUpdate(balance: IBalance, forceShow: boolean): void {\n        if (forceShow) {\n            BetManager.unHideValues(true);\n        }\n\n        BalanceManager.balanceReceived(balance);\n    }\n\n    handleAutoplayAction(action: ClientHost.Types.AutoplayAction): void {\n        switch (action) {\n            case ClientHost.Types.AutoplayAction.Stop: {\n                if (DataManager.Autoplay) {\n                    DataManager.gameState(\"AutoPlayEnded\");\n                }\n                DataManager.Autoplay = false;\n                DataManager.AutoplayCount = \"∞\";\n                DataManager.AutoplayLossLimit = \"∞\";\n                DataManager.AutoplayWinLimit = \"∞\";\n                break;\n            }\n            case ClientHost.Types.AutoplayAction.Enable: {\n                DataManager.AutoplayEnabled = true;\n                break;\n            }\n            case ClientHost.Types.AutoplayAction.Disable: {\n                if (DataManager.Autoplay) {\n                    DataManager.gameState(\"AutoPlayEnded\");\n                }\n                DataManager.Autoplay = false;\n                DataManager.AutoplayCount = \"∞\";\n                DataManager.AutoplayLossLimit = \"∞\";\n                DataManager.AutoplayWinLimit = \"∞\";\n                DataManager.AutoplayEnabled = false;\n                break;\n            }\n            default: {\n                if (DEBUG) {\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown autoplay action '${action}'`);\n                }\n                break;\n            }\n        }\n    }\n\n    handleGameplayAction(action: ClientHost.Types.GamePlayAction): void {\n        switch (action) {\n            case ClientHost.Types.GamePlayAction.Enable: {\n                GameManager.enablePlay();\n                break;\n            }\n            case ClientHost.Types.GamePlayAction.Disable: {\n                GameManager.disablePlay();\n                break;\n            }\n            default: {\n                if (DEBUG) {\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown gameplay action '${action}'`);\n                }\n                break;\n            }\n        }\n    }\n\n    terminateOnCollect(): boolean {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside terminateOnCollect()`);\n        }\n\n        return GameManager.canExit(true);\n    }\n\n    private showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData) {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `showResponsibleDialog1(), data: `, data);\n        }\n\n        GameManager.showResponsibleDialog1(data);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/ClientHost/ClientHostConsumer.ts\n **/","import { GameEngine } from \"neo-games\";\n\nexport class GameDefinition extends GameEngine.GameDefinitionBase {\n    /**\n     * @property ClientHostType - type name for client host, eg.(Default, Desktop ...)\n     */\n    public get Gamble(): boolean {\n        return this.getValue(\"Gamble\", true);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameDefinition.ts\n **/","import { GameEngine } from \"neo-games\";\nimport { GameManager } from \"../Game/Managers/GameManager\";\n\nconst key_GameEnableReelsStop = \"GameEnableReelsStop\";\nconst key_GameEnableQuickSpin = \"GameEnableQuickSpin\";\nconst key_QuickSpinDialogCount = \"QuickSpinDialogCount\";\nconst key_QuickSpinDecayDelay = \"QuickSpinDecayDelay\";\nconst key_MinGameRoundDuration = \"MinGameRoundDuration\";\nconst key_GameRoundMinSpan = \"GameRoundMinSpan\";\nconst key_FRBGameRoundMinSpan = \"FRBGameRoundMinSpan\";\nconst key_UIShowTime = \"UIShowTime\";\nconst key_GUIShowSessionTime = \"GUI_ShowSessionTime\";\nconst key_GUIShowSessionTimeStartValue = \"GUI_ShowSessionTimeStartValue\";\nconst key_UseServerTime = \"UseServerTime\";\nconst key_UseHtmlAudio = \"UseHtmlAudio\";\nconst key_FullscreenOnClick = \"FullscreenOnClick\";\nconst key_UseCoins = \"UseCoins\";\nconst key_AutoplayGambleEnabled = \"AutoplayGambleEnabled\";\nconst key_AutoplayMode = \"AutoplayMode\";\nconst key_AutoplayCounts = \"AutoplayCounts\";\nconst key_AutoplayLossLimit = \"AutoplayLossLimit\";\nconst key_AutoplaySingleWinLimit = \"AutoplaySingleWinLimit\";\nconst key_HelpShowGameLimit = \"HelpShowGameLimit\";\nconst key_HelpShowRTP = \"HelpShowRTP\";\nconst key_ShowGameRoundsHistory = \"ShowGameRoundsHistory\";\nconst key_ExpirationResolveHours = \"ExpirationResolveHours\";\nconst key_AutoplayModeSpeed = \"AutoplayModeSpeed\";\nconst key_HideAmountsEnabled = \"HideAmountsEnabled\";\nconst key_AutoplayModeEnabled = \"AutoplayModeEnabled\";\nconst key_ResetCoinCountOnDenomChange = \"ResetCoinCountOnDenomChange\";\nconst key_CollectOnUnCalculatedWin = \"CollectOnUnCalculatedWin\";\nconst key_PluginUrl = \"PluginUrl\";\nconst key_PluginOrigin = \"PluginOrigin\";\nconst key_Platform = \"Platform\";\nconst key_PollCredit = \"PollCredit\";\nconst key_ShowDecimalPlaces = \"ShowDecimalPlaces\";\nconst key_SelectorRolloutDuration = \"SelectorRolloutDuration\";\nconst key_DisplayCurrencies = \"DisplayCurrencies\";\nconst key_CanvasFallback = \"CanvasFallback\";\nconst key_GameRoundIdVisible = \"GameRoundIdVisible\";\nconst key_MuteOnLostFocus = \"MuteOnLostFocus\";\nconst key_ShowCashierMessage = \"ShowCashierMessage\";\nconst key_CashierMessageShowRefreshBalanceButton = \"CashierMessageShowRefreshBalanceButton\";\nconst key_CashierUrl = \"CashierUrl\";\nconst key_DisableUntrustedClicks = \"DisableUntrustedClicks\";\nconst key_PlayerSessionReconnectionInterval = \"PlayerSessionReconnectionInterval\";\nconst key_ApplicationGatewayUrl = \"ApplicationGatewayUrl\";\nconst key_EventTrackerEnabled = \"EventTrackerEnabled\";\nconst key_GameEnableVibration = \"GameEnableVibration\";\nconst key_SplashScreen = \"SplashScreen\";\nconst key_PaytableUseValue = \"PaytableUseValue\";\n\nconst key_GUI_HistoryUrl = \"GUI_HistoryUrl\";\nconst key_RCI_HistoryUrl = \"RCI_HistoryUrl\";\nconst key_RCI_Info = \"RCI_Info\";\nconst key_RCI_IntervalInfo = \"RCI_IntervalInfo\";\nconst key_RCI_ShowHistoryButton = \"RCI_ShowHistoryButton\";\n\nconst key_FeatureAutoPlay = \"FeatureAutoPlay\";\nconst key_FeatureAutoPick = \"FeatureAutoPick\";\n\nconst key_ShowSimilarGames = \"ShowSimilarGames\";\nconst key_SimilarGamesList = \"SimilarGamesList\";\nconst key_ShowExitGameButton = \"ShowExitGameButton\";\nconst key_StaticContentUrl = \"StaticContentUrl\";\nconst key_ShowHomeButton = \"ShowHomeButton\";\nconst key_UsePortraitMode = \"UsePortraitMode\";\nconst key_FRBShowDenyButton = \"FRBShowDenyButton\";\nconst key_FRBShowPostponeButton = \"FRBShowPostponeButton\";\nconst key_StatusBar = \"StatusBar\";\nconst key_StatusBarData = \"StatusBarData\";\n\nconst key_ProgressiveBonusId = \"ProgressiveBonusId\";\nconst key_ProgressiveBonusContributeOnlyQualified = \"ProgressiveBonusContributeOnlyQualified\";\nconst key_ProgressiveBonusMinQualifyingBet = \"ProgressiveBonusMinQualifyingBet\";\nconst key_ProgressiveBonusMaxQualifyingBet = \"ProgressiveBonusMaxQualifyingBet\";\nconst key_ProgressiveBonusVisibleMax = \"ProgressiveBonusVisibleMax\";\nconst key_ProgressiveBonusHelpShowMaxVisibleLimit = \"ProgressiveBonusHelpShowMaxVisibleLimit\";\nconst key_ProgressiveBonusHelpShowCumulativeWinLimit = \"ProgressiveBonusHelpShowCumulativeWinLimit\";\nconst key_ProgressiveBonusTicketConstraint = \"ProgressiveBonusTicketConstraint\";\nconst key_UseJackpotLocalization = \"UseJackpotLocalization\";\nconst key_ProgressiveBonusTheme = \"ProgressiveBonusTheme\";\n\nconst key_SessionBalance = \"SessionBalance\";\nconst key_TotalBet = \"TotalBet\";\nconst key_TotalWin = \"TotalWin\";\nconst key_PlayerTokenId = \"PlayerTokenId\";\nconst key_ClientToken = \"ClientToken\";\nconst key_MaxBetEnabled = \"MaxBetEnabled\";\nconst key_ShowMaxBetMessage = \"ShowMaxBetMessage\";\nconst key_HelpShowGameModuleVersion = \"HelpShowGameModuleVersion\";\nconst key_NotifyBetHigherThanMin = \"NotifyBetHigherThanMin\";\nconst key_ShowPaytableAtStart = \"ShowPaytableAtStart\";\nconst key_HelpShowMaxPayoutProbability = \"HelpShowMaxPayoutProbability\";\nconst key_HelpShowMaxPayoutProbabilityFrequency = \"HelpShowMaxPayoutProbabilityFrequency\";\n\nexport class GameConfiguration extends GameEngine.GameConfigurationBase {\n    /**\n     * @property GameEnableReelsStop - game enable reels stop.\n     */\n    public get GameEnableReelsStop(): boolean {\n        return this.getValue(key_GameEnableReelsStop, true);\n    }\n\n    /**\n     * @property GameEnableQuickSpin - game allows automatic quick stop.\n     */\n    public get GameEnableQuickSpin(): boolean {\n        return this.getValue(key_GameEnableQuickSpin, false);\n    }\n\n    /**\n     * @property QuickSpinDialogCount - number of subsequent quick stops before dialog is shown.\n     */\n    public get QuickSpinDialogCount(): number {\n        return this.getValue(key_QuickSpinDialogCount, 3);\n    }\n\n    public get QuickSpinDecayDelay(): number {\n        return this.getValue(key_QuickSpinDecayDelay, 30);\n    }\n\n    /**\n     * @property MinGameRoundDuration - number min round duration from start to stop reels\n     */\n    public get MinGameRoundDuration(): number {\n        return this.getValue(key_MinGameRoundDuration, 0);\n    }\n\n    /**\n     * @property GameRoundMinSpan - min game round duration in milliseconds\n     */\n    public get GameRoundMinSpan(): number {\n        return this.getValue(key_GameRoundMinSpan, 0);\n    }\n\n    /**\n     * @property FRBGameRoundMinSpan - min game round duration in frb in milliseconds\n     */\n    public get FRBGameRoundMinSpan(): number {\n        return this.getValue(key_FRBGameRoundMinSpan, 0);\n    }\n\n    /**\n     * @property UIShowTime\n     */\n    public get UIShowTime(): boolean {\n        return this.getValue(key_UIShowTime, false);\n    }\n\n    /**\n     * @property GUIShowSessionTime\n     */\n    public get GUIShowSessionTime(): boolean {\n        return this.getValue(key_GUIShowSessionTime, false);\n    }\n\n    /**\n     * @property GUIShowSessionTimeStartValue\n     */\n    public get GUIShowSessionTimeStartValue(): number {\n        return this.getValue(key_GUIShowSessionTimeStartValue, 0);\n    }\n\n    /**\n     * @property UseServerTime\n     */\n    public get UseServerTime(): boolean {\n        return this.getValue(key_UseServerTime, false);\n    }\n\n    /**\n     * @property UseHtmlAudio\n     */\n    public get UseHtmlAudio(): boolean {\n        return this.getValue(key_UseHtmlAudio, false);\n    }\n\n    /**\n     * @property FullscreenOnClick\n     */\n    public get FullscreenOnClick(): boolean {\n        return this.getValue(key_FullscreenOnClick, false);\n    }\n\n    /**\n     * @property UseCoins\n     */\n    public get UseCoins(): boolean {\n        return this.getValue(key_UseCoins, false);\n    }\n\n    /**\n     * @property AutoplayGambleEnabled - Enables/disables gamble feature during Autoplay\n     */\n    public get AutoplayGambleEnabled(): boolean {\n        return this.getValue(key_AutoplayGambleEnabled, true);\n    }\n\n    /**\n     * @property MaxBetEnabled Enables max bet button in game UI\n     */\n    public get MaxBetEnabled(): boolean {\n        return this.getValue(key_MaxBetEnabled, false);\n    }\n\n    /**\n     * @property ShowMaxBetMessage Enables max bet button confirmation dialog in game UI\n     */\n    public get ShowMaxBetMessage(): boolean {\n        return this.getValue(key_ShowMaxBetMessage, false);\n    }\n\n    /**\n     * @property AutoplayMode - Determines what autoplay features are available to the player:\n     * Basic = Basic autoplay is used\n     * Simple = simple autoplay is used\n     * Advanced = advanced autoplay is used\n     */\n    public get AutoplayMode(): string {\n        return this.getValue(key_AutoplayMode, \"simple\");\n    }\n\n    /**\n     * @property AutoplayCounts - shows selection of preset Autoplay games for simple and advanced autoplay; -1 = no limit/infinite option\n     */\n    public get AutoplayCounts(): Array<number> {\n        return this.getValue(key_AutoplayCounts, [-1, 1000, 750, 500, 250, 100, 75, 50, 25, 10]);\n    }\n\n    /**\n     * @property AutoplayLossLimit - List of values shown to player, where player can set his Loss limit, available only in advanced autoplay; -1 = no limit option\n     */\n    public get AutoplayLossLimit(): Array<number> {\n        return this.getValue(key_AutoplayLossLimit, [-1, 5, 20, 50]);\n    }\n\n    /**\n     * @property AutoplaySingleWinLimit - List of values shown to player, where player can set his singleWinLimit; -1 = no limit option\n     */\n    public get AutoplaySingleWinLimit(): Array<number> {\n        return this.getValue(key_AutoplaySingleWinLimit, [-1, 10, 20, 75]);\n    }\n\n    /**\n     * @property HelpShowGameLimit - Show game limit in help.\n     */\n    public get HelpShowGameLimit(): boolean {\n        return this.getValue(key_HelpShowGameLimit, true);\n    }\n\n    /**\n     * @property HelpShowRTP - Show rtp in help.\n     */\n    public get HelpShowRTP(): boolean {\n        return this.getValue(key_HelpShowRTP, true);\n    }\n\n    /**\n     * @property ShowGameRoundsHistory - show button which open new window to last 10 game rounds.\n     */\n    public get ShowGameRoundsHistory(): boolean {\n        return GameManager.gameResponse.roundId > -1 && this.getValue(key_ShowGameRoundsHistory, true);\n    }\n\n    /**\n     * @property ExpirationResolveHours - Automatic game resolve\n     */\n    public get ExpirationResolveHours(): number {\n        return this.getValue(key_ExpirationResolveHours, -1);\n    }\n\n    /**\n     * @property AutoplayModeSpeed - can speed up reel rotation in autoplay - !!!! for now only in Firebird\n     * standard = normal autoplay flow\n     * fast = if game has stop button enabled reel rotation will stop rotation after response will came from server\n     */\n    public get AutoplayModeSpeed(): string {\n        return this.getValue(key_AutoplayModeSpeed, \"standard\");\n    }\n\n    /**\n     * @property HideAmountsEnabled - show hide buttons for credit and bet - !!!! for now only in Firebird\n     */\n    public get HideAmountsEnabled(): boolean {\n        return this.getValue(key_HideAmountsEnabled, false);\n    }\n\n    /**\n     * @property AutoplayModeEnabled - enable or disable autoplay functionality - !!!! for now only in Firebird\n     */\n    public get AutoplayModeEnabled(): boolean {\n        return this.getValue(key_AutoplayModeEnabled, true);\n    }\n\n    /**\n     * @property ResetCoinCountOnDenomChange\n     * true => reset coin count to lowest value available after every denomination change\n     * false => coin count is not changed if in the new denomination is available, if its not available -> same or closest lower coin count is set\n     */\n    public get ResetCoinCountOnDenomChange(): boolean {\n        return this.getValue(key_ResetCoinCountOnDenomChange, true);\n    }\n\n    /**\n     * @property CollectOnUnCalculatedWin\n     * true => collect win on spin when player didnt see calculated win in win box\n     * false => standard flow\n     */\n    public get CollectOnUnCalculatedWin(): boolean {\n        return this.getValue(key_CollectOnUnCalculatedWin, false);\n    }\n\n    /**\n     * @property PluginUrl - if is not empty create hidden iframe for communication with platforms and showing reality check (for now only for CZ fortuna - iforium)\n     */\n    public get PluginUrl(): string {\n        return this.getValue(key_PluginUrl, \"\");\n    }\n\n    /**\n     * @property PluginUrl - if is not empty  and plugin URL creates hidden iframe this parameter will be applied for messaging between iframe and game\n     */\n    public get PluginOrigin(): string {\n        return this.getValue(key_PluginOrigin, \"\");\n    }\n\n    /**\n     * @property Platform - name of platform for external apis - for now we supported only iforium platform\n     */\n    public get Platform(): string {\n        return this.getValue(key_Platform, \"\");\n    }\n\n    /**\n     * @property PollCredit\n     * -1 => Not used\n     * > 0 => Number in miliseconds run timer to refresh balance when credit is lower than bet in closed gameround\n     */\n    public get PollCredit(): number {\n        return this.getValue(key_PollCredit, -1);\n    }\n\n    /**\n     * @property ShowDecimalPlaces - all wins and currency values are shown with selected decimal places (except RTP of course)\n     */\n    public get ShowDecimalPlaces(): number {\n        return this.getValue(key_ShowDecimalPlaces, 2);\n    }\n\n    /**\n     * @property SelectorRolloutDuration\n     * 0 => Disabled\n     * > 0 => Selector rollout duration in seconds.\n     */\n    public get SelectorRolloutDuration(): number {\n        return this.getValue(key_SelectorRolloutDuration, 5);\n    }\n\n    /**\n     * @property DisplayCurrencies\n     * @returns {string[]}\n     */\n    public get DisplayCurrencies(): string[] {\n        return this.getValue(key_DisplayCurrencies, []);\n    }\n\n    /**\n     * @property CanvasFallback\n     * @returns {boolean}\n     */\n    public get CanvasFallback(): boolean {\n        return this.getValue(key_CanvasFallback, false);\n    }\n\n    /**\n     * @property GameRoundIdVisible\n     * @returns {boolean}\n     */\n    public get GameRoundIdVisible(): boolean {\n        return this.getValue(key_GameRoundIdVisible, true);\n    }\n\n    /**\n     * @property MuteOnLostFocus\n     * @returns {boolean}\n     */\n    public get MuteOnLostFocus(): boolean {\n        return this.getValue(key_MuteOnLostFocus, true);\n    }\n\n    /**\n     * @property ShowCashierMessage\n     * @returns {boolean}\n     */\n    public get ShowCashierMessage(): boolean {\n        return this.getValue(key_ShowCashierMessage, false);\n    }\n\n    /**\n     * @property CashierMessageShowRefreshBalanceButton\n     * @returns {boolean}\n     */\n    public get CashierMessageShowRefreshBalanceButton(): boolean {\n        return this.getValue(key_CashierMessageShowRefreshBalanceButton, false);\n    }\n\n    /**\n     * @property CashierUrl\n     * @returns {string}\n     */\n    public get CashierUrl(): string {\n        return this.getValue(key_CashierUrl, \"\");\n    }\n\n    /**\n     * @property DisableUntrustedClicks\n     * @returns {string}\n     */\n    public get DisableUntrustedClicks(): boolean {\n        return this.getValue(key_DisableUntrustedClicks, true);\n    }\n\n    /**\n     * @property SplashScreen\n     * @returns {boolean}\n     */\n    public get SplashScreen(): boolean {\n        return this.getValue(key_SplashScreen, true);\n    }\n\n    /**\n     * @property GUIHistoryUrl\n     * @returns {string}\n     */\n    public get GUIHistoryUrl(): string {\n        return this.getValue(key_GUI_HistoryUrl, \"\");\n    }\n\n    /**\n     * @property RCIHistoryUrl\n     * @returns {string}\n     */\n    public get RCIHistoryUrl(): string {\n        return this.getValue(key_RCI_HistoryUrl, \"\");\n    }\n\n    /**\n     * @property RCIInfo\n     * @returns {boolean}\n     */\n    public get RCIInfo(): boolean {\n        return this.getValue(key_RCI_Info, false);\n    }\n\n    /**\n     * @property RCIIntervalInfo\n     * @returns {boolean}\n     */\n    public get RCIIntervalInfo(): boolean {\n        return this.getValue(key_RCI_IntervalInfo, true);\n    }\n\n    /**\n     * @property RCIShowHistoryButton\n     * @returns {boolean}\n     */\n    public get RCIShowHistoryButton(): boolean {\n        return this.getValue(key_RCI_ShowHistoryButton, false);\n    }\n\n    /**\n     *\n     * @returns {number}\n     * @constructor\n     */\n    public get FeatureAutoPlay(): number {\n        return (this.getValue(key_FeatureAutoPlay, 0) / 1000) * 60;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     * @constructor\n     */\n    public get FeatureAutoPick(): boolean {\n        return this.getValue(key_FeatureAutoPick, false);\n    }\n\n    /**\n     * @property ShowSimilarGames\n     * @returns {boolean}\n     */\n    public get ShowSimilarGames(): boolean {\n        return this.getValue(key_ShowSimilarGames, false);\n    }\n\n    /**\n     * @property SimilarGamesList\n     * @returns {array string}\n     */\n    public get SimilarGamesList(): Array<string> {\n        return this.getValue(key_SimilarGamesList, []);\n    }\n\n    /**\n     * @property ShowExitGameButton\n     * @returns {boolean}\n     */\n    public get ShowExitGameButton(): boolean {\n        return this.getValue(key_ShowExitGameButton, true);\n    }\n\n    /**\n     * @property StaticContentUrl\n     * @returns {string}\n     */\n    public get StaticContentUrl(): string {\n        return this.getValue(key_StaticContentUrl, \"\");\n    }\n\n    /**\n     * @property ShowHomeButton\n     * @returns {boolean}\n     */\n    public get ShowHomeButton(): boolean {\n        return this.getValue(key_ShowHomeButton, true);\n    }\n\n    /**\n     * @property UsePortraitMode\n     * @returns {boolean}\n     */\n    public get UsePortraitMode(): boolean {\n        return this.getValue(key_UsePortraitMode, true);\n    }\n\n    /**\n     * @property FRBShowDenyButton\n     * @returns {boolean}\n     */\n    public get FRBShowDenyButton(): boolean {\n        return this.getValue(key_FRBShowDenyButton, true);\n    }\n\n    /**\n     * @property FRBShowPostponeButton\n     * @returns {boolean}\n     */\n    public get FRBShowPostponeButton(): boolean {\n        return this.getValue(key_FRBShowPostponeButton, true);\n    }\n\n    /**\n     * @property StatusBar\n     * @returns {array string}\n     */\n    public get StatusBar(): Array<string> {\n        return this.getValue(key_StatusBar, []);\n    }\n\n    /**\n     * @property StatusBarData\n     * @returns {object}\n     */\n    public get StatusBarData(): Object {\n        return this.getValue(key_StatusBarData, {});\n    }\n\n    /**\n     * @property ProgressiveBonusId\n     * @returns {number}\n     */\n    public get ProgressiveBonusId(): number {\n        return this.getValue(key_ProgressiveBonusId, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusContributeOnlyQualified\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusContributeOnlyQualified(): boolean {\n        return this.getValue(key_ProgressiveBonusContributeOnlyQualified, false);\n    }\n\n    /**\n     * @property ProgressiveBonusMinQualifyingBet\n     * @returns {number}\n     */\n    public get ProgressiveBonusMinQualifyingBet(): number {\n        return this.getValue(key_ProgressiveBonusMinQualifyingBet, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusMaxQualifyingBet\n     * @returns {number}\n     */\n    public get ProgressiveBonusMaxQualifyingBet(): number {\n        return this.getValue(key_ProgressiveBonusMaxQualifyingBet, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusVisibleMax\n     * @returns {number}\n     */\n    public get ProgressiveBonusVisibleMax(): number {\n        return this.getValue(key_ProgressiveBonusVisibleMax, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusHelpShowMaxVisibleLimit\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusHelpShowMaxVisibleLimit(): boolean {\n        return this.getValue(key_ProgressiveBonusHelpShowMaxVisibleLimit, true);\n    }\n\n    /**\n     * @property ProgressiveBonusHelpShowCumulativeWinLimit\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusHelpShowCumulativeWinLimit(): boolean {\n        return this.getValue(key_ProgressiveBonusHelpShowCumulativeWinLimit, true);\n    }\n\n    /**\n     * @property ProgressiveBonusTicketConstraint\n     * @returns {string}\n     */\n    public get ProgressiveBonusTicketConstraint(): string {\n        return this.getValue(key_ProgressiveBonusTicketConstraint, \"\");\n    }\n\n    /**\n     * @property UseJackpotLocalization\n     * @returns {boolean}\n     */\n    public get UseJackpotLocalization(): boolean {\n        return this.getValue(key_UseJackpotLocalization, false);\n    }\n\n    /**\n     * @property ProgressiveBonusTheme\n     * @returns {string}\n     */\n    public get ProgressiveBonusTheme(): string {\n        return this.getValue(key_ProgressiveBonusTheme, \"\");\n    }\n\n    /**\n     * @property SessionBalance\n     * @constructor\n     */\n    public get SessionBalance(): number {\n        return this.getValue(key_SessionBalance, 0);\n    }\n\n    /**\n     * @propertyTotalBet\n     * @constructor\n     */\n    public get TotalBet(): number {\n        return this.getValue(key_TotalBet, 0);\n    }\n\n    /**\n     * @propertyTotalWin\n     * @constructor\n     */\n    public get TotalWin(): number {\n        return this.getValue(key_TotalWin, 0);\n    }\n\n    /**\n     * @propertyPlayerTokenId\n     * @constructor\n     */\n    public get PlayerTokenId(): string {\n        return this.getValue(key_PlayerTokenId, \"\");\n    }\n\n    /**\n     * @propertyPlayerSessionReconnectionInterval\n     * @constructor\n     */\n    public get PlayerSessionReconnectionInterval(): number {\n        return this.getValue(key_PlayerSessionReconnectionInterval, 0);\n    }\n\n    /**\n     * @property ApplicationGatewayUrl\n     * @constructor\n     */\n    public get ApplicationGatewayUrl(): string {\n        return this.getValue(key_ApplicationGatewayUrl, \"\");\n    }\n\n    /**\n     * @property GameEnableVibration\n     * @constructor\n     */\n    public get GameEnableVibration(): boolean {\n        return this.getValue(key_GameEnableVibration, false);\n    }\n\n    /**\n     * @property HelpShowGameModuleVersion\n     * true - Enable game module version info in Help.\n     * false - Disable game module version info in Help.\n     */\n    public get HelpShowGameModuleVersion(): boolean {\n        return this.getValue(key_HelpShowGameModuleVersion, false);\n    }\n\n    /**\n     * @property NotifyBetHigherThanMin\n     * true - Set bet to minimal on game start and show\n     *        notification after if game entered during\n     *        feature using bet other than min bet.\n     * false - Disable notification and bet update\n     */\n    public get NotifyBetHigherThanMin(): boolean {\n        return this.getValue(key_NotifyBetHigherThanMin, false);\n    }\n\n    /**\n     * @property HelpShowMaxPayoutProbability\n     * true - Show additional info about Max Payout\n     *        Probability in Help.\n     */\n    public get HelpShowMaxPayoutProbability(): boolean {\n        return this.getValue(key_HelpShowMaxPayoutProbability, false);\n    }\n\n    /**\n     * @property HelpShowMaxPayoutProbabilityFrequency\n     * true - Show additional info about Max Payout\n     *        Probability Frequency in Help.\n     */\n    public get HelpShowMaxPayoutProbabilityFrequency(): boolean {\n        return this.getValue(key_HelpShowMaxPayoutProbabilityFrequency, false);\n    }\n\n    /**\n     * @property ShowPaytableAtStart\n     * If true, the game must show the paytable at start of the game session\n     */\n    public get ShowPaytableAtStart(): boolean {\n        return this.getValue(key_ShowPaytableAtStart, false);\n    }\n\n    /**\n     * @property PaytableUseValue\n     * @constructor\n     */\n    public get PaytableUseValue(): boolean {\n        return this.getValue(key_PaytableUseValue, false);\n    }\n\n    /**\n     * @propertyUseWebSocket\n     * @constructor\n     */\n    public get EventTrackerEnabled(): boolean {\n        return this.getValue(key_EventTrackerEnabled, false);\n    }\n\n    /**\n     * @propertyClientToken\n     * @constructor\n     */\n    public get ClientToken(): string {\n        return this.getValue(key_ClientToken, \"\");\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameConfiguration.ts\n **/","import { Platforms, Communication } from \"neo-games\";\nimport { DataManager } from \"./DataManager\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UserAction } from \"../HTMLComponents/UserAction\";\nimport { GameApp } from \"../GameApp\";\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { EventData } from \"neo-games/Engine/Plugins/EventTracker/EventTracker\";\nimport { NotificationManager } from \"./NotificationManager\";\nimport { AutoplayData } from \"neo-games/Engine/Platforms/IPlatforms\";\n\nvar GameModules = Communication.Game.GameModules;\n\nexport class PlatformsManager {\n    static create(): void {\n        let pluginOrigin = \"*\";\n\n        if (AppContext != null && AppContext.gameConfiguration != null) {\n            if (AppContext.gameConfiguration.PluginOrigin != \"\") {\n                pluginOrigin = AppContext.gameConfiguration.PluginOrigin;\n            }\n\n            Platforms.Platforms.getTimeDataFnc = DataManager.getTimeData;\n            Platforms.Platforms.getGameTimeFnc = DataManager.getGameTime;\n            Platforms.Platforms.createEmitter();\n\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.AutoplayStop, PlatformsManager.stopAutoplay);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RestoreAutoplay, (autoplayData) => {\n                PlatformsManager.restoreAutoplay(autoplayData);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ResizeGame, PlatformsManager.resizeGame);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RefreshBalance, PlatformsManager.refreshBalance);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayStop, (disableChannel) => {\n                PlatformsManager.gamePlayStop(disableChannel);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayResume, PlatformsManager.gamePlayResume);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayFreeze, PlatformsManager.gamePlayFreeze);\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.GamePlayUnfreeze,\n                PlatformsManager.gamePlayUnfreeze,\n            );\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioEnable, PlatformsManager.gameAudioEnable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioMute, PlatformsManager.gameAudioMute);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioSet, (level: number) => {\n                PlatformsManager.gameAudioSet(level);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameQuickSpin, (enabled: boolean) => {\n                PlatformsManager.gameQuickSpin(enabled);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowHelp, PlatformsManager.showHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HideHelp, PlatformsManager.hideHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ToggleHelp, PlatformsManager.toggleHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowPaytable, PlatformsManager.showPaytable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HidePaytable, PlatformsManager.hidePaytable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.TogglePaytable, PlatformsManager.togglePaytable);\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformCloseMenu,\n                PlatformsManager.platformCloseMenu,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformCloseGame,\n                PlatformsManager.platformCloseGame,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformUpdateUI,\n                PlatformsManager.platformUpdateUI,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformErrorMessageDismissed,\n                PlatformsManager.platformErrorMessageDismissed,\n            );\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.CreateNotification, (events: Array<EventData>) => {\n                PlatformsManager.createNotification(events);\n            });\n\n            Platforms.Platforms.create(\n                AppContext.gameConfiguration.Platform,\n                AppContext.gameConfiguration.PluginUrl,\n                pluginOrigin,\n                { gameKey: GameApp.key, lang: GameApp.language, clientHub: NotificationManager },\n            );\n        }\n    }\n\n    static stopAutoplay(): void {\n        DataManager.Autoplay = false;\n        DataManager.AutoplayCount = \"∞\";\n        DataManager.AutoplayLossLimit = \"∞\";\n        DataManager.AutoplayWinLimit = \"∞\";\n    }\n\n    static restoreAutoplay(autoplayData: AutoplayData): void {\n        DataManager.Autoplay = true;\n        DataManager.AutoplayCount = autoplayData.autoplayCount;\n        DataManager.AutoplayLossLimit = autoplayData.autoplayLossLimit;\n        DataManager.AutoplayWinLimit = autoplayData.autoplayWinLimit;\n        HtmlController.dispatchAction(\"AUTOPLAY\");\n    }\n\n    static resizeGame(): void {\n        Scaling.resizeRoot();\n    }\n\n    static refreshBalance(): void {\n        BalanceManager.refreshBalance(true);\n    }\n\n    static gamePlayStop(disableChannel: boolean = false): void {\n        // Stop autoplay\n        PlatformsManager.stopAutoplay();\n\n        // Disable channel module\n        if (disableChannel) {\n            if (ModuleManager.gambleActive()) {\n                //ModuleManager.disableChannelModule(GameModules.Gamble);\n            } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\n                //ModuleManager.disableChannelModule(GameModules.Freespins);\n            } else {\n                ModuleManager.disableChannelModule(GameModules.Base);\n            }\n        }\n    }\n\n    static gamePlayResume(): void {\n        // Restore game round\n        if (ModuleManager.gambleActive()) {\n            //ModuleManager.restoreGameRound(GameModules.Gamble);\n        } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\n            //ModuleManager.restoreGameRound(GameModules.Freespins);\n        } else {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n    }\n\n    static gamePlayFreeze(): void {\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            //handle freeze when idle (rc)\n            PlatformsManager.stopAutoplay();\n        }\n\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n        document.body.classList.add(\"freeze\");\n    }\n\n    static gamePlayUnfreeze(): void {\n        document.body.classList.remove(\"freeze\");\n        HtmlController.dispatchActionAllowed = true;\n        PageVisibilityHandler.resumeAll();\n        PageVisibilityHandler.Enabled = true;\n    }\n\n    static gameAudioEnable(): void {\n        HtmlController.setSound(3);\n    }\n\n    static gameAudioMute(): void {\n        HtmlController.setSound(0);\n    }\n\n    static gameAudioSet(level: number): void {\n        HtmlController.setSound(level);\n    }\n\n    static showHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\n                }\n            }\n        }\n    }\n\n    static hideHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\n                }\n            }\n        }\n    }\n\n    static toggleHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\n                } else {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\n                }\n            }\n        }\n    }\n\n    static showPaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                }\n            }\n        }\n    }\n\n    static hidePaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\n                }\n            }\n        }\n    }\n\n    static togglePaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                } else {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\n                }\n            }\n        }\n    }\n\n    static gameQuickSpin(enabled: boolean): void {\n        //not all games has quickspin fnc, use object key as function name\n        if (DataManager[\"quickspinSet\"]) {\n            DataManager[\"quickspinSet\"](enabled);\n        }\n    }\n\n    static platformCloseMenu(): void {\n        HtmlController.dispatchUiAction(\"\");\n    }\n\n    static platformCloseGame(): void {\n        Platforms.Platforms.exitHandler = \"platformsManager\";\n        GameApp.exit();\n    }\n\n    static platformUpdateUI(): void {\n        RetentionPanel.revalidate();\n    }\n\n    static platformErrorMessageDismissed(): void {\n        //ToDo not implemented yet\n    }\n\n    static createNotification(events: Array<EventData>): void {\n        if (AppContext.gameConfiguration.EventTrackerEnabled) {\n            NotificationManager.sendMessage({\n                application: \"EventTrackingServer\",\n                service: \"EventTracker\",\n                action: \"event/log\",\n                data: { events: events },\n            });\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/PlatformsManager.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, ITweenable } from \"../../Effects/Tweens\";\nimport { IElement } from \"../Interfaces/IElement\";\n\n/**\n * BaseElementParticle class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\n * @class BaseElementParticle\n * @extends PIXI.Container\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseElementParticle extends PIXI.particles.ParticleContainer implements ITweenable, IElement {\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n    private _tweenEngine: string;\n\n    maskSprite: PIXI.Sprite;\n\n    constructor() {\n        super();\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    public get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    /**\n     * @method _create - setup element from xml node\n     * @param node\n     * @private\n     */\n    _create(node: Element): void {\n        this.assertDestroyed(\"_create()\");\n\n        Tweens.removeTweens(this);\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        /*\n         * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n         * @property Alpha\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"Alpha\")) {\n            this.alpha = parseFloat(node.getAttribute(\"Alpha\"));\n        }\n\n        /*\n         * Rotation in degrees for this display object.\n         * @property Rotation\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"Rotation\")) {\n            this.rotation = parseInt(node.getAttribute(\"Rotation\"));\n        }\n\n        /*\n         * Random rotation in degrees for this display object.\n         * @property StartRotation\n         * @type Number\n         * @default null\n         */\n        if (node.hasAttribute(\"StartRotation\")) {\n            if (node.getAttribute(\"StartRotation\") === \"random\") {\n                //this.rotation = Math.floor(Math.random() * 360);\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        /*\n         * The factor to stretch this display object horizontally.\n         * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n         * @property ScaleX\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"ScaleX\")) {\n            this.scale.x = parseFloat(node.getAttribute(\"scaleX\"));\n        }\n\n        /*\n         * The factor to stretch this display object vertically.\n         * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n         * @property ScaleY\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"ScaleY\")) {\n            this.scale.y = parseFloat(node.getAttribute(\"ScaleY\"));\n        }\n\n        /*\n         * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n         * @property Scale\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"Scale\")) {\n            this.scale.x = parseFloat(node.getAttribute(\"Scale\"));\n            this.scale.y = parseFloat(node.getAttribute(\"Scale\"));\n        }\n\n        /*\n         * X (horizontal) position of the display object, relative to its parent.\n         * @property X\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"X\")) {\n            this.position.x = parseInt(node.getAttribute(\"X\"));\n        }\n\n        /*\n         * Y (vertical) position of the display object, relative to its parent.\n         * @property Y\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"Y\")) {\n            this.position.y = parseInt(node.getAttribute(\"Y\"));\n        }\n\n        /*\n         * X pivot for container. Used mainly for scale tweening and rotation.\n         * @property PivotX\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"PivotX\")) {\n            this.pivot.x = parseInt(node.getAttribute(\"PivotX\"));\n        }\n\n        /*\n         * Y pivot for container. Used mainly for scale tweening and rotation.\n         * @property PivotY\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"PivotY\")) {\n            this.pivot.y = parseInt(node.getAttribute(\"PivotY\"));\n        }\n\n        /*\n         * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n         * @property Visible\n         * @type Boolean\n         * @default true\n         */\n        if (node.hasAttribute(\"Visible\")) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(\"Visible\"));\n        }\n\n        /*\n         * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n         * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n         * @property Mask\n         * @type ShapeElement\n         * @default null\n         */\n        if (node.hasAttribute(\"Mask\")) {\n            var next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(\"Mask\")) {\n                    var shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(\"Mask\"));\n                }\n            }\n        }\n\n        /*\n         * A ImageElement instance that defines a mask for this display object.\n         * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n         * @property BitmapMask\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"BitmapMask\")) {\n            var image = StageController.getTextureByResourceId(node.getAttribute(\"BitmapMask\"));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(\"BitmapMaskX\")) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(\"BitmapMaskX\"));\n                }\n                if (node.hasAttribute(\"BitmapMaskY\")) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(\"BitmapMaskY\"));\n                }\n                if (!node.hasAttribute(\"BitmapMaskShow\")) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no image with name for mask: \" + node.getAttribute(\"BitmapMask\"));\n                }\n            }\n        }\n\n        this._positionTweenOnCreate(node);\n        this._scaleTweenOnCreate(node);\n        this._rotationTweenOnCreate(node);\n        this._alphaTweenOnCreate(node);\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Get scale-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _positionTweenOnCreate(node: Element): void {\n        // todo: PositionTween attribute, which takes either one value that applies both for X and Y axis, or pairs of values in format \"(x1,y1);(x2,x2);(x3,x4)\"\n\n        if (\n            !node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y)\n        ) {\n            return;\n        }\n\n        let tweenX: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X),\n        );\n        let tweenY: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y),\n        );\n\n        if (tweenX == null || tweenY == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for PositionTween\");\n            }\n\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\n            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\n            : null;\n        const position: string = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\n            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\n            : null;\n\n        if (position == BaseElementParticleAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            tweenX = tweenX.map((value) => {\n                return value + this.position.x;\n            });\n\n            tweenY = tweenY.map((value) => {\n                return value + this.position.y;\n            });\n        }\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration });\n    }\n\n    /**\n     * Get scale-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _scaleTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN)) {\n            return;\n        }\n\n        const tweenValues: Array<PIXI.Point> = BaseElementParticle._getPointsFromPointsAttribute(\n            node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN),\n        );\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\n            ? node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration });\n    }\n\n    /**\n     * Get rotation-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _rotationTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN)) {\n            return;\n        }\n\n        const degrees: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN),\n        );\n\n        if (degrees == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for RotationTween\");\n            }\n\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\n            ? node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\n            : null;\n        const tweenDelay: number = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY))\n            : 0;\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay });\n    }\n\n    /**\n     * Get alpha-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _alphaTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN)) {\n            return;\n        }\n\n        const alphas: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN),\n        );\n\n        if (alphas == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for RotationTween\");\n            }\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION))\n            : 120;\n        const tweenDelay: number = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY)\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY))\n            : 0;\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\n            ? node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay });\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) => {\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\n            })\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        this._create(node);\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            var debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = BaseElementParticle._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    public clone(): any {\n        throw new Error(\"Not implemented\");\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        var destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (var i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param message\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nconst BaseElementParticleAttributes = {\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    EMIT: \"Emit\",\n    // Tweens used in BaseElementParticle\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    /*\n     * Style define animation. You can use one style on more than one place.\n     * Style for ParticleElement has to be instance of ParticleStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    START: \"Start\",\n    STOPPING: \"Stopping\",\n    STOP: \"Stop\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElementParticle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ImageElement } from \"./ImageElement\";\nimport { StageController } from \"../../StageController\";\nimport { BaseElement } from \"./BaseElement\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { BGParticleStyle } from \"../Styles/BGParticleStyle\";\n\n// TODO add comments\n/**\n * BGParticleElement class is class which creates particles of images on full screen that moves in diferent ways, speed, scale,....\n * Can be defined only with BGParticleStyle (See BGParticleStyle class).\n * Example 1:\n *   <BGParticleElement Class=\"BGParticleElement\" Style=\"BGParticleStyle\" />\n *\n * @class SwitchElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BGParticleElement extends BaseElement {\n    // handle definition for particles\n    private _style: BGParticleStyle;\n    private _styleName: string;\n    //  holds particles in pool and reused them\n    private _pool: Array<ImageElement>;\n    // timer for add particles\n    private _timer: FrameTimerEventEmitter;\n\n    private _stopping: boolean;\n    private _stop: boolean;\n    private _emitOnce: boolean;\n    private _startType: string;\n\n    private _blendMode: number;\n\n    private circles: Array<any> = [];\n    private circlesData: Array<any> = [];\n    private lines: PIXI.Graphics;\n\n    private connectionZoneWidth: Array<any> = [];\n    private connectionZoneHeight: Array<any> = [];\n\n    private counts: number;\n\n    constructor() {\n        super();\n\n        this._pool = [];\n\n        this._timer = CreateFrameTimer(\"bgTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.startUpdate.bind(this));\n\n        this._stopping = false;\n        this._stop = true;\n        this._emitOnce = false;\n        this._startType = \"\";\n        this.visible = false;\n        this.counts = 0;\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (node.hasAttribute(BGParticleElementAttributes.BLEND_MODE)) {\n            this._blendMode = parseInt(node.getAttribute(BGParticleElementAttributes.BLEND_MODE));\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.STYLE)) {\n            this._style = <BGParticleStyle>StyleManager.Styles[node.getAttribute(BGParticleElementAttributes.STYLE)];\n            this._styleName = this._style.name;\n            this.visible = true;\n\n            this.connectionZoneHeight = this._style.connectionZoneHeight;\n            this.connectionZoneWidth = this._style.connectionZoneWidth;\n\n            this.createParticles();\n        }\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n    }\n\n    private createParticles(): void {\n        let startCount = this._style.count;\n        let imageElement: any;\n\n        this.counts = this._style.counts[this._style.connected - 1];\n\n        for (let i = 0; i < startCount; i++) {\n            let speedX: number = 0;\n            let speedY: number = 0;\n            let scale: number = 1;\n            let randomX = Math.random() * StageController.Width;\n            let randomY = Math.random() * StageController.Height;\n\n            for (let j = 0; j < this._style.images.length; j++) {\n                if (i < this._style.counts[j]) {\n                    imageElement = new ImageElement(StageController.getTextureByResourceId(this._style.images[j]));\n                    speedX =\n                        Math.random() * (this._style.speedX[j][1] - this._style.speedX[j][0]) +\n                        this._style.speedX[j][0];\n                    speedY =\n                        Math.random() * (this._style.speedY[j][1] - this._style.speedY[j][0]) +\n                        this._style.speedY[j][0];\n                    scale =\n                        Math.random() * (this._style.scale[j][1] - this._style.scale[j][0]) + this._style.scale[j][0];\n                    break;\n                }\n            }\n\n            imageElement.position.x = randomX;\n            imageElement.position.y = randomY;\n            imageElement.pivot.x = imageElement.width / 2;\n            imageElement.pivot.y = imageElement.height / 2;\n            imageElement.scale.x = scale;\n            imageElement.scale.y = scale;\n\n            if (Math.round(Math.random()) == 0) {\n                speedX = -speedX;\n            }\n\n            if (Math.round(Math.random()) == 0) {\n                speedY = -speedY;\n            }\n\n            this.circles.push(imageElement);\n            this.addChild(imageElement);\n            this.circlesData.push([speedX, speedY]);\n        }\n\n        // for(let i=0; i< this.circles.length;i++){\n        //     let pointsS: Array<any>= [];\n        //     let counter = 0\n        //\n        //     for (let j = i; j < this.circles.length;j++) {\n        //         if(i < this.counts && j < this.counts){\n        //\n        //             let distance = Math.sqrt(Math.pow(this.circles[j].x - this.circles[i].x, 2) + Math.pow(this.circles[j].y - this.circles[i].y, 2));\n        //             let opacity = 1 - distance / this._style.radius;\n        //             if (opacity > 0) {\n        //                 if(opacity > this._style.lineAlpha) {opacity = this._style.lineAlpha}\n        //                 if(counter<3){\n        //                     pointsS.push(this.circles[j])\n        //                 }\n        //                 counter++;\n        //             }\n        //         }\n        //     }\n        //     // if(pointsS.length == 3)\n        //         this.conectedPoints.push(pointsS)\n        // }\n\n        this.lines = new PIXI.Graphics();\n        this.addChildAt(this.lines, 0);\n        this.startUpdate();\n    }\n\n    startUpdate(): void {\n        let _this = this;\n        _this.updateU();\n        this._timer.start(2);\n    }\n\n    updateU(): void {\n        this.lines.clear();\n\n        for (let i = 0; i < this.circles.length; i++) {\n            this.circles[i].position.x += this.circlesData[i][0];\n            this.circles[i].position.y += this.circlesData[i][1];\n\n            if (this.circles[i].position.x > 1920) {\n                this.circlesData[i][0] *= -1;\n                this.circles[i].position.x = 1920;\n            } else if (this.circles[i].position.x < 0) {\n                this.circlesData[i][0] *= -1;\n                this.circles[i].position.x = 0;\n            }\n\n            if (this.circles[i].position.y > 1080) {\n                this.circlesData[i][1] *= -1;\n                this.circles[i].position.y = 1080;\n            } else if (this.circles[i].position.y < 0) {\n                this.circlesData[i][1] *= -1;\n                this.circles[i].position.y = 0;\n            }\n\n            let inZone = false;\n            for (let k = 0; k < this.connectionZoneHeight.length; k++) {\n                if (\n                    this.circles[i].position.y >= this.connectionZoneHeight[k][0] &&\n                    this.circles[i].position.y <= this.connectionZoneHeight[k][1] &&\n                    this.circles[i].position.x >= this.connectionZoneWidth[k][0] &&\n                    this.circles[i].position.x <= this.connectionZoneWidth[k][1]\n                ) {\n                    inZone = true;\n                }\n            }\n\n            if (inZone) {\n                if (this.circles[i].alpha < 1) {\n                    this.circles[i].alpha += 0.0125;\n                }\n\n                for (let j = i; j < this.circles.length; j++) {\n                    if (i < this.counts && j < this.counts) {\n                        let distance = Math.sqrt(\n                            Math.pow(this.circles[j].x - this.circles[i].x, 2) +\n                                Math.pow(this.circles[j].y - this.circles[i].y, 2),\n                        );\n                        let opacity = 1 - distance / this._style.radius;\n\n                        if (opacity > 0) {\n                            if (opacity > this._style.lineAlpha) {\n                                opacity = this._style.lineAlpha;\n                            }\n                            this.lines\n                                .lineStyle(this._style.lineWidth, this._style.lineColor, opacity)\n                                .moveTo(this.circles[i].x, this.circles[i].y)\n                                .lineTo(this.circles[j].x, this.circles[j].y);\n                        }\n                    }\n                }\n            } else {\n                if (this.circles[i].alpha > 0.3) {\n                    this.circles[i].alpha -= 0.0125;\n                }\n            }\n        }\n    }\n\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return BGParticleElement\n     */\n    clone(): BGParticleElement {\n        let element: BGParticleElement = new BGParticleElement();\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        let node: Element = document.createElement(\"particle\");\n        node.setAttribute(\"Style2\", this._styleName);\n        element.create(node);\n        element._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const BGParticleElementAttributes = {\n    /**\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    SPEED_X: \"SpeedX\",\n    SPEED_Y: \"SpeedY\",\n    EMIT_ONCE: \"EmitOnce\",\n    START_TYPE: \"StartType\",\n    // Tweens used in BaseElementParticle\n    ALPHA: \"Alpha\",\n\n    SCALE: \"Scale\",\n\n    /**\n     * Style define animation. You can use one style on more than one place.\n     * Style for BGParticleElement has to be instance of ParticleStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    START: \"Start\",\n    STOPPING: \"Stopping\",\n    STOP: \"Stop\",\n    /**\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    ATTR_COUNT: \"Count\",\n    ATTR_COUNTS: \"Counts\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    RADIUS: \"Radius\",\n    CONNECTED: \"Connected\",\n    CONNECTION_ZONE_HEIGHT: \"ConnectionZoneHeight\",\n    CONNECTION_ZONE_WIDTH: \"ConnectionZoneWidth\",\n    LINE_COLOR: \"LineColor\",\n    LINE_WIDTH: \"LineWidth\",\n    LINE_ALPHA: \"LineAlpha\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BGParticleElement.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ActionSet } from \"../../ActionSet\";\n\n/**\n * LinkedElement class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask (?)\n *\n * @class LinkedElement\n * @author Marek Turkovic\n */\n@engineComponent(ComponentTypes.LinkedElement)\nexport class LinkedElement {\n    constructor() {}\n\n    /**\n     *\n     * @param node\n     * @param nodeAttributes\n     */\n    public create(node: Element, nodeAttributes?: Element): void {\n        if (node.hasAttribute(LinkedElementAttributes.LINKED_TO_ID)) {\n            if (\n                ActionSet.ElementsToLink != null &&\n                ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)] != null\n            ) {\n                let mainElement = ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)];\n\n                if (nodeAttributes != null) {\n                    mainElement.updateByNode(nodeAttributes);\n                } else {\n                    mainElement.updateByNode(node);\n                }\n            }\n        }\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nexport const LinkedElementAttributes = {\n    LINKED_TO_ID: \"LinkedToId\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/LinkedElement.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { BaseElement } from \"./BaseElement\";\nimport { Vibration } from \"../../../Utils/Vibration\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class VibrationElement extends BaseElement {\n    createByNode(node: Element): void {\n        //\n    }\n\n    updateByNode(node: Element): void {\n        if (node.hasAttribute(VibrationElementAttributes.PATTERN)) {\n            const pattern = ArrayUtils.numberArray(node.getAttribute(VibrationElementAttributes.PATTERN));\n            Vibration.vibrate(pattern);\n        }\n    }\n\n    clone(): VibrationElement {\n        const element: VibrationElement = new VibrationElement();\n        return element;\n    }\n}\n\nexport const VibrationElementAttributes = {\n    PATTERN: \"Pattern\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/VibrationElement.ts\n **/","import { DataManager } from \"../Managers/DataManager\";\n\nexport class Vibration {\n    /**\n     * To perform multiple vibration, an array needs to be passed as the parameter.\n     * First value represents vibration time (milliseconds), second value represents pause time (milliseconds),\n     * third value represents vibration time, and this goes on with each alternate value.\n     * Basically it is performed as a series of [VIBRATION] [PAUSE] [VIBRATION] [PAUSE] [VIBRATION] [PAUSE]...\n     *\n     * Use 0 to force stop vibration\n     *\n     * @param pattern\n     */\n    public static vibrate(pattern: number | Array<number> = 0): void {\n        if (!DataManager.VibrationEnabled) {\n            return;\n        }\n\n        if (navigator.vibrate == null) {\n            return;\n        }\n\n        navigator.vibrate(pattern);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Vibration.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * The animation style is used for defined behaviour animation from sprite sheet.\n * Example:\n *   <AnimationStyle Class=\"AnimationStyle\" Animation=\"[libraryID]\" StartFrame=\"0\" EndFrame=\"0\" Loop=\"false\" Stop=\"false\" />\n * @class AnimationStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class AnimationStyle extends Style {\n    // store only name of animation in style\n    // element will create new instnce of animation not style\n    animation: string;\n\n    // settings for animation\n    startFrame: number;\n    endFrame: number;\n    speed: number;\n    loop: boolean;\n    stop: boolean;\n    alpha: number;\n    tint: number;\n    blendMode: number;\n    reverse: boolean;\n\n    // for InsideAnimationElement\n    node: Element;\n\n    constructor() {\n        super();\n\n        // set default values\n        this.animation = \"\";\n        this.startFrame = 0;\n        this.speed = 1;\n        this.loop = false;\n        this.stop = false;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /**\n         * Store node for InsideAnimationElement\n         *\n         * todo Toto sa pouziva?\n         * @type {Element}\n         */\n        this.node = node;\n\n        if (node.hasAttribute(AnimationStyleAttributes.ANIMATION)) {\n            this.animation = node.getAttribute(AnimationStyleAttributes.ANIMATION);\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.START_FRAME)) {\n            this.startFrame = parseInt(node.getAttribute(AnimationStyleAttributes.START_FRAME));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.END_FRAME)) {\n            this.endFrame = parseInt(node.getAttribute(AnimationStyleAttributes.END_FRAME));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.LOOP)) {\n            this.loop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.LOOP));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.STOP)) {\n            this.stop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.STOP));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.SPEED)) {\n            this.speed = parseFloat(node.getAttribute(AnimationStyleAttributes.SPEED));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(AnimationStyleAttributes.ALPHA));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.TINT)) {\n            this.tint = parseInt(node.getAttribute(AnimationStyleAttributes.TINT), 16);\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.BLEND_MODE)) {\n            this.blendMode = CustomUtils.getBlendMode(parseInt(node.getAttribute(AnimationStyleAttributes.BLEND_MODE)));\n        }\n        if (node.hasAttribute(AnimationStyleAttributes.REVERSE)) {\n            this.reverse = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.REVERSE));\n        }\n    }\n}\n\nexport const AnimationStyleAttributes = {\n    /*\n     * Animation is library ID from javascript libs.\n     * @property Animation\n     * @type string\n     * @default null\n     */\n    ANIMATION: \"Animation\",\n    /*\n     * Start frame is number of frame when animation start on timeline.\n     * @property StartFrame\n     * @type number\n     * @default 0\n     */\n    START_FRAME: \"StartFrame\",\n    /*\n     * End frame is number of frame when animation ends on timeline.\n     * Use only if end frame is smaller then last frame on timeline.\n     * @property EndFrame\n     * @type number\n     * @default null\n     */\n    END_FRAME: \"EndFrame\",\n    /*\n     * Indicates whenever this MovieClip should loop when it reaches the end of its timeline.\n     * @property Loop\n     * @type boolean\n     * @default false\n     */\n    LOOP: \"Loop\",\n    /*\n     * Indicates whether this MovieClip shoud play only single frame animation.\n     * @property Stop\n     * @type boolean\n     * @default false\n     */\n    STOP: \"Stop\",\n    /*\n     * Speed of animation. Less than one will slow down animation. Calc with game FPS.\n     * @property Speed\n     * @type number\n     * @default 1\n     */\n    SPEED: \"Speed\",\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    /*\n     * Indicates if animation should animate reverse.\n     * @property Reverse\n     * @type boolean\n     * @default false\n     */\n    REVERSE: \"Reverse\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/AnimationStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { BGParticleElementAttributes } from \"../Graphics/BGParticleElement\";\nimport { StageController } from \"../../StageController\";\n// import {BGParticleElementAttributes} from \"../../../CustomComponents/BGParticleElement\";\n//\n@engineComponent(ComponentTypes.Style)\n// TODO add comments\nexport class BGParticleStyle extends Style {\n    // value in percentage for creating reserv in display list to pooling particles\n    static ElementsReserve: number = 0.5;\n\n    // names for zones\n    static NodeImages: string = \"Images\";\n    static NodeBehavior: string = \"Behavior\";\n    static NodeName: string = \"Name\";\n\n    // TODO possible memory leak\n    node: Element;\n\n    private _counts: Array<number>;\n    private _count: number;\n    private _scale: Array<Array<number>>;\n    private _images: Array<string>;\n\n    private _radius: number;\n    private _connected: number;\n    private _speedX: Array<Array<number>>;\n    private _speedY: Array<Array<number>>;\n    private _lineWidth: number;\n    private _lineColor: any;\n    private _lineAlpha: number;\n    /**\n     *  In percentage from 100% width and height\n     **/\n    private _connectionZoneWidth: Array<Array<number>>;\n    private _connectionZoneHeight: Array<Array<number>>;\n\n    constructor() {\n        super();\n\n        this._count = 0;\n        this._counts = [];\n        this._images = [];\n        this._scale = [];\n        this._radius = 200;\n        this._connected = 0;\n        this._speedX = [];\n        this._speedY = [];\n        this._lineWidth = 1;\n        this._lineColor = 0x000000;\n        this._lineAlpha = 1;\n        this._connectionZoneHeight = [];\n        this._connectionZoneWidth = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element) {\n        this.node = node;\n\n        super.create(node);\n\n        this.parseChildrenNodes(node);\n    }\n\n    private parseChildrenNodes(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case BGParticleStyle.NodeImages:\n                    this.initializeImages(next);\n                    break;\n                case BGParticleStyle.NodeBehavior:\n                    this.initializeBehavior(next);\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    get count(): number {\n        return this._count;\n    }\n\n    get counts(): Array<number> {\n        return this._counts;\n    }\n\n    get images(): Array<string> {\n        return this._images;\n    }\n\n    get scale(): Array<Array<number>> {\n        return this._scale;\n    }\n\n    get speedX(): Array<Array<number>> {\n        return this._speedX;\n    }\n\n    get speedY(): Array<Array<number>> {\n        return this._speedY;\n    }\n\n    get lineAlpha(): number {\n        return this._lineAlpha;\n    }\n\n    get radius(): number {\n        return this._radius;\n    }\n\n    get connected(): number {\n        return this._connected;\n    }\n\n    get lineWidth(): number {\n        return this._lineWidth;\n    }\n\n    get lineColor(): number {\n        return this._lineColor;\n    }\n\n    get connectionZoneWidth(): Array<any> {\n        return this._connectionZoneWidth;\n    }\n\n    get connectionZoneHeight(): Array<any> {\n        return this._connectionZoneHeight;\n    }\n\n    private initializeImages(node: Element): void {\n        if (node.hasAttribute(BGParticleElementAttributes.ATTR_FROM_FRAME)) {\n            this._images = node.getAttribute(BGParticleElementAttributes.ATTR_FROM_FRAME).split(\";\");\n\n            for (let i: number = 0; i < this._images.length; i++) {\n                // TODO 0000\n                this._images[i] = this._images[i] + \"0000\";\n            }\n        } else if (node.hasAttribute(BGParticleElementAttributes.ATTR_IMAGES)) {\n            this._images = node.getAttribute(BGParticleElementAttributes.ATTR_IMAGES).split(\";\");\n            // console.log(this._images)\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.SCALE)) {\n            let scales = node.getAttribute(BGParticleElementAttributes.SCALE).split(\"|\");\n\n            for (let i = 0; i < scales.length; i++) {\n                this._scale.push(scales[i].split(\";\").map(Number));\n            }\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.ATTR_COUNTS)) {\n            let counts = node.getAttribute(BGParticleElementAttributes.ATTR_COUNTS).split(\";\").map(Number);\n            for (let i = 0; i < counts.length; i++) {\n                if (i == 0) {\n                    this._counts.push(counts[i]);\n                } else {\n                    this._counts.push(counts[i] + this._counts[i - 1]);\n                }\n            }\n            this._count = this._counts[this._counts.length - 1];\n        }\n    }\n\n    private initializeBehavior(node: Element): void {\n        if (node.hasAttribute(BGParticleElementAttributes.SPEED_X)) {\n            let speedX = node.getAttribute(BGParticleElementAttributes.SPEED_X).split(\"|\");\n            for (let i = 0; i < speedX.length; i++) {\n                this._speedX.push(speedX[i].split(\";\").map(Number));\n            }\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.SPEED_Y)) {\n            let speedY = node.getAttribute(BGParticleElementAttributes.SPEED_Y).split(\"|\");\n            for (let i = 0; i < speedY.length; i++) {\n                this._speedY.push(speedY[i].split(\";\").map(Number));\n            }\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.RADIUS)) {\n            this._radius = parseInt(node.getAttribute(BGParticleElementAttributes.RADIUS));\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTED)) {\n            this._connected = parseInt(node.getAttribute(BGParticleElementAttributes.CONNECTED));\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_ALPHA)) {\n            this._lineAlpha = parseFloat(node.getAttribute(BGParticleElementAttributes.LINE_ALPHA));\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_WIDTH)) {\n            this._lineWidth = parseInt(node.getAttribute(BGParticleElementAttributes.LINE_WIDTH));\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_COLOR)) {\n            this._lineColor = parseInt(node.getAttribute(BGParticleElementAttributes.LINE_COLOR), 16);\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTION_ZONE_WIDTH)) {\n            let zoneWidth = node.getAttribute(BGParticleElementAttributes.CONNECTION_ZONE_WIDTH).split(\"|\");\n            for (let i = 0; i < zoneWidth.length; i++) {\n                let width = zoneWidth[i].split(\";\").map(function (width) {\n                    return (parseFloat(width) / 100) * StageController.Width;\n                });\n                this._connectionZoneWidth.push(width);\n            }\n        }\n\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT)) {\n            let zoneHeight = node.getAttribute(BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT).split(\"|\");\n            for (let i = 0; i < zoneHeight.length; i++) {\n                let height = zoneHeight[i].split(\";\").map(function (height) {\n                    return (parseFloat(height) / 100) * StageController.Height;\n                });\n                this._connectionZoneHeight.push(height);\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/BGParticleStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * ContainerStyle only holds xml node for container elements.\n * Example:\n *   <ContainerStyle Class=\"ContainerStyle\">\n *       <Child1 />\n *       <Child2 />\n *       ...\n *       <ChildX />\n *   </ContainerStyle>\n * @class ContainerStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class ContainerStyle extends Style {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        // store node for container elements\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ContainerStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n@engineComponent(ComponentTypes.Style)\nexport class ProtonStyle extends Style {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element) {\n        super.create(node);\n\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ProtonStyle.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * The animation style is used for defined behaviour animation from sprite sheet.\n * Example:\n *   <ShapeStyle Class=\"ShapeStyle\" ... />\n * @class ShapeStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class ShapeStyle extends Style {\n    lineWidth: number;\n\n    // for InsideAnimationElement\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /**\n         * Store node for InsideAnimationElement\n         *\n         * todo Toto sa pouziva?\n         * @type {Element}\n         */\n        this.node = node;\n\n        if (node.hasAttribute(ShapeStyleAttributes.LINE_WIDTH)) {\n            this.lineWidth = parseInt(node.getAttribute(ShapeStyleAttributes.LINE_WIDTH));\n        }\n    }\n}\n\nconst ShapeStyleAttributes = {\n    LINE_WIDTH: \"LineWidth\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ShapeStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * TimelineStyle create container from child <elements> and holds xml nodes of frames for this element.\n * Example:\n *   <TimelineStyle Class=\"TimelineStyle\">\n *      <Elements>\n *           <Child1 />\n *           <Child2 X=\"0\" />\n *           ...\n *      </Elements>\n *      <TimeLine>\n *          <Frame Frame=\"0\">\n *              <Child2 X=\"50\" />\n *          </Frame>\n *          <Frame Frame=\"CASE2\">\n *              <Child1 X=\"200\" />\n *          </Frame>\n *      </TimeLine>\n *      <SoundTimeline>\n *          <Frame Frame=\"0\">\n *              <Song Song=\"ID\" Play=\"true\" />\n *          </Frame>\n *          <Frame Frame=\"CASE2\">\n *              <Song Song=\"ID\" Play=\"false\" />\n *          </Frame>\n *      </SoundTimeline>\n *   </TimelineStyle>\n * @class TimelineStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class TimelineStyle extends Style {\n    container: ContainerElement;\n\n    // xml nodes added to object by fframe\n    frames: Object;\n    framesSounds: Object;\n    outro: Element;\n    outroSounds: Element;\n\n    constructor() {\n        super();\n\n        this.frames = {};\n        this.framesSounds = {};\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"Elements\":\n                    this.container = new ContainerElement();\n                    this.container.create(next);\n                    break;\n                case \"TimeLine\":\n                    var nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(\"Frame\")) {\n                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\n                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR frame \" +\n                                            nextCase.getAttribute(\"Frame\") +\n                                            \" already exist in TimelineStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        if (nextCase.nodeName === \"Outro\") {\n                            this.outro = nextCase;\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n                case \"SoundTimeline\":\n                    var nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(\"Frame\")) {\n                            if (this.framesSounds[nextCase.getAttribute(\"Frame\")] !== null) {\n                                this.framesSounds[nextCase.getAttribute(\"Frame\")] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR frame \" +\n                                            nextCase.getAttribute(\"Frame\") +\n                                            \" already exist in TimelineStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        if (nextCase.nodeName === \"Outro\") {\n                            this.outroSounds = nextCase;\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/TimelineStyle.ts\n **/","import { Logger } from \"neo-common\";\nimport { Resource } from \"./Resource\";\n\n/**\n * The SndResource is used for holding songs from preloading. Supported all types of songs.\n * @class SndResource\n * @extends Resource\n */\nexport class SndResource extends Resource {\n    static Sounds: { [id: string]: AudioBuffer } = {};\n\n    /**\n     * Return song by id.\n     * @method getSongById\n     * @param id id of song in files.xml\n     * @return AudioBuffer\n     */\n    static getSongById(id: string): AudioBuffer {\n        if (this.Sounds != null) {\n            return this.Sounds[id];\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no sounds\");\n            }\n        }\n        if (DEBUG) {\n            this.log(\"ERROR no song: \" + id);\n        }\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"SndResource\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/SndResource.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../HTMLComponents/Elements/HtmlContainerElement\";\nimport { ILoadingElement } from \"../Components/Elements/Interfaces/ILoadingElement\";\nimport { PreloaderProvider } from \"../Components/Managers/PreloaderProvider\";\nimport { SplashScreen } from \"./SplashScreen\";\nimport { Strings } from \"../../Common/Strings\";\nimport { Languages } from \"../Utils/Languages\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlSplashScreen extends HtmlContainerElement implements ILoadingElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public static RequiredLoadGroup: string = \"SPLASH\";\n\n    public static suspendInit: boolean = false;\n\n    private static instance: HtmlSplashScreen = null;\n\n    private _gameProgressBar: HTMLElement;\n    private _gameProgressNumber: HTMLElement;\n    private _gameContinueButton: HTMLElement;\n\n    private _callback: () => void;\n    private _keyboardEvent: () => void;\n\n    //******************************************************************************************************************\n    //  CREATE & INIT\n    //******************************************************************************************************************\n\n    create(node: Element): void {\n        if (!PreloaderProvider.isGroupLoaded(HtmlSplashScreen.RequiredLoadGroup)) {\n            return;\n        }\n\n        super.create(node);\n\n        PreloaderProvider.addLoadingElementFunction(this);\n        this._initialize();\n        this.instance.offsetWidth;\n        this.instance.classList.remove(\"_disabled\");\n\n        HtmlSplashScreen.suspendInit = true;\n        HtmlSplashScreen.instance = this;\n\n        SplashScreen.createSplashScreen(this);\n    }\n\n    private _initialize(): void {\n        this._gameProgressBar = document.getElementById(\"splashProgressBar\");\n        this._gameProgressNumber = document.getElementById(\"splashProgressNumber\");\n        this._gameContinueButton = document.getElementById(\"splashScreen\"); //used whole splash as a continue button\n\n        if (this._gameProgressBar != null) {\n            let progressBar = document.getElementById(\"progressBar\");\n\n            if (progressBar != null) {\n                this._gameProgressBar.style.width = progressBar.style.width;\n            }\n        }\n\n        if (this._gameProgressNumber != null) {\n            let progressNumber = document.getElementById(\"progressNumber\");\n\n            if (progressNumber != null) {\n                this._gameProgressNumber.textContent = progressNumber.textContent;\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LOAD COMPLETED\n    //******************************************************************************************************************\n\n    public showContinueButton(callback: () => void): void {\n        this._callback = callback;\n\n        if (this._callback != null) {\n            if (this._gameContinueButton != null) {\n                this._gameContinueButton.addEventListener(\"click\", this._callback);\n            }\n\n            this._keyboardEvent = this.onKeyUp.bind(this);\n            document.addEventListener(\"keyup\", this._keyboardEvent);\n        }\n        this.instance.classList.add(\"_loaded\");\n    }\n\n    private onKeyUp(event: KeyboardEvent): void {\n        if (event.keyCode == 32) {\n            document.removeEventListener(\"keyup\", this._keyboardEvent);\n\n            if (this._callback != null) {\n                this._callback();\n            }\n        }\n    }\n\n    public hideSplashScreen(): void {\n        if (this.instance.parentElement) {\n            document.removeEventListener(\"keyup\", this._keyboardEvent);\n            this.instance.parentElement.removeChild(this.instance);\n        }\n    }\n\n    public showError(): void {\n        this.instance.classList.add(\"_error\");\n\n        let progressNumber = document.getElementById(\"splashProgressBar\");\n        progressNumber.innerHTML = Strings.loaded\n            ? Languages.getRid(\"ERROR_404\")\n            : \"Internal error. Please contact support.\";\n    }\n\n    //******************************************************************************************************************\n    //  PRELOADER EVENTS\n    //******************************************************************************************************************\n\n    public onLoadCompleted(success: boolean): void {\n        //handle load completed in GameManager initReceived\n    }\n\n    public onProgressUpdate(progress: number): void {\n        if (this._gameProgressBar != null) {\n            this._gameProgressBar.style.width = progress + \"%\";\n        }\n\n        if (this._gameProgressNumber != null) {\n            this._gameProgressNumber.textContent = progress + \"%\";\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/HtmlSplashScreen.ts\n **/","import { engineComponent, EngineComponentFactory, Logger, StringUtils } from \"neo-common\";\nimport { HtmlElement } from \"../HTMLComponents/Elements/HtmlElement\";\nimport { HtmlContainerElement } from \"../HTMLComponents/Elements/HtmlContainerElement\";\nimport { HtmlContainerStyle } from \"../HTMLComponents/Styles/HtmlContainerStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { HtmlManager } from \"../Components/Managers/HtmlManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { Languages } from \"../Utils/Languages\";\n\n/**\n * The HtmlContainerElement class is class which creates holder for other html elements.\n * Can be defined also by Style with class HtmlContainerStyle.\n * Example 1:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerElement>\n *\n * Example 2:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\" Style=\"HtmlContainerStyle\" />\n *\n * @class HtmlContainerElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlSvgElement {\n    data: string;\n\n    instance: SVGElement;\n\n    childs: Object;\n\n    rid: string;\n    ridType: string;\n    ridFilter: string;\n\n    private currentValue: string;\n    // constructor() {\n    //     super('');\n    // }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        this.instance = document.createElementNS(\"http://www.w3.org/2000/svg\", node.nodeName);\n\n        if (node.childElementCount == 0 && node.textContent != \"\") {\n            this.instance.textContent = node.textContent;\n        }\n\n        if (node.hasAttribute(\"Rid\")) {\n            this.rid = node.getAttribute(\"Rid\");\n            HtmlController.RidElements.push(this);\n            this.setText();\n        }\n\n        this.childs = HtmlSvgElement.parseElements(node, this);\n\n        for (let i = 0; i < node.attributes.length; i++) {\n            let attribute = node.attributes[i];\n            let attributeName = attribute.name;\n\n            if (attributeName == \"Rid\" || attributeName == \"Class\") {\n                continue;\n            }\n\n            switch (attributeName.toLowerCase()) {\n                case \"CssClass\".toLowerCase():\n                    attributeName = \"class\";\n                    break;\n            }\n\n            this.instance.setAttribute(attributeName, attribute.value);\n        }\n\n        // super.create(node);\n    }\n\n    setText(value?: string): void {\n        var text: string = \"\";\n\n        if (value != null) {\n            text = value;\n            this.currentValue = value;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    updateText(): void {\n        var text: string = \"\";\n\n        if (this.currentValue != null) {\n            text = this.currentValue;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    private static parseElements(startNode: Element, parent: HtmlSvgElement = null): Object {\n        const children: Object = {};\n\n        if (!startNode) {\n            return;\n        }\n\n        HtmlSvgElement.getNodesList(startNode.firstElementChild, [])\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlElement),\n            )\n            .forEach((node: Element) => {\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                const root: HTMLElement = document.getElementById(\"root\");\n                let customRoot: HTMLElement;\n\n                if (node.hasAttribute(\"RootId\")) {\n                    customRoot = document.getElementById(node.getAttribute(\"RootId\"));\n                }\n\n                if (node.hasAttribute(\"Key\")) {\n                    if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\n                        return;\n                    }\n\n                    if (Object.getPrototypeOf(element) instanceof UserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    }\n\n                    // if(element instanceof DesktopBaseUserControls) {\n                    //     ModuleManager.registerChannelModule(node.getAttribute('Key'), element);\n                    // } else if(element instanceof MobileBaseUserControls) {\n                    //     ModuleManager.registerChannelModule(node.getAttribute('Key'), element);\n                    // } else if(element instanceof GambleUserControls) {\n                    //     ModuleManager.registerChannelModule(node.getAttribute('Key'), element);\n                    // } else if(element instanceof DesktopFreespinsUserControls) {\n                    //     ModuleManager.registerChannelModule(node.getAttribute('Key'), element);\n                    // } else if(element instanceof MobileFreespinsUserControls) {\n                    //     ModuleManager.registerChannelModule(node.getAttribute('Key'), element);\n                    // }\n                }\n\n                if (element.instance != null) {\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                    element.create(node);\n                } else {\n                    element.create(node);\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                }\n\n                children[node.nodeName] = element;\n            });\n\n        return children;\n    }\n\n    private static getNodesList(node: Element, nodeList: Array<Element>): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = HtmlSvgElement.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/HtmlSvgElement.ts\n **/","import { engineComponent, StringUtils, NumberUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { WinAnimator } from \"../GameComponents/WinAnimator\";\nimport { Languages } from \"../Utils/Languages\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextElementAdaptive extends ImageTextCounterElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private maxWidth: number;\n\n    private maxMultiplier: number;\n\n    private currentScale: number;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.maxWidth = -1;\n        this.maxMultiplier = -1;\n        this.currentScale = -1;\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (node.hasAttribute(ImageTextElementAdaptiveAttributes.MAX_WIDTH)) {\n            this.maxWidth = parseInt(node.getAttribute(ImageTextElementAdaptiveAttributes.MAX_WIDTH));\n        }\n\n        if (node.hasAttribute(ImageTextElementAdaptiveAttributes.MAX_MULTIPLIER)) {\n            this.maxMultiplier = parseInt(node.getAttribute(ImageTextElementAdaptiveAttributes.MAX_MULTIPLIER));\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REALIGN\n    //******************************************************************************************************************\n\n    public realign(): void {\n        //use always calculated scale based on max multiplier and max bet in case useMaxMultiplier is true\n        if (this.maxMultiplier > -1 && this.scale.x != this.currentScale) {\n            if (this.currentScale == -1) {\n                this.currentScale = this.getScaleByMaxMultiplier();\n            }\n            this.bitmapText.scale.set(this.currentScale);\n        } else if (this.maxWidth > -1) {\n            //else check only max width attribute, if set, calculate adaptive scale for current value\n            this.bitmapText.scale.set(1); //reset scale to get real width\n\n            if (this.bitmapText.width > 0) {\n                this.bitmapText.scale.set(this.getAdaptiveScale());\n            }\n        }\n\n        super.realign();\n    }\n\n    protected getScaleByMaxMultiplier(): number {\n        if (BetManager.TotalBets == null) {\n            return -1;\n        }\n\n        const maxBet = Math.max.apply(null, BetManager.TotalBets);\n        const maxSizedValue = Languages.formatText(\n            Languages.FormatMoney,\n            NumberUtils.multiply(maxBet, this.maxMultiplier),\n        );\n        const originText = this.bitmapText.text;\n        let scale = 1;\n\n        this.bitmapText.scale.set(1);\n        this.bitmapText.text = maxSizedValue;\n\n        if (this.maxWidth != null) {\n            scale = this.getAdaptiveScale();\n            this.bitmapText.text = originText;\n        }\n\n        return scale;\n    }\n\n    protected getAdaptiveScale(): number {\n        const scale = this.maxWidth / this.bitmapText.width;\n        return scale < 1 ? scale : 1;\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextElementAdaptive {\n        let element: ImageTextElementAdaptive = new ImageTextElementAdaptive();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.maxWidth = this.maxWidth;\n        element.currentScale = this.currentScale;\n        element.maxMultiplier = this.maxMultiplier;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.addChild(element.bitmapText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n}\n\nexport const ImageTextElementAdaptiveAttributes = {\n    /**\n     * Max possible multiplier in game used in values over symbols.\n     * @property MaxWidth\n     * @default -1\n     */\n    MAX_WIDTH: \"MaxWidth\",\n    /**\n     * Max possible multiplier in game used in values over symbols.\n     * @property MaxMultiplier\n     * @default -1\n     */\n    MAX_MULTIPLIER: \"MaxMultiplier\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ImageTextElementAdaptive.ts\n **/","import { engineComponent, EngineComponentFactory, Logger, StringUtils } from \"neo-common\";\nimport { HtmlElement } from \"../HTMLComponents/Elements/HtmlElement\";\nimport { HtmlContainerElement } from \"../HTMLComponents/Elements/HtmlContainerElement\";\nimport { HtmlContainerStyle } from \"../HTMLComponents/Styles/HtmlContainerStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { HtmlManager } from \"../Components/Managers/HtmlManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { Languages } from \"../Utils/Languages\";\n\n/**\n * The HtmlContainerElement class is class which creates holder for other html elements.\n * Can be defined also by Style with class HtmlContainerStyle.\n * Example 1:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerElement>\n *\n * Example 2:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\" Style=\"HtmlContainerStyle\" />\n *\n * @class HtmlContainerElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class JavascriptElement {\n    instance: HTMLElement;\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        this.instance = document.createElement(node.nodeName);\n\n        if (node.childElementCount == 0 && node.textContent != \"\") {\n            this.instance.textContent = node.textContent;\n        }\n\n        for (let i = 0; i < node.attributes.length; i++) {\n            let attribute = node.attributes[i];\n            let attributeName = attribute.name;\n\n            if (attributeName == \"Class\") {\n                continue;\n            }\n\n            switch (attributeName) {\n                case \"CssClass\":\n                    attributeName = \"class\";\n                    break;\n            }\n\n            this.instance.setAttribute(attributeName, attribute.value);\n        }\n\n        // super.create(node);\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/JavascriptElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ILayoutElement } from \"./ILayoutElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { LayoutManager } from \"../Managers/LayoutManager\";\nimport { StageController } from \"../Components/StageController\";\nimport { ImageElement, ImageElementAttributes } from \"../Components/Elements/Graphics/ImageElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class LayoutImageElement extends ImageElement implements ILayoutElement {\n    protected verticalAlign: string;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(texture?: PIXI.Texture) {\n        super(texture);\n        this.verticalAlign = LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP;\n        LayoutManager.addLayoutElement(this);\n    }\n\n    updateByNode(node: Element): ImageElement {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(LayoutImageElementAttributes.V_ALIGN)) {\n            this.verticalAlign = node.getAttribute(LayoutImageElementAttributes.V_ALIGN);\n        }\n\n        this.updatePosition();\n        return this;\n    }\n\n    onLayoutChange(isPortrait: boolean): void {\n        this.updatePosition();\n    }\n\n    updatePosition(): void {\n        this.updateVerticalPosition();\n    }\n\n    updateVerticalPosition(): void {\n        let y = 0;\n        let height = this.getBounds().height;\n        let screenHeight = StageController.Renderer.screen.height;\n\n        switch (this.verticalAlign) {\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP:\n                break;\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.CENTER:\n                if (screenHeight < height) {\n                    y = parseInt(NumberUtils.devide(screenHeight - height, 2));\n                }\n                break;\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.BOTTOM:\n                y = screenHeight - height;\n                break;\n        }\n\n        this.y = y;\n    }\n\n    clone(): LayoutImageElement {\n        let element: LayoutImageElement = new LayoutImageElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.anchor = this.anchor;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n\n        element.verticalAlign = this.verticalAlign;\n\n        if (this.texture != null) {\n            element.texture = this.texture;\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        } else if (this.maskGraphics != null) {\n        }\n\n        element.markAsCloned(); // must be called last before return!\n\n        return element;\n    }\n}\n\nexport const LayoutImageElementAttributes = {\n    V_ALIGN: \"VAlign\",\n    V_ALIGN_OPTIONS: {\n        TOP: \"top\",\n        CENTER: \"center\",\n        BOTTOM: \"bottom\",\n    },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutImageElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ILayoutElement } from \"./ILayoutElement\";\nimport { ShapeElement, ShapeElementAttributes } from \"../Components/Elements/Graphics/ShapeElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { LayoutManager } from \"../Managers/LayoutManager\";\nimport { StageController } from \"../Components/StageController\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class LayoutShapeElement extends ShapeElement implements ILayoutElement {\n    protected relativeWidth: number;\n\n    protected relativeHeight: number;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n        this.relativeWidth = -1;\n        this.relativeHeight = -1;\n        LayoutManager.addLayoutElement(this);\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\n            let width = node.getAttribute(ShapeElementAttributes.WIDTH);\n            this._width = parseInt(width);\n\n            this.relativeWidth = width.indexOf(\"%\") > -1 ? parseInt(width) : -1;\n            if (this.relativeWidth > -1) {\n                this._width = StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\n            }\n            this.redrawRect();\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\n            let height = node.getAttribute(ShapeElementAttributes.HEIGHT);\n            this._height = parseInt(height);\n\n            this.relativeHeight = height.indexOf(\"%\") > -1 ? parseInt(height) : -1;\n            if (this.relativeHeight > -1) {\n                this._height = StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\n            }\n            this.redrawRect();\n        }\n    }\n\n    private redrawRect(): void {\n        this.clear();\n        this.beginFill(this._color, this._fillAlpha);\n        this.lineStyle(this._lineWidth, this._lineColor);\n        this.drawRect(0, 0, this._width, this._height);\n        this.endFill();\n    }\n\n    onLayoutChange(isPortrait: boolean): void {\n        if (this.relativeWidth > -1) {\n            this._width = StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\n        }\n\n        if (this.relativeHeight > -1) {\n            this._height = StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\n        }\n\n        this.redrawRect();\n    }\n\n    clone(): LayoutShapeElement {\n        let element: LayoutShapeElement = new LayoutShapeElement();\n        element.create(this._nodeDefinition);\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.relativeWidth = this.relativeWidth;\n        element.relativeHeight = this.relativeHeight;\n\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutShapeElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ILayoutElement } from \"./ILayoutElement\";\nimport { LayoutManager } from \"../Managers/LayoutManager\";\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { SwitchStyle } from \"../Components/Elements/Styles/SwitchStyle\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { FrameTimerEventEmitter } from \"../Utils/FrameTimer\";\nimport { StageController } from \"../Components/StageController\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class LayoutSwitchElement extends SwitchElement implements ILayoutElement {\n    private baseStyle: SwitchStyle;\n\n    private portraitStyle: SwitchStyle;\n\n    private inPortraitMode: boolean;\n\n    private tweenProgress: Object;\n\n    private tempTimer: FrameTimerEventEmitter;\n\n    private tempNextCase: string;\n\n    private tempTimerData: string;\n\n    private size: string;\n\n    private sizeWidth: number;\n\n    private sizeHeight: number;\n\n    constructor() {\n        super();\n\n        this.inPortraitMode = false;\n        LayoutManager.addLayoutElement(this);\n    }\n\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (node.hasAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)) {\n            this.portraitStyle = <SwitchStyle>(\n                StyleManager.Styles[node.getAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)]\n            );\n        }\n\n        if (this.style != null) {\n            this.baseStyle = this.style;\n        }\n    }\n\n    updateByNode(node: Element) {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(\"Width\")) {\n            this.sizeWidth = parseInt(node.getAttribute(\"Width\"));\n            this.updateSize();\n        }\n\n        if (node.hasAttribute(\"Height\")) {\n            this.sizeHeight = parseInt(node.getAttribute(\"Height\"));\n            this.updateSize();\n        }\n\n        if (node.hasAttribute(\"Size\")) {\n            this.size = node.getAttribute(\"Size\");\n            this.updateSize();\n        }\n    }\n\n    protected updateSize(): void {\n        if (this.size != null) {\n            switch (this.size) {\n                case \"cover\":\n                    this.calculateCoverScale();\n                    break;\n            }\n        }\n    }\n\n    protected calculateCoverScale(): void {\n        if (this.sizeWidth > 0 && this.sizeHeight > 0) {\n            let screenWidth = StageController.Renderer.screen.width;\n            let screenHeight = StageController.Renderer.screen.height;\n\n            let screenWRatio = screenWidth / this.sizeWidth;\n            let screenHRatio = screenHeight / this.sizeHeight;\n\n            if (screenWRatio > screenHRatio) {\n                this.scale.set(screenWRatio);\n            } else {\n                this.scale.set(screenHRatio);\n            }\n        }\n    }\n\n    onLayoutChange(isPortrait: boolean): void {\n        this.updateSize();\n\n        //update layout only if orientation was changed\n        if (isPortrait == this.inPortraitMode) {\n            return;\n        }\n\n        let currentCase = this.clearCaseLayoutPrefix(this.getCurrentCase());\n        let style = isPortrait ? this.portraitStyle : this.baseStyle;\n\n        if (style != null) {\n            let caseType = LayoutManager.getSwitchPrefix() + currentCase;\n            this.case = \"\";\n            this.style = style;\n            this.storeData(caseType);\n            this.goToCase(caseType);\n            this.restoreData(caseType);\n\n            this.inPortraitMode = isPortrait;\n        }\n    }\n\n    private clearCaseLayoutPrefix(caseType: string): string {\n        if (!StringUtils.isNullOrEmpty(LayoutManager.getSwitchPrefix())) {\n            caseType = caseType.replace(LayoutManager.getPreviousSwitchPrefix(), \"\");\n        }\n\n        return caseType;\n    }\n\n    private storeData(caseType: string): void {\n        //store tween progress\n\n        // TweenMax.pauseAll(); //ToDo needed ?\n        this.tweenProgress = {};\n\n        let node = this.style.cases[caseType];\n        if (node != null) {\n            let next: Element = node.firstElementChild;\n\n            while (next != null) {\n                let elem = this.elements.childs[next.nodeName];\n\n                if (elem != null) {\n                    let tweensArray = Tweens.getRegisteredTweens(elem.uid);\n\n                    if (tweensArray != null && tweensArray.length > 0) {\n                        this.tweenProgress[elem.uid] = [];\n                        for (let i = 0; i < tweensArray.length; i++) {\n                            this.tweenProgress[elem.uid].push(tweensArray[\"tweens\"][i].progress());\n                        }\n                    }\n                }\n\n                next = next.nextElementSibling;\n            }\n        }\n\n        //store timer\n        this.tempTimer = this.timer;\n        this.timer = null;\n\n        //store nextCase\n        if (this.style.cases[caseType].hasAttribute(\"NextCase\")) {\n            this.tempNextCase = this.style.cases[caseType].getAttribute(\"NextCase\");\n            this.style.cases[caseType].removeAttribute(\"NextCase\");\n        }\n\n        //store timerData\n        if (this.style.cases[caseType].hasAttribute(\"Timer\")) {\n            this.tempTimerData = this.style.cases[caseType].getAttribute(\"Timer\");\n            this.style.cases[caseType].removeAttribute(\"Timer\");\n        }\n    }\n\n    private restoreData(caseType: string): void {\n        //restore tween progress\n\n        // TweenMax.pauseAll(); //ToDo needed ?\n        if (this.tweenProgress != null) {\n            for (let key in this.tweenProgress) {\n                let tweensArray = Tweens.getRegisteredTweens(key);\n\n                if (tweensArray != null && tweensArray.length > 0) {\n                    for (let i = 0; i < tweensArray.length; i++) {\n                        /*if (tweensArray['tweens'][i] == undefined || this.tweenProgress[key][i] == undefined) {\n                            debugger;\n                        }*/\n\n                        if (tweensArray[\"tweens\"][i] != null) {\n                            tweensArray[\"tweens\"][i].progress(this.tweenProgress[key][i]);\n                        }\n                    }\n                }\n            }\n\n            this.tweenProgress = null;\n        }\n\n        //restore timer\n        this.timer = this.tempTimer;\n        this.tempTimer = null;\n\n        //restore nextCase\n        if (this.tempNextCase != null) {\n            this.style.cases[caseType].setAttribute(\"NextCase\", this.tempNextCase);\n            this.tempNextCase = null;\n        }\n\n        //restore nodeTimer\n        if (this.tempTimerData != null) {\n            this.style.cases[caseType].setAttribute(\"Timer\", this.tempTimerData);\n            this.tempTimerData = null;\n        }\n    }\n\n    clone(): LayoutSwitchElement {\n        const element: LayoutSwitchElement = new LayoutSwitchElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element.name = this.name;\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.case = this.case;\n        element.baseStyle = this.baseStyle;\n        element.portraitStyle = this.portraitStyle;\n        element.inPortraitMode = this.inPortraitMode;\n\n        element.size = this.size;\n        element.sizeWidth = this.sizeWidth;\n        element.sizeHeight = this.sizeHeight;\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        } else if (this.maskGraphics != null) {\n            let elementMask = <ShapeElement>this.maskGraphics.clone();\n            elementMask.position.x = this.maskGraphics.position.x;\n            elementMask.position.y = this.maskGraphics.position.y;\n\n            element.maskGraphics = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nconst LayoutSwitchElementAttributes = {\n    PORTRAIT_STYLE: \"PortraitStyle\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutSwitchElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { ContainerStyle } from \"../Components/Elements/Styles/ContainerStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { Scaling } from \"../Utils/Scaling\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PortraitLayout extends ContainerElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private portraitProperties: { [id: string]: Element };\n\n    private landscapeProperties: { [id: string]: Element };\n\n    private inPortrait: boolean;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.portraitProperties = {};\n        this.landscapeProperties = {};\n        this.inPortrait = false;\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    create(node: Element): void {\n        if (node.hasAttribute(\"Style\")) {\n            // get style from StyleManager\n            this.style = <ContainerStyle>StyleManager.Styles[node.getAttribute(\"Style\")];\n            if (this.style != null) {\n                this.parsePortraitLayoutStyles(this.style.node);\n            }\n\n            node.removeAttribute(\"Style\");\n        }\n\n        super.create(node);\n    }\n\n    //******************************************************************************************************************\n    //  FUNCTIONS\n    //******************************************************************************************************************\n\n    public init(parent: ContainerElement): void {\n        const self = this;\n\n        this.parseLandscapeLayoutStyles(parent);\n        Scaling.Emitter.on(Scaling.EventResize, (isPortrait: boolean) => {\n            self.updateLayout(isPortrait, parent);\n        });\n\n        this.updateLayout(Scaling.isPortrait(), parent);\n    }\n\n    private updateLayout(isPortrait: boolean, parent: ContainerElement): void {\n        if (isPortrait && !this.inPortrait) {\n            this.inPortrait = true;\n\n            for (let key in this.portraitProperties) {\n                let element = <BaseElement>parent.childs[key];\n                this.updateContainer(\n                    this.portraitProperties[key].getAttribute(PortraitLayoutAttributes.MOVE_TO),\n                    element,\n                    parent,\n                    this.inPortrait,\n                );\n            }\n\n            for (let key in this.portraitProperties) {\n                let element = <BaseElement>parent.childs[key];\n                element.updateByNode(this.portraitProperties[key]);\n            }\n        } else if (!isPortrait && this.inPortrait) {\n            this.inPortrait = false;\n\n            for (let key in this.landscapeProperties) {\n                let element = <BaseElement>parent.childs[key];\n                element.updateByNode(this.landscapeProperties[key]);\n            }\n\n            for (let key in this.landscapeProperties) {\n                let element = <BaseElement>parent.childs[key];\n                this.updateContainer(\n                    this.landscapeProperties[key].getAttribute(PortraitLayoutAttributes.MOVE_TO),\n                    element,\n                    parent,\n                    this.inPortrait,\n                );\n            }\n        }\n    }\n\n    private parsePortraitLayoutStyles(node: Element): void {\n        if (node != null && node[\"children\"] != null) {\n            let children = <HTMLCollection>node[\"children\"];\n\n            for (let i = 0; i < children.length; i++) {\n                let child = <Element>children.item(i);\n\n                if (child != null) {\n                    let elementNode = document.createElement(child.nodeName);\n\n                    for (let j = 0; j < child.attributes.length; j++) {\n                        elementNode.setAttribute(child.attributes[j].name, child.attributes[j].value);\n                    }\n\n                    this.portraitProperties[child.nodeName] = elementNode;\n                }\n            }\n        }\n    }\n\n    private updateContainer(\n        containerId: string,\n        element: BaseElement,\n        parent: ContainerElement,\n        inPortrait: boolean,\n    ): void {\n        if (!StringUtils.isNullOrEmpty(containerId)) {\n            let container = parent.childs[containerId];\n\n            if (container != null) {\n                if (inPortrait) {\n                    container.addChild(element);\n                } else {\n                    let containerIndex = parent.getChildIndex(container);\n                    parent.addChildAt(element, containerIndex - 1);\n                }\n            }\n        }\n    }\n\n    private parseLandscapeLayoutStyles(parent: ContainerElement): void {\n        for (let key in this.portraitProperties) {\n            this.landscapeProperties[key] = <Element>this.portraitProperties[key].cloneNode(true);\n\n            let node = this.landscapeProperties[key];\n            let element = parent.childs[key];\n\n            if (node != null && element != null) {\n                for (let i = 0; i < node.attributes.length; i++) {\n                    switch (node.attributes[i].name) {\n                        case \"x\":\n                            node.attributes[i].value = element.x.toString();\n                            break;\n                        case \"y\":\n                            node.attributes[i].value = element.y.toString();\n                            break;\n                        case \"pivotx\":\n                            node.attributes[i].value = element.pivot.x.toString();\n                            break;\n                        case \"pivoty\":\n                            node.attributes[i].value = element.pivot.y.toString();\n                            break;\n                        case \"scale\":\n                            node.attributes[i].value = element.scale.x.toString();\n                            break;\n                        case \"scalex\":\n                            node.attributes[i].value = element.scale.x.toString();\n                            break;\n                        case \"scaley\":\n                            node.attributes[i].value = element.scale.y.toString();\n                            break;\n                        case \"visible\":\n                            node.attributes[i].value = element.visible.toString();\n                            break;\n                    }\n                }\n            }\n        }\n    }\n}\n\nconst PortraitLayoutAttributes = {\n    MOVE_TO: \"MoveTo\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PortraitLayout.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\n\n/**\n * WinAnimator uses paylines and symbols to create presentation of wins to user.\n * Also handle high wins animation for presentation special screens to user when win is bigger than some defined values.\n * @class WinAnimator\n * @extends ContainerElement\n */\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SceneHolderElement extends BaseElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private elementsHolder: Array<Object> = [];\n\n    private hasAdded: boolean;\n\n    private parentContainer: ContainerElement = null;\n\n    private blackList: Array<string>;\n\n    //******************************************************************************************************************\n    //  FUNCTIONS\n    //******************************************************************************************************************\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(HighWinSceneAttributes.USE_PARENT)) {\n            if (this.parentContainer) {\n                this.parentContainer.addChild(this);\n            }\n        }\n\n        this.blackList = [];\n        if (node.hasAttribute(HighWinSceneAttributes.BLACK_LIST)) {\n            this.blackList = ArrayUtils.stringArray(node.getAttribute(HighWinSceneAttributes.BLACK_LIST));\n        }\n\n        if (node.hasAttribute(HighWinSceneAttributes.ADD_CHILDS)) {\n            this.addChildsToElement();\n        }\n\n        if (node.hasAttribute(HighWinSceneAttributes.RETURN_CHILDS)) {\n            this.addChildsToOriginalParent();\n        }\n    }\n\n    private addChildsToElement(): void {\n        if (!this.hasAdded) {\n            for (let i = 0; i < this.elementsHolder.length; i++) {\n                let elem = this.elementsHolder[i];\n\n                if (elem != null) {\n                    if (this.blackList.indexOf(elem[\"element\"][\"name\"]) == -1) {\n                        this.addChild(elem[\"element\"]);\n                    }\n                }\n            }\n\n            this.hasAdded = true;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  STATIC\n    //******************************************************************************************************************\n\n    public addElement(elem: Object): void {\n        this.elementsHolder.push(elem);\n    }\n\n    public addChildsToOriginalParent(): void {\n        if (this.hasAdded) {\n            for (let i = 0; i < this.elementsHolder.length; i++) {\n                let elem = this.elementsHolder[i];\n\n                if (elem != null) {\n                    let origElement = <BaseElement>elem[\"parent\"];\n                    let element = <BaseElement>elem[\"element\"];\n\n                    origElement.addChildAt(element, elem[\"index\"]);\n                }\n            }\n\n            this.hasAdded = false;\n        }\n    }\n\n    public setHolderParent(elem: ContainerElement): void {\n        this.parentContainer = elem;\n    }\n}\n\nexport const HighWinSceneAttributes = {\n    ADD_CHILDS: \"AddChilds\",\n    BLACK_LIST: \"BlackList\",\n    RETURN_CHILDS: \"ReturnChilds\",\n    USE_PARENT: \"UseParent\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SceneHolderElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SoundElement extends BaseElement {\n    private soundName: string = null;\n\n    private _loop: boolean = false;\n    private _reset: boolean = false;\n\n    private _playing: boolean = false;\n    private _scheduledPlay: boolean = false;\n    private _scheduledStop: boolean = false;\n\n    private _fadeInTime: number = 0;\n    private _fadeOutTime: number = 0;\n\n    private _startTimer: FrameTimerEventEmitter;\n    private _stopTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n        this._startTimer = CreateFrameTimer(\"SoundElementStart\");\n        this._stopTimer = CreateFrameTimer(\"SoundElementStop\");\n    }\n\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(SoundElementAttributes.DEBUG) &&\n                node.getAttribute(SoundElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.LOOP)) {\n            // this._loop = StringUtils.parseBoolean(node.getAttribute(SoundElementAttributes.LOOP));\n\n            let value: string = node.getAttribute(SoundElementAttributes.LOOP);\n            let intValue: number = parseInt(value);\n            this._loop = true;\n            if (value === \"true\") {\n                this.schedulePlay(0);\n            } else if (!isNaN(intValue)) {\n                this.schedulePlay(intValue);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.RESET)) {\n            this._reset = StringUtils.parseBoolean(node.getAttribute(SoundElementAttributes.RESET));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.FADE_IN)) {\n            this._fadeInTime = parseInt(node.getAttribute(SoundElementAttributes.FADE_IN));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.FADE_OUT)) {\n            this._fadeOutTime = parseInt(node.getAttribute(SoundElementAttributes.FADE_OUT));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.NAME)) {\n            let newName: string = node.getAttribute(SoundElementAttributes.NAME);\n            if (this.soundName != newName) {\n                this.stop();\n                this.soundName = node.getAttribute(SoundElementAttributes.NAME);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.STOP)) {\n            let value: string = node.getAttribute(SoundElementAttributes.STOP);\n            let intValue: number = parseInt(value);\n            if (value === \"true\") {\n                this.scheduleStop(0);\n            } else if (!isNaN(intValue)) {\n                this.scheduleStop(intValue);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.PLAY)) {\n            let value: string = node.getAttribute(SoundElementAttributes.PLAY);\n            let intValue: number = parseInt(value);\n            if (value === \"true\") {\n                this.schedulePlay(0);\n            } else if (!isNaN(intValue)) {\n                this.schedulePlay(intValue);\n            }\n        }\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {}\n\n    public clone(): any {\n        let element = new SoundElement();\n        element.soundName = this.soundName;\n        element._fadeInTime = this._fadeInTime;\n        element._fadeOutTime = this._fadeOutTime;\n        element._loop = this._loop;\n        element._reset = this._reset;\n        element._playing = this._playing;\n        element._scheduledPlay = this._scheduledPlay;\n        element._scheduledStop = this._scheduledStop;\n\n        element.markAsCloned();\n        return element;\n    }\n\n    private schedulePlay(delay: number = 0): void {\n        this._startTimer.stop();\n        this._startTimer.removeAllListeners();\n        if (delay > 0) {\n            this._scheduledPlay = true;\n            this._startTimer.once(FrameTimerEvents.Complete, this.play.bind(this));\n            this._startTimer.start(delay);\n        } else {\n            this.play();\n        }\n    }\n\n    private scheduleStop(delay: number = 0): void {\n        this._stopTimer.stop();\n        this._stopTimer.removeAllListeners();\n        if (delay > 0) {\n            this._scheduledStop = true;\n            this._stopTimer.once(FrameTimerEvents.Complete, this.stop.bind(this));\n            this._stopTimer.start(delay);\n        } else {\n            this.stop();\n        }\n    }\n\n    private play(): void {\n        if (this.soundName == null) {\n            return;\n        }\n        if (PlayList.isPlaying(this.soundName)) {\n            if (this._reset) {\n                this.stop();\n            } else {\n                return;\n            }\n        }\n        this._startTimer.stop();\n        this._startTimer.removeAllListeners();\n        this._playing = true;\n        this._scheduledPlay = false;\n        if (this._loop) {\n            PlayList.loop(this.soundName, this._fadeInTime, this._reset);\n        } else {\n            PlayList.play(this.soundName, this._fadeInTime, this._reset);\n        }\n    }\n\n    private stop(): void {\n        if (this.soundName == null) {\n            return;\n        }\n\n        this._stopTimer.stop();\n        this._stopTimer.removeAllListeners();\n        PlayList.stop(this.soundName, this._fadeOutTime);\n        if (this._fadeOutTime) {\n            this._stopTimer.once(FrameTimerEvents.Complete, this.reset.bind(this));\n            this._stopTimer.start(this._fadeOutTime);\n        } else {\n            this.reset();\n        }\n    }\n\n    private reset(): void {\n        this._startTimer.stop();\n        this._startTimer.removeAllListeners();\n        this._stopTimer.stop();\n        this._stopTimer.removeAllListeners();\n        this._playing = false;\n        this._scheduledPlay = false;\n        this._scheduledStop = false;\n        if (this.soundName && PlayList.isPlaying(this.soundName)) {\n            PlayList.stop(this.soundName);\n        }\n    }\n}\n\nexport const SoundElementAttributes = {\n    DEBUG: \"Debug\",\n\n    NAME: \"Name\",\n    LOOP: \"Loop\",\n    RESET: \"Reset\",\n    FADE_IN: \"FadeIn\",\n    FADE_OUT: \"FadeOut\",\n    PLAY: \"Play\",\n    STOP: \"Stop\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SoundElement.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\nimport { Payline } from \"./Payline\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\n\n/**\n * Paylines class is holder for all paylines.\n * Paylines define behaviour of paylines on screen.\n * @class Paylines\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Paylines extends ContainerElement {\n    paylineDefinition: string;\n\n    private _paylineIDs: Array<number>;\n    private _paylines: Array<Payline>;\n    private _specialContainer: ContainerElement;\n\n    constructor() {\n        super();\n\n        this._paylines = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        /*\n         * Name of config for paylines.\n         * @property Configs\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Configs\")) {\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\n            for (var i: number = 0; i < configs.length; i++) {\n                var config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n\n        if (this.childs != null) {\n            for (var key in this.childs) {\n                if (this.childs[key] instanceof Payline) {\n                    this._paylines.push(this.childs[key]);\n                }\n            }\n\n            this.children.sort((a: any, b: any) => {\n                if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\n                    a.zIndex = a.zIndex || 0;\n                    b.zIndex = b.zIndex || 0;\n\n                    return a.zIndex - b.zIndex;\n                }\n\n                return 0;\n            });\n        }\n    }\n\n    setSpecialContainer(container: ContainerElement): void {\n        this._specialContainer = container;\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        /*\n         * PaylineIDs defines ids of payline used for game.\n         * @property PaylineIDs\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineIDs\")) {\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\n        }\n\n        /*\n         * Initialize paylines definitions for game.\n         * @property PaylineDefinition\n         * @type String\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineDefinition\")) {\n            this.paylineDefinition = node.getAttribute(\"PaylineDefinition\");\n            PaylinesDefinitions.initializePaylineDefinitions(node.getAttribute(\"PaylineDefinition\"));\n        }\n    }\n\n    showPaylinesLabel(): void {}\n\n    /**\n     * Set winning payline from response to case WIN.\n     * @method goToWin\n     * @param id number\n     * @return void\n     */\n    goToWin(id: number): void {\n        if (this._paylines[id - 1] != null) {\n            this.addChild(this._paylines[id - 1]);\n            this._paylines[id - 1].goToCase(Payline.CaseWin);\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no payline with id: \" + (id - 1));\n            }\n        }\n    }\n\n    /**\n     * Reset all paylines to case NORMAL.\n     * @method reset\n     * @return void\n     */\n    reset(): void {\n        for (var i: number = 0; i < this._paylines.length; i++) {\n            if (this._specialContainer != null) {\n                this._specialContainer.addChild(this._paylines[i]);\n            }\n            this._paylines[i].goToCase(Payline.CaseNormal);\n        }\n    }\n\n    getPaylines(): Array<Payline> {\n        return this._paylines;\n    }\n\n    //******************************************************************************************************************\n    //  NEW USAGE\n    //******************************************************************************************************************\n\n    public goToCase(caseType: string): void;\n    public goToCase(caseType: string, id: number): void;\n\n    public goToCase(caseType: string, id?: number): void {\n        if (id) {\n            if (this._paylines[id - 1] != null) {\n                if (caseType === Payline.CaseWin) {\n                    this.addChild(this._paylines[id - 1]);\n                } else {\n                    if (this._specialContainer != null) {\n                        this._specialContainer.addChild(this._paylines[id - 1]);\n                    }\n                }\n\n                this._paylines[id - 1].goToCase(caseType);\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no payline with id: \" + (id - 1));\n                }\n            }\n        } else {\n            for (let i = 0; i < this._paylines.length; i++) {\n                if (caseType === Payline.CaseWin) {\n                    this.addChild(this._paylines[i]);\n                } else {\n                    if (this._specialContainer != null) {\n                        this._specialContainer.addChild(this._paylines[i]);\n                    }\n                }\n                this._paylines[i].goToCase(caseType);\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Paylines.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { Payline } from \"./Payline\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\n\n/**\n * Paylines class is holder for all paylines.\n * Paylines define behaviour of paylines on screen.\n * @class Paylines\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PaylinesSelector extends ContainerElement {\n    private _paylineIDs: Array<number>;\n    private _paylines: Array<Payline>;\n\n    constructor() {\n        super();\n\n        this._paylines = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        /*\n         * Name of config for paylines.\n         * @property Configs\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Configs\")) {\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\n            for (var i: number = 0; i < configs.length; i++) {\n                var config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n\n        if (this.childs != null) {\n            for (var key in this.childs) {\n                if (this.childs[key] instanceof Payline) {\n                    this._paylines.push(this.childs[key]);\n                }\n            }\n        }\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        /*\n         * PaylineIDs defines ids of payline used for game.\n         * @property PaylineIDs\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineIDs\")) {\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\n        }\n    }\n\n    /**\n     * Reset all paylines to case NORMAL.\n     * @method reset\n     * @return void\n     */\n    reset(): void {\n        this.visible = false;\n    }\n\n    select(): void {\n        this.visible = true;\n        for (var i: number = 0; i < this._paylines.length; i++) {\n            this._paylines[i].goToCase(Payline.CaseSelect);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesSelector.ts\n **/","import { engineComponent, Logger } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { Symbol } from \"./Symbol\";\nimport { AnimationStyle } from \"../Components/Elements/Styles/AnimationStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { StageController } from \"../Components/StageController\";\n\n/**\n * The symbols class is holder for game symbols. Class holds also textures for rotation.\n * @class Symbols\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Symbols extends ContainerElement {\n    // instances for cloning in game\n    public symbols: Array<Symbol>;\n    // symbols bitmap data for reel rotation\n    public symbolsData: Array<Object>;\n\n    constructor() {\n        super();\n\n        this.symbols = [];\n        this.symbolsData = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        let configs: Array<string>;\n\n        if (node.hasAttribute(SymbolsAttributes.CONFIGS)) {\n            configs = node.getAttribute(SymbolsAttributes.CONFIGS).split(\";\");\n        }\n\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof Symbol) {\n                    if (configs != null) {\n                        for (let i: number = 0; i < configs.length; i++) {\n                            this.childs[key].configurate(Configuration.Configurations[configs[i]]);\n                        }\n                    }\n                    this.symbols.push(this.childs[key]);\n                }\n            }\n        }\n\n        if (this.symbols != null) {\n            this.createSymbolsData();\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n\n        this.removeChildren();\n\n        this.visible = false;\n\n        this.createObjectPool();\n    }\n\n    /**\n     * Create symbols bitmap data for reel rotation.\n     * Store normal case of symbol for static symbols and blur case for rotation.\n     * @method createSymbolsData\n     * @retutn void\n     */\n    createSymbolsData(): void {\n        if (DEBUG) {\n            this.log(\"createSymbolsData\");\n        }\n\n        for (let i: number = 1; i <= this.symbols.length; i++) {\n            if (this.symbols[i - 1].hasElements) {\n                let caseElement: Element;\n                let rotationBitmap: PIXI.Texture = null;\n                let blurBitmap: PIXI.Texture = null;\n\n                // create data from rotation but if symbol doesnt have rotation try blur or normal\n                if (this.symbols[i - 1].hasCase(Symbol.CaseRotation)) {\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseRotation);\n                } else {\n                    if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\n                        caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\n                    } else {\n                        if (this.symbols[i - 1].hasCase(Symbol.CaseNormal)) {\n                            caseElement = this.symbols[i - 1].getCase(Symbol.CaseNormal);\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"ERROR Symbol has no CaseRotation, CaseBlur nor CaseNormal. Symbol ID: \" + i);\n                            }\n                        }\n                    }\n                }\n\n                rotationBitmap = this._getBitmapByCaseElement(caseElement);\n                if (rotationBitmap == null) {\n                    if (DEBUG) {\n                        this.log(\n                            \"ERROR no style, animation or image of symbol with ID: \" +\n                                i +\n                                \" case: \" +\n                                Symbol.CaseRotation,\n                        );\n                    }\n                }\n\n                if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\n                }\n\n                blurBitmap = this._getBitmapByCaseElement(caseElement);\n                if (blurBitmap == null) {\n                    if (DEBUG) {\n                        this.log(\n                            \"ERROR no style, animation or image of symbol with ID: \" + i + \" case: \" + Symbol.CaseBlur,\n                        );\n                    }\n                }\n\n                let object: Object = {};\n\n                if (rotationBitmap != null) {\n                    object[Symbol.CaseRotation] = rotationBitmap;\n                }\n\n                if (blurBitmap != null) {\n                    object[Symbol.CaseBlur] = blurBitmap;\n                } else {\n                    if (rotationBitmap != null) {\n                        object[Symbol.CaseBlur] = rotationBitmap;\n                    }\n                }\n\n                if (object != null) {\n                    object[\"zIndex\"] = this.symbols[i - 1].zIndex;\n                    this.symbolsData.push(object);\n                }\n            }\n        }\n    }\n\n    /**\n     * Gef first child of case element.\n     *\n     * @param caseElement\n     * @returns {PIXI.Texture}\n     * @private\n     */\n    private _getBitmapByCaseElement(caseElement: Element): PIXI.Texture {\n        if (caseElement != null) {\n            if (caseElement.firstElementChild.hasAttribute(\"Style\")) {\n                if (DEBUG) {\n                    /* todo Add check for parentNode existence */\n                    this.log(\n                        \"WARNING Please use Animation attribute! Node: \" +\n                            caseElement.parentNode.parentNode.nodeName +\n                            \", Case: \" +\n                            caseElement.getAttribute(\"Case\"),\n                    );\n                }\n\n                if (<AnimationStyle>StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")] != null) {\n                    if (\n                        <AnimationStyle>(\n                            StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\n                        ) != null\n                    ) {\n                        return StageController.getTextureByResourceId(\n                            <AnimationStyle>(\n                                StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\n                            ) + \"0000\",\n                        );\n                    }\n                }\n            } else if (caseElement.firstElementChild.hasAttribute(\"FromFrame\")) {\n                if (caseElement.firstElementChild.getAttribute(\"FromFrame\") != null) {\n                    return StageController.getTextureByResourceId(\n                        caseElement.firstElementChild.getAttribute(\"FromFrame\"),\n                    );\n                }\n            } else if (caseElement.firstElementChild.hasAttribute(\"Image\")) {\n                return StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"Image\"));\n            } else {\n                return null;\n            }\n        }\n        return null;\n    }\n\n    //******************************************************************************************************************\n    //  OBJECT POOL\n    //******************************************************************************************************************\n\n    protected objectPool: Array<Array<Symbol>>;\n\n    protected objectContainer: ContainerElement;\n\n    /**\n     * Create object pool of symbols length.\n     */\n    protected createObjectPool(): void {\n        this.objectPool = [];\n\n        for (let i = 0; i < this.symbols.length; i++) {\n            this.objectPool.push([]);\n        }\n\n        this.objectContainer = new ContainerElement();\n        this.objectContainer.name = \"ObjectContainer\";\n    }\n\n    /**\n     * Get symbol from pool or clone new and go to case..\n     * @param {number} id\n     * @param {string} caseType\n     * @returns {Symbol}\n     */\n    public getSymbol(id: number, caseType: string): Symbol {\n        let symbol: Symbol;\n\n        if (this.objectPool[id].length === 0) {\n            symbol = this.symbols[id].clone();\n            symbol.name = \"Symbol\" + id;\n            symbol.id = id;\n        } else {\n            symbol = this.objectPool[id].pop();\n        }\n\n        symbol.switchAmounts();\n\n        symbol.visible = true;\n        symbol.alpha = 1;\n        symbol.goToCase(caseType);\n\n        return symbol;\n    }\n\n    /**\n     * Return symbol into pool.\n     * @param {Symbol} symbol\n     */\n    public returnSymbol(symbol: Symbol): void {\n        symbol.visible = false;\n        symbol.goToCase(Symbol.CaseEmpty);\n        symbol.resetAmount();\n\n        this.objectContainer.addChild(symbol);\n\n        this.objectPool[symbol.id].push(symbol);\n    }\n}\n\nconst SymbolsAttributes = {\n    /**\n     * Name of config for symbol instance.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbols.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlBetSelectorContainerElement extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.CoinCountContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (\n            AppContext.gameConfiguration.UseCoins &&\n            BetManager.Coins != null &&\n            BetManager.CoinSize != null &&\n            this._popup != null\n        ) {\n            this._values = [];\n            this._popup.innerHTML = \"\";\n            let i: number = 0;\n            for (let key in BetManager.Coins) {\n                if (BetManager.CoinSize === parseFloat(key)) {\n                    for (let j: number = 0; j < BetManager.Coins[key].length; j++) {\n                        BetManager.Coins[key].sort(BetManager.sortNumber);\n                        BetManager.Coins[key].reverse();\n\n                        let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        popupItem.classList.add(\"popupItem\");\n                        popupItem.onclick = this.onValueClick.bind(this);\n                        popupItem.setAttribute(\"CoinCount\", BetManager.Coins[key][j].toString());\n                        if (BetManager.CoinCount != null && BetManager.CoinCount == BetManager.Coins[key][j]) {\n                            popupItem.classList.add(\"_active\");\n                        }\n                        let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        popupItemValue.classList.add(\"popupValue\");\n                        popupItemValue.innerText = BetManager.Coins[key][j].toString();\n\n                        popupItem.appendChild(popupItemValue);\n                        this._values.push(popupItem);\n                        this._popup.appendChild(popupItem);\n                        i++;\n                    }\n                }\n            }\n\n            this._height = 60 * i + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"CoinCount\") &&\n            BetManager.CoinCount != null\n        ) {\n            let coinCount: number = parseFloat(e.currentTarget.getAttribute(\"CoinCount\"));\n            if (coinCount === BetManager.CoinCount) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"CoinCount\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === coinCount) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionCoinCountSelectValue + coinCount);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    changeValue(): void {\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (this._values[i].hasAttribute(\"CoinCount\")) {\n                    if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === BetManager.CoinCount) {\n                        this._values[i].classList.add(\"_active\");\n                    } else {\n                        this._values[i].classList.remove(\"_active\");\n                    }\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\nimport { Languages } from \"../../Utils/Languages\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlBetSelectorContainerElement2 extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.BetContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (!AppContext.gameConfiguration.UseCoins && BetManager.TotalBets != null && this._popup != null) {\n            this._values = [];\n            this._popup.innerHTML = \"\";\n            let count: number = 0;\n            for (let i: number = BetManager.TotalBets.length - 1; i >= 0; i--) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"Bet\", BetManager.TotalBets[i].toString());\n                if (BetManager.Bet != null && BetManager.Bet == BetManager.TotalBets[i]) {\n                    popupItem.classList.add(\"_active\");\n                }\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n\n                popupItemValue.innerText = Languages.formatText(\n                    Languages.FormatMoney,\n                    BetManager.TotalBets[i].toString(),\n                );\n\n                popupItem.appendChild(popupItemValue);\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n                count++;\n            }\n\n            this._height = 60 * count + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Bet\") && BetManager.Bet != null) {\n            let bet: number = parseFloat(e.currentTarget.getAttribute(\"Bet\"));\n            if (bet === BetManager.Bet) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"Bet\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"Bet\")) === bet) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionBetSelectValue + bet);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    changeValue(): void {\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (this._values[i].hasAttribute(\"Bet\")) {\n                    if (parseFloat(this._values[i].getAttribute(\"Bet\")) === BetManager.Bet) {\n                        this._values[i].classList.add(\"_active\");\n                    } else {\n                        this._values[i].classList.remove(\"_active\");\n                    }\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement2.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlDenomContainerElement extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.DenomContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (\n            this._values == null &&\n            AppContext.gameConfiguration.UseCoins &&\n            BetManager.Coins != null &&\n            this._popup != null\n        ) {\n            this._values = [];\n            let i: number = 0;\n            let coinSizes: Array<string> = [];\n            for (let key in BetManager.Coins) {\n                coinSizes.push(key);\n            }\n            coinSizes.sort(BetManager.sortNumber);\n            coinSizes.reverse();\n\n            for (i = 0; i < coinSizes.length; i++) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"CoinSize\", coinSizes[i]);\n                if (BetManager.CoinSize != null && BetManager.CoinSize == parseFloat(coinSizes[i])) {\n                    popupItem.classList.add(\"_active\");\n                }\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n                popupItemValue.innerText = coinSizes[i];\n\n                popupItem.appendChild(popupItemValue);\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n            }\n\n            this._height = 60 * i + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"CoinSize\") &&\n            BetManager.CoinSize != null\n        ) {\n            let coinSize: number = parseFloat(e.currentTarget.getAttribute(\"CoinSize\"));\n            if (coinSize === BetManager.CoinSize) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"CoinSize\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"CoinSize\")) === coinSize) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionDenomSelectValue + coinSize);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlDenomContainerElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlHideButtonElement extends HtmlButtonElement {\n    static Buttons: { [hideClass: string]: Array<HtmlHideButtonElement> } = {};\n\n    private _hideClass: string = \"\";\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        HtmlController.HideButtons.push(this);\n\n        if (node.hasAttribute(\"HideClass\")) {\n            this._hideClass = node.getAttribute(\"HideClass\");\n            if (HtmlHideButtonElement.Buttons[this._hideClass] == null) {\n                HtmlHideButtonElement.Buttons[this._hideClass] = [];\n            }\n            HtmlHideButtonElement.Buttons[this._hideClass].push(this);\n        }\n\n        if (this.instance != null) {\n            if (!AppContext.gameConfiguration.HideAmountsEnabled) {\n                this.instance.classList.add(\"_hidden\");\n            }\n            this.instance.onclick = this.toggle.bind(this);\n        }\n    }\n\n    public unHide(credit: boolean = false): void {\n        if (\n            this.instance != null &&\n            this._hideClass != \"\" &&\n            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))\n        ) {\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\n            let display: string = \"block\";\n\n            if (\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\n            ) {\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")) {\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\n                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (var i: number = 0; i < elements.length; i++) {\n                var element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.style.display = display;\n                }\n            }\n\n            if (this._hideClass === \"_hideCredit\") {\n                if (display === \"block\") {\n                    AppContext.current.setHideAmounts(false);\n                } else {\n                    AppContext.current.setHideAmounts(true);\n                }\n            }\n        }\n    }\n\n    public hide(credit: boolean = false): void {\n        if (\n            this.instance != null &&\n            this._hideClass != \"\" &&\n            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))\n        ) {\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\n            let display: string = \"none\";\n\n            if (\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\n            ) {\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\n                            if (\n                                !HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")\n                            ) {\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (var i: number = 0; i < elements.length; i++) {\n                var element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.style.display = display;\n                }\n            }\n\n            if (this._hideClass === \"_hideCredit\") {\n                if (display === \"block\") {\n                    AppContext.current.setHideAmounts(false);\n                } else {\n                    AppContext.current.setHideAmounts(true);\n                }\n            }\n        }\n    }\n\n    public toggle(): void {\n        if (this.instance != null && this._hideClass != \"\") {\n            PlayList.play(\"SND_Click\");\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\n            let display: string = \"none\";\n\n            if (\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\n            ) {\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\n                            if (\n                                !HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")\n                            ) {\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\n                            }\n                        } else {\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\n                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\n                                display = \"block\";\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (var i: number = 0; i < elements.length; i++) {\n                var element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.style.display = display;\n                }\n            }\n\n            if (this._hideClass === \"_hideCredit\") {\n                if (display === \"block\") {\n                    AppContext.current.setHideAmounts(false);\n                } else {\n                    AppContext.current.setHideAmounts(true);\n                }\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlHideButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { Scaling } from \"../../Utils/Scaling\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n/**\n * HtmlButtonElement id <div /> element with behaviour of button.\n * Can have also text inside of div.\n * Example:\n *   <div Class=\"HtmlButtonElement\">Text</div>\n *\n * @class HtmlButtonElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlButtonElement extends HtmlContainerElement {\n    static Click: string = \"click\";\n    static TouchStart: string = \"touchstart\";\n    static TouchEnd: string = \"touchend\";\n    static MouseOver: string = \"mouseover\";\n\n    action: string;\n    uiaction: Array<string>;\n\n    private touchLock: boolean;\n    private touchLockTimer: number;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /*\n         * UIAction will handle click on this element and run uiaction on controller.\n         * @property UIAction\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIAction\")) {\n            this.uiaction = node.getAttribute(\"UIAction\").split(\";\");\n            if (!node.hasAttribute(\"Test\")) {\n                this.setTestAttributes(node.getAttribute(\"UIAction\"));\n            } else {\n                this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n            }\n            for (var i: number = 0; i < this.uiaction.length; i++) {\n                HtmlController.registerUiActionElement(this.uiaction[i], this);\n            }\n        }\n\n        /*\n         * Action will handle click on this element and run action on controller.\n         * @property Action\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Action\")) {\n            this.action = node.getAttribute(\"Action\");\n            this.setTestAttributes(node.getAttribute(\"Action\"));\n\n            HtmlController.registerActionElement(node.getAttribute(\"Action\"), this);\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        if (this.action != null || this.uiaction != null) {\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\n            if (this.action != null) {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n\n            //sticky hover fix\n            this.instance.addEventListener(HtmlButtonElement.TouchStart, this.onTouchStart.bind(this));\n            this.instance.addEventListener(HtmlButtonElement.TouchEnd, this.onTouchEnd.bind(this));\n\n            this.instance.addEventListener(\"gesturestart\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"gesturechange\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"gestureend\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"touchmove\", Scaling.preventPropagation);\n\n            if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                this.instance.addEventListener(HtmlButtonElement.MouseOver, this.onMouseOver.bind(this));\n            }\n        }\n    }\n\n    setTestAttributes(action: string): void {\n        this.instance.dataset[\"test\"] = this.renameTestAttributeValue(action);\n    }\n    renameTestAttributeValue(action: string): string {\n        let isGamblePortraitButton: boolean =\n            action.indexOf(\"GAMBLE_\") != -1 && this.instance.classList.contains(\"btnGamble\");\n        action = isGamblePortraitButton ? `${action}_PORTRAIT` : action;\n        switch (action) {\n            case \"QUICKSPIN_DIALOG_OFF\":\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"QUICKSPIN_DIALOG_CLOSE\";\n                return \"QUICKSPIN_DIALOG_NO\";\n            case \"QUICKSPIN_TOGGLE;QUICKSPIN_DIALOG_OFF\":\n                return \"QUICKSPIN_DIALOG_YES\";\n            case \"SETTINGS_OFF\":\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"SETTINGS_CLOSE\";\n                if (\n                    this.instance.classList.contains(\"dialogBtn\") ||\n                    this.instance.classList.contains(\"settingsPageBtn\")\n                )\n                    return \"SETTINGS_OK\";\n                return \"SETTINGS_BACK\";\n            case \"QUICKSPIN_TOGGLE\":\n                return \"SETTINGS_TOGGLE\";\n            case \"EMPTY\":\n                return \"SIMILAR_GAMES_EXIT\";\n            case \"EXIT2\":\n                return \"EXIT_GAME\";\n            case \"EXIT\":\n                return \"HOME\";\n            case \"HELP_OFF\":\n                if (this.instance.classList.contains(\"closeBtn\")) return \"HELP_CLOSE\";\n                return \"HELP_BACK\";\n            case \"PAYTABLE_OFF\":\n                if (this.instance.classList.contains(\"closeBtn\")) return \"PAYTABLE_CLOSE\";\n                return \"PAYTABLE_BACK\";\n            case \"SETTINGS_ON\":\n                return \"SETTINGS\";\n            case \"HELP_ON\":\n                return \"HELP\";\n            case \"PAYTABLE_ON\":\n                return \"PAYTABLE\";\n            default:\n                return action;\n        }\n    }\n\n    registerEvents(): void {\n        if (this.action != null || this.uiaction != null) {\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\n            if (this.action != null) {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    /**\n     * Handler for click event.\n     * Dispatch action for HtmlController.\n     * @method onClick\n     * @return void\n     */\n    onClick(e?: Event): void {\n        if (DEBUG) {\n            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\n        }\n\n        if (this.instance != null && !this.instance.classList.contains(HtmlController.DisabledClass)) {\n            if (e && !e.isTrusted && AppContext.gameConfiguration.DisableUntrustedClicks) {\n                //due to BUG 2225\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                    this.log(`Untrusted action: ${this.action}, ui: ${this.action}`);\n                    return;\n                }\n            }\n            if (e && e.isTrusted) {\n                DataManager.addTrustedUserAction(this.action);\n            }\n            if (this.action != null) {\n                HtmlController.dispatchAction(this.action);\n            }\n\n            if (this.uiaction != null) {\n                for (var i: number = 0; i < this.uiaction.length; i++) {\n                    HtmlController.dispatchUiAction(this.uiaction[i]);\n                }\n            }\n        }\n    }\n\n    onTouchStart(): void {\n        clearTimeout(this.touchLockTimer);\n        this.touchLock = true;\n\n        if (this.instance != null && !this.instance.classList.contains(\"noHover\")) {\n            this.instance.classList.add(\"noHover\");\n        }\n    }\n\n    onTouchEnd(): void {\n        this.touchLockTimer = setTimeout(() => {\n            this.touchLock = false;\n        }, 20);\n    }\n\n    onMouseOver(): void {\n        if (this.instance != null && this.instance.classList.contains(\"noHover\") && !this.touchLock) {\n            this.instance.classList.remove(\"noHover\");\n        }\n    }\n\n    /**\n     * Enable / disable button.\n     * @method changeState\n     * @param value boolean\n     * @return void\n     */\n    changeState(value: boolean): void {\n        if (this.instance != null) {\n            if (value) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n            } else {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlButtonElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlLanuageContainerElement extends HtmlContainerElement {\n    private _flags: Object = {};\n    private _values: Object = {};\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.addValues();\n    }\n\n    addValues(): void {\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\n        if (this.instance != null && languages != null) {\n            for (let i: number = 0; i < languages.length; i++) {\n                let flag: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                flag.classList.add(\"flag\");\n                flag.classList.add(languages[i]);\n                flag.style.display = \"none\";\n                flag.setAttribute(\"Lng\", languages[i]);\n                flag.onclick = this.onValueClick.bind(this);\n                let value: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                value.classList.add(\"value\");\n                value.style.display = \"none\";\n                value.setAttribute(\"Lng\", languages[i]);\n                //value.innerText = languages[i].toUpperCase();\n                value.onclick = this.onValueClick.bind(this);\n\n                if (\n                    AppContext.current.getCurrentLanguage() != null &&\n                    languages[i] == AppContext.current.getCurrentLanguage()\n                ) {\n                    flag.style.display = \"block\";\n                    value.style.display = \"block\";\n                }\n\n                this._flags[languages[i]] = flag;\n                this._values[languages[i]] = value;\n                this.instance.appendChild(flag);\n                this.instance.appendChild(value);\n            }\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Lng\")) {\n            PlayList.play(\"SND_Click\");\n            let lang: string = e.currentTarget.getAttribute(\"Lng\");\n\n            if (this._flags != null) {\n                for (let key in this._flags) {\n                    this._flags[key].style.display = \"none\";\n                }\n            }\n\n            if (this._values != null) {\n                for (let key in this._values) {\n                    this._values[key].style.display = \"none\";\n                }\n            }\n            HtmlController.dispatchUiAction(\"\");\n            this.changeLanguage();\n        }\n    }\n\n    changeLanguage(): void {\n        let actual: string = AppContext.current.getCurrentLanguage();\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\n        let next: string = \"\";\n\n        if (actual != null && languages != null) {\n            let index: number = 0;\n            for (let i: number = 0; i < languages.length; i++) {\n                if (languages[i] === actual) {\n                    index = i;\n                }\n            }\n\n            if (languages[index + 1] != null) {\n                next = languages[index + 1];\n            } else {\n                next = languages[0];\n            }\n        }\n\n        if (this._flags[next] != null) {\n            this._flags[next].style.display = \"block\";\n        }\n        if (this._values[next] != null) {\n            this._values[next].style.display = \"block\";\n        }\n        AppContext.current.setLanguage(next);\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlLanguageContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlSoundContainerElement extends HtmlContainerElement {\n    // private _levels: Array<string> = ['0%', '25%', '50%', '100%'];\n    private _levels: Array<string> = [\"\", \"\", \"\", \"\"];\n    private _levelsClasses: Array<string> = [\"_off\", \"_on1\", \"_on2\", \"_on3\"];\n    private _index: number = 3;\n\n    private _popup: HTMLDivElement;\n    private _backgroundSound: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _soundButton: HTMLDivElement;\n\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        HtmlController.SoundContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._soundButton = <HTMLDivElement>document.getElementById(\"soundButton\");\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupSmall\");\n\n        if (AppContext.current.isBackgroundMusicEnabled) {\n            this._backgroundSound = <HTMLDivElement>document.createElement(\"div\");\n            this._backgroundSound.classList.add(\"popupItem\");\n            let backgroundSoundChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n            backgroundSoundChild.classList.add(\"popupValue\");\n            backgroundSoundChild.classList.add(\"bgSound\");\n            if (AppContext.current.getBackgroundMusic()) {\n                backgroundSoundChild.classList.add(\"_on\");\n            } else {\n                backgroundSoundChild.classList.add(\"_off\");\n                DataManager.BackSoundsPlayingFromGame = false;\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\n            }\n            backgroundSoundChild.onclick = this.onBackgroundClick.bind(this);\n            this._backgroundSound.appendChild(backgroundSoundChild);\n        }\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n            if (this._backgroundSound != null) {\n                this._popup.appendChild(this._backgroundSound);\n            }\n            if (AppContext.current.isBackgroundMusicEnabled) {\n                this._popup.parentElement.classList.add(\"bgOn\");\n            }\n        }\n\n        this.addValues();\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (this._values == null && this._popup != null) {\n            this._values = [];\n\n            for (let i: number = 0; i < this._levels.length; i++) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"Level\", i.toString());\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n                popupItemValue.innerText = this._levels[i];\n                popupItem.appendChild(popupItemValue);\n\n                if (i == 0 && !AppContext.current.isMuteVolumeAllowed) {\n                    popupItem.style.display = \"none\";\n                }\n\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n            }\n            if (!AppContext.current.isMuteVolumeAllowed) {\n                if (AppContext.current.isBackgroundMusicEnabled) {\n                    this._height = 60 + ((this._levels.length - 1) * 60 + 48) + \"px\";\n                } else {\n                    this._height = (this._levels.length - 1) * 60 + 48 + \"px\";\n                }\n            } else {\n                if (AppContext.current.isBackgroundMusicEnabled) {\n                    this._height = 60 + (this._levels.length * 60 + 48) + \"px\";\n                } else {\n                    this._height = this._levels.length * 60 + 48 + \"px\";\n                }\n            }\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Level\")) {\n            PlayList.play(\"SND_Click\");\n            let level: number = parseFloat(e.currentTarget.getAttribute(\"Level\"));\n            if (level === this._index) {\n            } else {\n                this._index = level;\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"Level\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"Level\")) === level) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                }\n                AppContext.current.setVolume(level);\n            }\n        }\n        this.changeSoundButton();\n    }\n\n    private onBackgroundClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null) {\n            PlayList.play(\"SND_Click\");\n            if (e.currentTarget.classList.contains(\"_on\")) {\n                e.currentTarget.classList.remove(\"_on\");\n                if (!e.currentTarget.classList.contains(\"_off\")) {\n                    e.currentTarget.classList.add(\"_off\");\n                }\n                DataManager.BackSoundsPlayingFromGame = false;\n                AppContext.current.setBackgroundMusic(false);\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\n            } else {\n                e.currentTarget.classList.remove(\"_off\");\n                if (!e.currentTarget.classList.contains(\"_on\")) {\n                    e.currentTarget.classList.add(\"_on\");\n                }\n                DataManager.BackSoundsPlayingFromGame = true;\n                AppContext.current.setBackgroundMusic(true);\n                PlayList.stopAllInGroup(\"BackgroundMusic\", true);\n            }\n        }\n    }\n\n    setLevel(level: number): void {\n        this._index = level;\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (i === level) {\n                    if (!this._values[i].classList.contains(\"_active\")) {\n                        this._values[i].classList.add(\"_active\");\n                    }\n                } else {\n                    this._values[i].classList.remove(\"_active\");\n                }\n            }\n        }\n        this.changeSoundButton();\n    }\n\n    changeSoundButton(): void {\n        if (this._soundButton != null) {\n            if (this._levelsClasses[this._index] != null) {\n                for (let i: number = 0; i < this._levelsClasses.length; i++) {\n                    this._soundButton.classList.remove(this._levelsClasses[i]);\n                }\n                this._soundButton.classList.add(this._levelsClasses[this._index]);\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlSoundContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { HtmlAutoplayItemButtonElement } from \"./HtmlAutoplayItemButtonElement\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayButtonElement extends HtmlButtonElement {\n    private _simpleAutoplayCounts: Array<HtmlAutoplayItemButtonElement>;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        if (AppContext.gameConfiguration.AutoplayMode === \"basic\") {\n            this.createBasicMode();\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\n            this.createSimpleMode();\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\n            this.createAdvancedMode();\n        } else {\n            this.createBasicMode();\n        }\n\n        if (this.instance != null) {\n            this.instance.parentElement.removeChild(this.instance);\n        }\n    }\n\n    private createBasicMode(): void {\n        this.removeOtherMode(\"simpleAutoplayButton\");\n        this.removeOtherMode(\"advancedAutoplayButton\");\n    }\n\n    private createSimpleMode(): void {\n        this.removeOtherMode(\"basicAutoplayButton\");\n        this.removeOtherMode(\"advancedAutoplayButton\");\n\n        this._simpleAutoplayCounts = [];\n        let holder: HTMLElement = document.getElementById(\"autoplaySelectorHolder\");\n        if (holder != null) {\n            if (\n                AppContext.gameConfiguration.AutoplayCounts != null &&\n                AppContext.gameConfiguration.AutoplayCounts.length > 0\n            ) {\n                AppContext.gameConfiguration.AutoplayCounts.reverse();\n                for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\n                    let button: HtmlAutoplayItemButtonElement = new HtmlAutoplayItemButtonElement();\n                    let text: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                    button.action = \"AUTOPLAY\";\n                    button.registerEvents();\n                    text.classList.add(\"autoplayCnt\");\n                    if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\n                        text.innerText = \"∞\";\n                        button.autoplayCount = \"∞\";\n                    } else {\n                        text.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                        button.autoplayCount = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                    }\n                    button.instance.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\n\n                    if (button.instance != null) {\n                        button.instance.classList.add(\"autoplayItem\");\n                        button.instance.appendChild(text);\n                        HtmlController.registerActionElement(\"AUTOPLAY\", button);\n                        if (holder != null) {\n                            holder.appendChild(button.instance);\n                        }\n                    }\n                }\n            }\n        }\n\n        // <div CssClass=\"autoplayItem\" Class=\"HtmlAutoplayItemButtonElement\" Action=\"AUTOPLAY\" AUTOPLAY_COUNT=\"10\">\n        //     <span CssClass=\"autoplayCnt\" Class=\"HtmlText\">10</span>\n        // </div>\n    }\n\n    private createAdvancedMode(): void {\n        this.removeOtherMode(\"basicAutoplayButton\");\n        this.removeOtherMode(\"simpleAutoplayButton\");\n    }\n\n    private removeOtherMode(cls: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.remove();\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayItemButtonElement extends HtmlButtonElement {\n    autoplayCount: string = \"∞\";\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"AUTOPLAY_COUNT\")) {\n            this.autoplayCount = node.getAttribute(\"AUTOPLAY_COUNT\");\n        }\n    }\n\n    onClick(): void {\n        if (this.autoplayCount != null) {\n            DataManager.AutoplayCount = this.autoplayCount;\n        }\n        PlayList.play(\"SND_Click\");\n        super.onClick();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayItemButtonElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { GameData } from \"../../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayDialogContainerElement extends HtmlContainerElement {\n    private _autoplayDialogCounts: Array<HTMLElement> = [];\n    private _autoplayDialogLossLimit: Array<HTMLElement> = [];\n    private _autoplayDialogWinLimit: Array<HTMLElement> = [];\n\n    private _lossValueElement: HTMLElement;\n    private _winValueElement: HTMLElement;\n\n    private _button: HTMLElement;\n\n    private _count: string = \"∞\";\n    private _loss: string = \"∞\";\n    private _win: string = \"∞\";\n\n    constructor() {\n        super();\n    }\n    create(node: Element): void {\n        super.create(node);\n\n        this.createCounts();\n        this.createLossLimits();\n        this.createWinLimits();\n\n        this._lossValueElement = document.getElementById(\"autoplayDialogLossLimitValue\");\n        this._winValueElement = document.getElementById(\"autoplayDialogWinLimitValue\");\n        this._button = document.getElementById(\"autoplayDialogButton\");\n        this._button.onclick = this.runAutoplay.bind(this);\n\n        this.reset();\n    }\n\n    private createCounts(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogCounts\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogCounts\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplayCounts != null &&\n                    AppContext.gameConfiguration.AutoplayCounts.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayCounts[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onCountClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogCounts.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    private createLossLimits(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplayLossLimit != null &&\n                    AppContext.gameConfiguration.AutoplayLossLimit.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayLossLimit.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplayLossLimit[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_LOSS_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onLossClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogLossLimit.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    private createWinLimits(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit != null &&\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplaySingleWinLimit.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplaySingleWinLimit[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onWinClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogWinLimit.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    reset(): void {\n        this.resetCounts();\n        this.resetLossLimits();\n        this.resetWinLimits();\n        this.enableCounts();\n        if (this._lossValueElement != null) {\n            this._lossValueElement.innerText = \"\";\n        }\n        if (this._winValueElement != null) {\n            this._winValueElement.innerText = \"\";\n        }\n        if (this._button != null && !this._button.classList.contains(\"_disabled\")) {\n            this._button.classList.add(\"_disabled\");\n        }\n        this._count = \"∞\";\n        this._loss = \"∞\";\n        this._win = \"∞\";\n\n        DataManager.AutoplayCount = \"∞\";\n        DataManager.AutoplayLossLimit = \"∞\";\n        DataManager.AutoplayWinLimit = \"∞\";\n    }\n\n    private resetCounts(): void {\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\n                if (this._autoplayDialogCounts[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogCounts[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogCounts[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private resetLossLimits(): void {\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogLossLimit[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private resetWinLimits(): void {\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogWinLimit[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableCounts(): void {\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\n                if (this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogCounts[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableLossLimits(): void {\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableWinLimits(removeNoLimit: boolean = false): void {\n        let enabledNoLimit: boolean = true;\n        let noLimit: HTMLElement;\n\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\n                    enabledNoLimit = false;\n                }\n\n                if (this._autoplayDialogWinLimit[i].getAttribute(\"Val\") == \"∞\") {\n                    noLimit = this._autoplayDialogWinLimit[i];\n                }\n\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n\n        if (enabledNoLimit && !removeNoLimit) {\n            if (noLimit != null) {\n                if (!noLimit.classList.contains(\"_active\")) {\n                    noLimit.classList.add(\"_active\");\n                    if (this._winValueElement != null) {\n                        this._winValueElement.innerText = \"∞\";\n                    }\n                }\n            }\n        }\n\n        if (removeNoLimit) {\n            if (noLimit != null) {\n                if (noLimit.classList.contains(\"_active\")) {\n                    noLimit.classList.remove(\"_active\");\n                }\n            }\n        }\n    }\n\n    private onCountClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            this.resetCounts();\n            this.enableCounts();\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            this._count = val;\n            this.enableLossLimits();\n            if (document.getElementById(\"autoplayDialogLossLimitView\") != null) {\n                document.getElementById(\"autoplayDialogLossLimitView\").scrollIntoView(true);\n\n                if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                    document.getElementById(\"screen\").scrollTop = 0;\n                    document.getElementById(\"root\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    private onLossClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            if (this._lossValueElement != null) {\n                if (val != \"∞\" && BetManager.Bet != null) {\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\n                    this._lossValueElement.innerText =\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                } else {\n                    this._lossValueElement.innerText = \"∞\";\n                }\n            }\n\n            this.resetLossLimits();\n            this.enableLossLimits();\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            if (this._button != null && this._button.classList.contains(\"_disabled\")) {\n                this._button.classList.remove(\"_disabled\");\n            }\n            this._loss = val;\n            this.enableWinLimits();\n            if (document.getElementById(\"autoplayDialogWinLimitView\") != null) {\n                document.getElementById(\"autoplayDialogWinLimitView\").scrollIntoView(true);\n            }\n\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                document.getElementById(\"screen\").scrollTop = 0;\n                document.getElementById(\"root\").scrollTop = 0;\n            }\n        }\n    }\n\n    private onWinClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            if (this._winValueElement != null) {\n                if (val != \"∞\" && BetManager.Bet != null) {\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\n                    this._winValueElement.innerText =\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                } else {\n                    this._winValueElement.innerText = \"∞\";\n                }\n            }\n            this.resetWinLimits();\n            this.enableWinLimits(true);\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            this._win = val;\n\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                if (document.getElementById(\"autoplayDialogButton\") != null) {\n                    document.getElementById(\"autoplayDialogButton\").scrollIntoView(true);\n                    document.getElementById(\"screen\").scrollTop = 0;\n                    document.getElementById(\"root\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    private runAutoplay(e: any): void {\n        if (e != null && e.currentTarget != null && !e.currentTarget.classList.contains(\"_disabled\")) {\n            if (document.getElementById(\"autoPlayDialogTop\") != null) {\n                document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\n            }\n            if (this._count != null) {\n                DataManager.AutoplayCount = this._count;\n            }\n            if (this._loss != null && BetManager.Bet != null) {\n                if (this._loss == \"∞\") {\n                    DataManager.AutoplayLossLimit = this._loss;\n                } else {\n                    DataManager.AutoplayLossLimit = NumberUtils.multiply(this._loss, BetManager.Bet);\n                }\n            }\n            if (this._win != null && BetManager.Bet != null) {\n                if (this._win == \"∞\") {\n                    DataManager.AutoplayWinLimit = this._win;\n                } else {\n                    DataManager.AutoplayWinLimit = NumberUtils.multiply(this._win, BetManager.Bet);\n                }\n            }\n            HtmlController.dispatchAction(\"AUTOPLAY\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayDialogContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlCanvasElement is used for replacing existing canvas to right layer in dom structure.\n * Example:\n * <HtmlCanvasElement CanvasId=\"canvas\" Class=\"HtmlCanvasElement\" />\n *\n * @class HtmlCanvasElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCanvasElement extends HtmlElement {\n    constructor() {\n        // dont create instance. Instance will be attach with id from node\n        super(\"\");\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /*\n         * CanvasId is id in html document of targeting canvas.\n         * @property CanvasId\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"CanvasId\")) {\n            this.instance = document.getElementById(node.getAttribute(\"CanvasId\"));\n            if (this.instance == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with id: \" + node.getAttribute(\"CanvasId\"));\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no CanvasId\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCanvasElement.ts\n **/","import { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCheckboxElement extends HtmlButtonElement {\n    private checkbox: HTMLInputElement = null;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n        this.createCheckBox();\n    }\n\n    private createCheckBox(): void {\n        this.checkbox = <HTMLInputElement>document.createElement(\"input\");\n        this.checkbox.type = \"checkbox\";\n        this.checkbox.classList.add(\"checkbox\");\n        this.checkbox.addEventListener(\"input\", this.onCheckbox.bind(this));\n\n        if (this.instance != null) {\n            this.instance.appendChild(this.checkbox);\n        }\n\n        this.instance.classList.add(\"checkboxButton\");\n    }\n\n    onClick(): void {\n        //remove implementation and move it to onCheckBox\n    }\n\n    onCheckbox(): void {\n        if (DEBUG) {\n            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\n        }\n\n        if (this.instance != null && !this.instance.classList.contains(HtmlController.DisabledClass)) {\n            if (this.action != null) {\n                HtmlController.dispatchAction(this.action);\n            }\n\n            if (this.uiaction != null) {\n                for (var i: number = 0; i < this.uiaction.length; i++) {\n                    HtmlController.dispatchUiAction(this.uiaction[i]);\n                }\n            }\n        }\n    }\n\n    setText(value?: string): void {\n        if (value === undefined || value === null) {\n            this.checkbox.checked = !this.checkbox.checked;\n            return;\n        }\n        if (value == \"true\") {\n            if (this.checkbox.checked) {\n                return;\n            }\n            this.checkbox.checked = true;\n        } else {\n            if (!this.checkbox.checked) {\n                return;\n            }\n            this.checkbox.checked = false;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCheckboxElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n/**\n *\n * @class HtmlCustomContainerElement\n * @extends HtmlContainerElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCustomContainerElement extends HtmlContainerElement {\n    private _withGamble: HTMLElement;\n    private _withoutGamble: HTMLElement;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    changeState(value: boolean): void {\n        if (this._withGamble == null) {\n            this._withGamble = document.getElementById(\"withGamble\");\n        }\n        if (this._withoutGamble == null) {\n            this._withoutGamble = document.getElementById(\"withoutGamble\");\n        }\n\n        if (this.instance != null) {\n            if (value && DataManager.Autoplay) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n                if (AppContext.gameDefinition.Gamble) {\n                    if (this._withGamble != null) {\n                        this._withGamble.style.display = \"block\";\n                    }\n                    if (this._withoutGamble != null) {\n                        this._withoutGamble.style.display = \"none\";\n                    }\n                } else {\n                    if (this._withGamble != null) {\n                        this._withGamble.style.display = \"none\";\n                    }\n                    if (this._withoutGamble != null) {\n                        this._withoutGamble.style.display = \"block\";\n                    }\n                }\n            } else {\n                if (!this.instance.classList.contains(HtmlController.DisabledClass)) {\n                    this.instance.classList.add(HtmlController.DisabledClass);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCustomContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlDataSliderElement is used for data representing in bar or slider.\n * @class HtmlDataSliderElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlDataSliderElement extends HtmlElement {\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    /**\n     * Set text or data for this element.\n     * @method setText\n     * @param text string\n     * @return void\n     */\n    setText(value?: string): void {\n        if (value != null) {\n            var parsedValue: Array<string> = value.split(\"/\");\n            if (this.instance != null && parsedValue.length === 2) {\n                this.instance.style.width = (parseInt(parsedValue[0]) / parseInt(parsedValue[1])) * 100 + \"%\";\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlDataSliderElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlLabelElement extends HtmlElement {\n    for: string;\n    text: string;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"For\")) {\n            this.for = node.getAttribute(\"For\");\n        }\n\n        this.createLabel();\n\n        if (this.instance != null) {\n            this.instance.parentElement.removeChild(this.instance);\n        }\n    }\n\n    private createLabel(): void {\n        let holder = this.instance.parentElement;\n        let toggleSwitch: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let label: HTMLLabelElement = <HTMLLabelElement>document.createElement(\"label\");\n        toggleSwitch.classList.add(\"toggleSwitch\");\n        label.htmlFor = this.for;\n        label.innerHTML = this.instance.innerHTML;\n        toggleSwitch.appendChild(label);\n\n        if (this.instance != null) {\n            holder.firstChild.appendChild(toggleSwitch);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlLabelElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * The html text is used for render text in html.\n * Example:\n *   <span Class=\"HtmlText\">Text</span>\n *\n * @class HtmlText\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlText extends HtmlElement {\n    private _prefix: string;\n\n    constructor() {\n        super(\"\");\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        this.instance = document.createElement(node.nodeName);\n\n        if (node.textContent != null) {\n            this.instance.textContent = node.textContent;\n        }\n\n        if (node.hasAttribute(\"Prefix\")) {\n            this._prefix = node.getAttribute(\"Prefix\");\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        super.create(node);\n    }\n\n    setText(value?: string): void {\n        super.setText(value);\n\n        if (this._prefix != null && this.instance.innerHTML != null && this.instance.innerHTML != \"\") {\n            this.instance.innerHTML = \"+\" + this.instance.innerHTML;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlText.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlStyle } from \"./HtmlStyle\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlContainerStyle only holds xml node for html container elements.\n * Example:\n *   <HtmlContainerStyle Class=\"HtmlContainerStyle\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerStyle>\n * @class HtmlContainerStyle\n */\n@engineComponent(ComponentTypes.HtmlStyle)\nexport class HtmlContainerStyle extends HtmlStyle {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        // store node for container elements\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlContainerStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlStyle holds basic properties for all kind of html styles.\n * @class HtmlStyle\n */\n@engineComponent(ComponentTypes.HtmlStyle)\nexport class HtmlStyle {\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {}\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @retutn void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlStyle.ts\n **/","console.log(\"pixiInitialize\");\n// TODO device manager\nvar ios = !!navigator.platform && /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\nif (ios) {\n    PIXI.settings.PRECISION = PIXI.PRECISION.HIGH;\n}\nPIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/PixiSettings.ts\n **/"],"sourceRoot":""}